From lhames at gmail.com Mon Jul 13 00:01:19 2009 From: lhames at gmail.com (Lang Hames) Date: Mon, 13 Jul 2009 05:01:19 -0000 Subject: [llvm-commits] [llvm] r75450 - /llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp Message-ID: <200907130501.n6D51JtD015396@zion.cs.uiuc.edu> Author: lhames Date: Mon Jul 13 00:01:19 2009 New Revision: 75450 URL: http://llvm.org/viewvc/llvm-project?rev=75450&view=rev Log: Removed some junk code that snuck in to an earlier commit. Modified: llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp Modified: llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp?rev=75450&r1=75449&r2=75450&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp Mon Jul 13 00:01:19 2009 @@ -1207,7 +1207,6 @@ // mark our rollback point. std::vector added; while (!spillIs.empty()) { - bool epicFail = false; LiveInterval *sli = spillIs.back(); spillIs.pop_back(); DOUT << "\t\t\tspilling(a): " << *sli << '\n'; @@ -1224,10 +1223,6 @@ addStackInterval(sli, ls_, li_, mri_, *vrm_); std::copy(newIs.begin(), newIs.end(), std::back_inserter(added)); spilled.insert(sli->reg); - - if (epicFail) { - //abort(); - } } unsigned earliestStart = earliestStartInterval->beginNumber(); From clattner at apple.com Mon Jul 13 00:11:00 2009 From: clattner at apple.com (Chris Lattner) Date: Sun, 12 Jul 2009 22:11:00 -0700 Subject: [llvm-commits] [llvm] r75308 - in /llvm/trunk: include/llvm/CodeGen/ValueTypes.h include/llvm/CodeGen/ValueTypes.td lib/VMCore/ValueTypes.cpp utils/TableGen/CodeGenTarget.cpp In-Reply-To: References: <200907102305.n6AN59IR023740@zion.cs.uiuc.edu> <7E2A4BE4-54DB-4C97-9DE5-9C6C13E1DC8B@apple.com> Message-ID: <709C2D16-CBE7-48F0-85A7-646D33BA461A@apple.com> On Jul 12, 2009, at 9:54 PM, Evan Cheng wrote: > My current plan is to model with as intrinsics that produce multiple > scalar values. We should simply pre-register allocate them isel time. Works for me. If/when perf starts mattering for them, we can reevaluate and improve it then. -Chris From daniel at zuster.org Mon Jul 13 00:27:30 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 05:27:30 -0000 Subject: [llvm-commits] [llvm] r75451 - /llvm/trunk/lib/Support/APInt.cpp Message-ID: <200907130527.n6D5RU98016131@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 00:27:30 2009 New Revision: 75451 URL: http://llvm.org/viewvc/llvm-project?rev=75451&view=rev Log: Switch to raw_ostream. Modified: llvm/trunk/lib/Support/APInt.cpp Modified: llvm/trunk/lib/Support/APInt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APInt.cpp?rev=75451&r1=75450&r2=75451&view=diff ============================================================================== --- llvm/trunk/lib/Support/APInt.cpp (original) +++ llvm/trunk/lib/Support/APInt.cpp Mon Jul 13 00:27:30 2009 @@ -1544,12 +1544,12 @@ uint64_t b = uint64_t(1) << 32; #if 0 - DEBUG(cerr << "KnuthDiv: m=" << m << " n=" << n << '\n'); - DEBUG(cerr << "KnuthDiv: original:"); - DEBUG(for (int i = m+n; i >=0; i--) cerr << " " << std::setbase(16) << u[i]); - DEBUG(cerr << " by"); - DEBUG(for (int i = n; i >0; i--) cerr << " " << std::setbase(16) << v[i-1]); - DEBUG(cerr << '\n'); + DEBUG(errs() << "KnuthDiv: m=" << m << " n=" << n << '\n'); + DEBUG(errs() << "KnuthDiv: original:"); + DEBUG(for (int i = m+n; i >=0; i--) errs() << " " << u[i]); + DEBUG(errs() << " by"); + DEBUG(for (int i = n; i >0; i--) errs() << " " << v[i-1]); + DEBUG(errs() << '\n'); #endif // D1. [Normalize.] Set d = b / (v[n-1] + 1) and multiply all the digits of // u and v by d. Note that we have taken Knuth's advice here to use a power @@ -1576,17 +1576,17 @@ } u[m+n] = u_carry; #if 0 - DEBUG(cerr << "KnuthDiv: normal:"); - DEBUG(for (int i = m+n; i >=0; i--) cerr << " " << std::setbase(16) << u[i]); - DEBUG(cerr << " by"); - DEBUG(for (int i = n; i >0; i--) cerr << " " << std::setbase(16) << v[i-1]); - DEBUG(cerr << '\n'); + DEBUG(errs() << "KnuthDiv: normal:"); + DEBUG(for (int i = m+n; i >=0; i--) errs() << " " << u[i]); + DEBUG(errs() << " by"); + DEBUG(for (int i = n; i >0; i--) errs() << " " << v[i-1]); + DEBUG(errs() << '\n'); #endif // D2. [Initialize j.] Set j to m. This is the loop counter over the places. int j = m; do { - DEBUG(cerr << "KnuthDiv: quotient digit #" << j << '\n'); + DEBUG(errs() << "KnuthDiv: quotient digit #" << j << '\n'); // D3. [Calculate q'.]. // Set qp = (u[j+n]*b + u[j+n-1]) / v[n-1]. (qp=qprime=q') // Set rp = (u[j+n]*b + u[j+n-1]) % v[n-1]. (rp=rprime=r') @@ -1596,7 +1596,7 @@ // value qp is one too large, and it eliminates all cases where qp is two // too large. uint64_t dividend = ((uint64_t(u[j+n]) << 32) + u[j+n-1]); - DEBUG(cerr << "KnuthDiv: dividend == " << dividend << '\n'); + DEBUG(errs() << "KnuthDiv: dividend == " << dividend << '\n'); uint64_t qp = dividend / v[n-1]; uint64_t rp = dividend % v[n-1]; if (qp == b || qp*v[n-2] > b*rp + u[j+n-2]) { @@ -1605,7 +1605,7 @@ if (rp < b && (qp == b || qp*v[n-2] > b*rp + u[j+n-2])) qp--; } - DEBUG(cerr << "KnuthDiv: qp == " << qp << ", rp == " << rp << '\n'); + DEBUG(errs() << "KnuthDiv: qp == " << qp << ", rp == " << rp << '\n'); // D4. [Multiply and subtract.] Replace (u[j+n]u[j+n-1]...u[j]) with // (u[j+n]u[j+n-1]..u[j]) - qp * (v[n-1]...v[1]v[0]). This computation @@ -1616,9 +1616,9 @@ uint64_t u_tmp = uint64_t(u[j+i]) | (uint64_t(u[j+i+1]) << 32); uint64_t subtrahend = uint64_t(qp) * uint64_t(v[i]); bool borrow = subtrahend > u_tmp; - DEBUG(cerr << "KnuthDiv: u_tmp == " << u_tmp - << ", subtrahend == " << subtrahend - << ", borrow = " << borrow << '\n'); + DEBUG(errs() << "KnuthDiv: u_tmp == " << u_tmp + << ", subtrahend == " << subtrahend + << ", borrow = " << borrow << '\n'); uint64_t result = u_tmp - subtrahend; unsigned k = j + i; @@ -1630,12 +1630,12 @@ k++; } isNeg |= borrow; - DEBUG(cerr << "KnuthDiv: u[j+i] == " << u[j+i] << ", u[j+i+1] == " << + DEBUG(errs() << "KnuthDiv: u[j+i] == " << u[j+i] << ", u[j+i+1] == " << u[j+i+1] << '\n'); } - DEBUG(cerr << "KnuthDiv: after subtraction:"); - DEBUG(for (int i = m+n; i >=0; i--) cerr << " " << u[i]); - DEBUG(cerr << '\n'); + DEBUG(errs() << "KnuthDiv: after subtraction:"); + DEBUG(for (int i = m+n; i >=0; i--) errs() << " " << u[i]); + DEBUG(errs() << '\n'); // The digits (u[j+n]...u[j]) should be kept positive; if the result of // this step is actually negative, (u[j+n]...u[j]) should be left as the // true value plus b**(n+1), namely as the b's complement of @@ -1648,9 +1648,9 @@ carry = carry && u[i] == 0; } } - DEBUG(cerr << "KnuthDiv: after complement:"); - DEBUG(for (int i = m+n; i >=0; i--) cerr << " " << u[i]); - DEBUG(cerr << '\n'); + DEBUG(errs() << "KnuthDiv: after complement:"); + DEBUG(for (int i = m+n; i >=0; i--) errs() << " " << u[i]); + DEBUG(errs() << '\n'); // D5. [Test remainder.] Set q[j] = qp. If the result of step D4 was // negative, go to step D6; otherwise go on to step D7. @@ -1671,16 +1671,16 @@ } u[j+n] += carry; } - DEBUG(cerr << "KnuthDiv: after correction:"); - DEBUG(for (int i = m+n; i >=0; i--) cerr <<" " << u[i]); - DEBUG(cerr << "\nKnuthDiv: digit result = " << q[j] << '\n'); + DEBUG(errs() << "KnuthDiv: after correction:"); + DEBUG(for (int i = m+n; i >=0; i--) errs() <<" " << u[i]); + DEBUG(errs() << "\nKnuthDiv: digit result = " << q[j] << '\n'); // D7. [Loop on j.] Decrease j by one. Now if j >= 0, go back to D3. } while (--j >= 0); - DEBUG(cerr << "KnuthDiv: quotient:"); - DEBUG(for (int i = m; i >=0; i--) cerr <<" " << q[i]); - DEBUG(cerr << '\n'); + DEBUG(errs() << "KnuthDiv: quotient:"); + DEBUG(for (int i = m; i >=0; i--) errs() <<" " << q[i]); + DEBUG(errs() << '\n'); // D8. [Unnormalize]. Now q[...] is the desired quotient, and the desired // remainder may be obtained by dividing u[...] by d. If r is non-null we @@ -1691,22 +1691,22 @@ // shift right here. In order to mak if (shift) { unsigned carry = 0; - DEBUG(cerr << "KnuthDiv: remainder:"); + DEBUG(errs() << "KnuthDiv: remainder:"); for (int i = n-1; i >= 0; i--) { r[i] = (u[i] >> shift) | carry; carry = u[i] << (32 - shift); - DEBUG(cerr << " " << r[i]); + DEBUG(errs() << " " << r[i]); } } else { for (int i = n-1; i >= 0; i--) { r[i] = u[i]; - DEBUG(cerr << " " << r[i]); + DEBUG(errs() << " " << r[i]); } } - DEBUG(cerr << '\n'); + DEBUG(errs() << '\n'); } #if 0 - DEBUG(cerr << std::setbase(10) << '\n'); + DEBUG(errs() << '\n'); #endif } From daniel at zuster.org Mon Jul 13 00:29:34 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 05:29:34 -0000 Subject: [llvm-commits] [llvm] r75452 - /llvm/trunk/lib/Archive/Archive.cpp Message-ID: <200907130529.n6D5TYT8016206@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 00:29:34 2009 New Revision: 75452 URL: http://llvm.org/viewvc/llvm-project?rev=75452&view=rev Log: Fix some non-sensical code. - This makes it more like other similar code in Archive handling. Modified: llvm/trunk/lib/Archive/Archive.cpp Modified: llvm/trunk/lib/Archive/Archive.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Archive/Archive.cpp?rev=75452&r1=75451&r2=75452&view=diff ============================================================================== --- llvm/trunk/lib/Archive/Archive.cpp (original) +++ llvm/trunk/lib/Archive/Archive.cpp Mon Jul 13 00:29:34 2009 @@ -126,8 +126,11 @@ return true; } - // Determine what kind of file it is + // Determine what kind of file it is. switch (sys::IdentifyFileType(signature,4)) { + case sys::Bitcode_FileType: + flags |= BitcodeFlag; + break; default: flags &= ~BitcodeFlag; break; From nicholas at mxc.ca Mon Jul 13 00:49:05 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 13 Jul 2009 05:49:05 -0000 Subject: [llvm-commits] [llvm] r75453 - /llvm/trunk/lib/VMCore/LLVMContext.cpp Message-ID: <200907130549.n6D5n5FD016720@zion.cs.uiuc.edu> Author: nicholas Date: Mon Jul 13 00:49:04 2009 New Revision: 75453 URL: http://llvm.org/viewvc/llvm-project?rev=75453&view=rev Log: Fix build on Linux. Modified: llvm/trunk/lib/VMCore/LLVMContext.cpp Modified: llvm/trunk/lib/VMCore/LLVMContext.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/LLVMContext.cpp?rev=75453&r1=75452&r2=75453&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/LLVMContext.cpp (original) +++ llvm/trunk/lib/VMCore/LLVMContext.cpp Mon Jul 13 00:49:04 2009 @@ -19,6 +19,7 @@ #include "llvm/MDNode.h" #include "llvm/Support/ManagedStatic.h" #include "LLVMContextImpl.h" +#include using namespace llvm; From daniel at zuster.org Mon Jul 13 01:00:14 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 06:00:14 -0000 Subject: [llvm-commits] [llvm] r75454 - in /llvm/trunk/lib/CodeGen: ELFWriter.h MachOWriter.h Message-ID: <200907130600.n6D60En2017046@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 01:00:13 2009 New Revision: 75454 URL: http://llvm.org/viewvc/llvm-project?rev=75454&view=rev Log: Match declaration to definition. Modified: llvm/trunk/lib/CodeGen/ELFWriter.h llvm/trunk/lib/CodeGen/MachOWriter.h Modified: llvm/trunk/lib/CodeGen/ELFWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.h?rev=75454&r1=75453&r2=75454&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ELFWriter.h (original) +++ llvm/trunk/lib/CodeGen/ELFWriter.h Mon Jul 13 01:00:13 2009 @@ -26,7 +26,7 @@ class ELFCodeEmitter; class ELFRelocation; class ELFSection; - class ELFSym; + struct ELFSym; class GlobalVariable; class Mangler; class MachineCodeEmitter; Modified: llvm/trunk/lib/CodeGen/MachOWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachOWriter.h?rev=75454&r1=75453&r2=75454&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachOWriter.h (original) +++ llvm/trunk/lib/CodeGen/MachOWriter.h Mon Jul 13 01:00:13 2009 @@ -27,7 +27,7 @@ class MachODySymTab; class MachOHeader; class MachOSection; - class MachOSym; + struct MachOSym; class TargetData; class TargetMachine; class TargetAsmInfo; From daniel at zuster.org Mon Jul 13 01:00:39 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 06:00:39 -0000 Subject: [llvm-commits] [llvm] r75455 - in /llvm/trunk/unittests: ExecutionEngine/JIT/ MC/ Message-ID: <200907130600.n6D60dgW017069@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 01:00:39 2009 New Revision: 75455 URL: http://llvm.org/viewvc/llvm-project?rev=75455&view=rev Log: Tweak svn:ignore Modified: llvm/trunk/unittests/ExecutionEngine/JIT/ (props changed) llvm/trunk/unittests/MC/ (props changed) Propchange: llvm/trunk/unittests/ExecutionEngine/JIT/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Mon Jul 13 01:00:39 2009 @@ -1 +1,3 @@ Debug +Release +Release-Asserts Propchange: llvm/trunk/unittests/MC/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Mon Jul 13 01:00:39 2009 @@ -1 +1,3 @@ Debug +Release +Release-Asserts From daniel at zuster.org Mon Jul 13 01:04:07 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 06:04:07 -0000 Subject: [llvm-commits] [llvm] r75456 - /llvm/trunk/lib/CodeGen/MachOWriter.h Message-ID: <200907130604.n6D6474I017207@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 01:04:06 2009 New Revision: 75456 URL: http://llvm.org/viewvc/llvm-project?rev=75456&view=rev Log: Match declaration to definition (missed a few). Modified: llvm/trunk/lib/CodeGen/MachOWriter.h Modified: llvm/trunk/lib/CodeGen/MachOWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachOWriter.h?rev=75456&r1=75455&r2=75456&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachOWriter.h (original) +++ llvm/trunk/lib/CodeGen/MachOWriter.h Mon Jul 13 01:04:06 2009 @@ -24,9 +24,9 @@ class Mangler; class MachineRelocation; class MachOCodeEmitter; - class MachODySymTab; - class MachOHeader; - class MachOSection; + struct MachODySymTab; + struct MachOHeader; + struct MachOSection; struct MachOSym; class TargetData; class TargetMachine; From sanjiv.gupta at microchip.com Mon Jul 13 05:56:42 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Mon, 13 Jul 2009 10:56:42 -0000 Subject: [llvm-commits] [llvm] r75460 - in /llvm/trunk/tools/llvmc/example/mcc16: driver/Main.cpp plugins/PIC16Base/PIC16Base.td Message-ID: <200907131056.n6DAuiJw006847@zion.cs.uiuc.edu> Author: sgupta Date: Mon Jul 13 05:56:29 2009 New Revision: 75460 URL: http://llvm.org/viewvc/llvm-project?rev=75460&view=rev Log: allow mcc16 users to specify --save-temps even though it is hidden by mcc16. link libstd.so with llvm-ld by default with all the programs user is trying to build. Modified: llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td Modified: llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp?rev=75460&r1=75459&r2=75460&view=diff ============================================================================== --- llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp (original) +++ llvm/trunk/tools/llvmc/example/mcc16/driver/Main.cpp Mon Jul 13 05:56:29 2009 @@ -25,7 +25,6 @@ // HACK SaveTemps.setHiddenFlag(llvm::cl::Hidden); - SaveTemps = SaveTempsEnum::Unset; TempDirname = "tmp-objs"; // Remove the temp dir if already exists. Modified: llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td?rev=75460&r1=75459&r2=75460&view=diff ============================================================================== --- llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td (original) +++ llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PIC16Base.td Mon Jul 13 05:56:29 2009 @@ -55,7 +55,7 @@ (in_language "llvm-bitcode"), (out_language "llvm-bitcode"), (output_suffix "bc"), - (cmd_line "$CALL(GetBinDir)llvm-ld -link-as-library std.lib $INFILE -o $OUTFILE"), + (cmd_line "$CALL(GetBinDir)llvm-ld -L $CALL(GetStdLibsDir) -l std $INFILE -o $OUTFILE"), (actions (case (switch_on "g"), (append_cmd "-disable-opt"), (not_empty "Wo,"), (unpack_values "Wo,"))), From sanjiv.gupta at microchip.com Mon Jul 13 05:58:57 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Mon, 13 Jul 2009 10:58:57 -0000 Subject: [llvm-commits] [llvm] r75461 - /llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp Message-ID: <200907131058.n6DAwvTI006914@zion.cs.uiuc.edu> Author: sgupta Date: Mon Jul 13 05:58:55 2009 New Revision: 75461 URL: http://llvm.org/viewvc/llvm-project?rev=75461&view=rev Log: Added a fixme for platform specific GetDirSeparator(). Modified: llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp Modified: llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp?rev=75461&r1=75460&r2=75461&view=diff ============================================================================== --- llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp (original) +++ llvm/trunk/tools/llvmc/example/mcc16/plugins/PIC16Base/PluginMain.cpp Mon Jul 13 05:58:55 2009 @@ -10,6 +10,8 @@ } // Returns the platform specific directory separator via #ifdefs. +// FIXME: This currently work on linux and windows only. It does not +// work on other unices. static std::string GetDirSeparator(void) { #ifdef __linux__ return "/"; From rafael.espindola at gmail.com Mon Jul 13 08:02:46 2009 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Mon, 13 Jul 2009 13:02:46 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75463 - in /llvm-gcc-4.2/trunk/gcc/cp: decl.c name-lookup.c parser.c Message-ID: <200907131302.n6DD2lno010985@zion.cs.uiuc.edu> Author: rafael Date: Mon Jul 13 08:02:40 2009 New Revision: 75463 URL: http://llvm.org/viewvc/llvm-project?rev=75463&view=rev Log: Backport some patches from gcc trunk: http://gcc.gnu.org/ml/gcc-cvs/2007-05/msg00662.html http://gcc.gnu.org/ml/gcc-cvs/2007-07/msg00019.html http://gcc.gnu.org/ml/gcc-cvs/2007-08/msg00240.html http://gcc.gnu.org/ml/gcc-cvs/2007-08/msg00493.html The first two were always GPL2. The last two were added after the GPL3 transition, but were written by aaw at google.com and I got permission to relicense them under the GPL2 for inclusion in llvm-gcc. Modified: llvm-gcc-4.2/trunk/gcc/cp/decl.c llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c llvm-gcc-4.2/trunk/gcc/cp/parser.c Modified: llvm-gcc-4.2/trunk/gcc/cp/decl.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/decl.c?rev=75463&r1=75462&r2=75463&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/decl.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/decl.c Mon Jul 13 08:02:40 2009 @@ -10433,6 +10433,14 @@ | DECL_SELF_REFERENCE_P (decl)); return t; } + //LLVM LOCAL begin mainline + else if (decl && TREE_CODE (decl) == TREE_LIST) + { + error ("reference to %qD is ambiguous", name); + print_candidates (decl); + return error_mark_node; + } + //LLVM LOCAL end mainline else return NULL_TREE; } Modified: llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c?rev=75463&r1=75462&r2=75463&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c Mon Jul 13 08:02:40 2009 @@ -42,7 +42,6 @@ #define EMPTY_SCOPE_BINDING { NULL_TREE, NULL_TREE } static cxx_scope *innermost_nonclass_level (void); -static tree select_decl (const struct scope_binding *, int); static cxx_binding *binding_for_name (cxx_scope *, tree); static tree lookup_name_innermost_nonclass_level (tree); static tree push_overloaded_decl (tree, int, bool); @@ -2115,6 +2114,22 @@ return; } + //LLVM LOCAL begin mainline + /* Shift the old and new bindings around so we're comparing class and + enumeration names to each other. */ + if (oldval && DECL_IMPLICIT_TYPEDEF_P (oldval)) + { + oldtype = oldval; + oldval = NULL_TREE; + } + + if (decls.value && DECL_IMPLICIT_TYPEDEF_P (decls.value)) + { + decls.type = decls.value; + decls.value = NULL_TREE; + } + //LLVM LOCAL end mainline + /* It is impossible to overload a built-in function; any explicit declaration eliminates the built-in declaration. So, if OLDVAL is a built-in, then we can just pretend it isn't there. */ @@ -2124,95 +2139,112 @@ && !DECL_HIDDEN_FRIEND_P (oldval)) oldval = NULL_TREE; - /* Check for using functions. */ - if (decls.value && is_overloaded_fn (decls.value)) + //LLVM LOCAL begin mainline + if (decls.value) { - tree tmp, tmp1; - - if (oldval && !is_overloaded_fn (oldval)) + /* Check for using functions. */ + if (is_overloaded_fn (decls.value)) { - if (!DECL_IMPLICIT_TYPEDEF_P (oldval)) - error ("%qD is already declared in this scope", name); - oldval = NULL_TREE; - } + tree tmp, tmp1; - *newval = oldval; - for (tmp = decls.value; tmp; tmp = OVL_NEXT (tmp)) - { - tree new_fn = OVL_CURRENT (tmp); - - /* [namespace.udecl] + if (oldval && !is_overloaded_fn (oldval)) + { + error ("%qD is already declared in this scope", name); + oldval = NULL_TREE; + } - If a function declaration in namespace scope or block - scope has the same name and the same parameter types as a - function introduced by a using declaration the program is - ill-formed. */ - for (tmp1 = oldval; tmp1; tmp1 = OVL_NEXT (tmp1)) + *newval = oldval; + for (tmp = decls.value; tmp; tmp = OVL_NEXT (tmp)) { - tree old_fn = OVL_CURRENT (tmp1); + tree new_fn = OVL_CURRENT (tmp); - if (new_fn == old_fn) - /* The function already exists in the current namespace. */ - break; - else if (OVL_USED (tmp1)) - continue; /* this is a using decl */ - else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)), - TYPE_ARG_TYPES (TREE_TYPE (old_fn)))) + /* [namespace.udecl] + + If a function declaration in namespace scope or block + scope has the same name and the same parameter types as a + function introduced by a using declaration the program is + ill-formed. */ + for (tmp1 = oldval; tmp1; tmp1 = OVL_NEXT (tmp1)) { - gcc_assert (!DECL_ANTICIPATED (old_fn) - || DECL_HIDDEN_FRIEND_P (old_fn)); + tree old_fn = OVL_CURRENT (tmp1); - /* There was already a non-using declaration in - this scope with the same parameter types. If both - are the same extern "C" functions, that's ok. */ - if (decls_match (new_fn, old_fn)) + if (new_fn == old_fn) + /* The function already exists in the current namespace. */ break; - else + else if (OVL_USED (tmp1)) + continue; /* this is a using decl */ + else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)), + TYPE_ARG_TYPES (TREE_TYPE (old_fn)))) { - error ("%qD is already declared in this scope", name); - break; + gcc_assert (!DECL_ANTICIPATED (old_fn) + || DECL_HIDDEN_FRIEND_P (old_fn)); + + /* There was already a non-using declaration in + this scope with the same parameter types. If both + are the same extern "C" functions, that's ok. */ + if (decls_match (new_fn, old_fn)) + break; + else + { + error ("%qD is already declared in this scope", name); + break; + } } } - } - - /* If we broke out of the loop, there's no reason to add - this function to the using declarations for this - scope. */ - if (tmp1) - continue; - /* If we are adding to an existing OVERLOAD, then we no - longer know the type of the set of functions. */ - if (*newval && TREE_CODE (*newval) == OVERLOAD) - TREE_TYPE (*newval) = unknown_type_node; - /* Add this new function to the set. */ - *newval = build_overload (OVL_CURRENT (tmp), *newval); - /* If there is only one function, then we use its type. (A - using-declaration naming a single function can be used in - contexts where overload resolution cannot be - performed.) */ - if (TREE_CODE (*newval) != OVERLOAD) - { - *newval = ovl_cons (*newval, NULL_TREE); - TREE_TYPE (*newval) = TREE_TYPE (OVL_CURRENT (tmp)); + /* If we broke out of the loop, there's no reason to add + this function to the using declarations for this + scope. */ + if (tmp1) + continue; + + /* If we are adding to an existing OVERLOAD, then we no + longer know the type of the set of functions. */ + if (*newval && TREE_CODE (*newval) == OVERLOAD) + TREE_TYPE (*newval) = unknown_type_node; + /* Add this new function to the set. */ + *newval = build_overload (OVL_CURRENT (tmp), *newval); + /* If there is only one function, then we use its type. (A + using-declaration naming a single function can be used in + contexts where overload resolution cannot be + performed.) */ + if (TREE_CODE (*newval) != OVERLOAD) + { + *newval = ovl_cons (*newval, NULL_TREE); + TREE_TYPE (*newval) = TREE_TYPE (OVL_CURRENT (tmp)); + } + OVL_USED (*newval) = 1; } - OVL_USED (*newval) = 1; + } + else + { + *newval = decls.value; + if (oldval && !decls_match (*newval, oldval)) + error ("%qD is already declared in this scope", name); } } else + *newval = oldval; + + if (decls.type && TREE_CODE (decls.type) == TREE_LIST) { - *newval = decls.value; - if (oldval && !decls_match (*newval, oldval)) + error ("reference to %qD is ambiguous", name); + print_candidates (decls.type); + } + else + { + *newtype = decls.type; + if (oldtype && *newtype && !decls_match (oldtype, *newtype)) error ("%qD is already declared in this scope", name); } - *newtype = decls.type; - if (oldtype && *newtype && !same_type_p (oldtype, *newtype)) + /* If *newval is empty, shift any class or enumeration name down. */ + if (!*newval) { - error ("using declaration %qD introduced ambiguous type %qT", - name, oldtype); - return; + *newval = *newtype; + *newtype = NULL_TREE; } + //LLVM LOCAL end mainline } /* Process a using-declaration at function scope. */ @@ -3532,43 +3564,63 @@ XXX In what way should I treat extern declarations? XXX I don't want to repeat the entire duplicate_decls here */ +//LLVM LOCAL begin mainline static void -ambiguous_decl (tree name, struct scope_binding *old, cxx_binding *new, - int flags) +ambiguous_decl (struct scope_binding *old, cxx_binding *new, int flags) { tree val, type; gcc_assert (old != NULL); + + /* Copy the type. */ + type = new->type; + if (LOOKUP_NAMESPACES_ONLY (flags) + || (type && hidden_name_p (type) && !(flags & LOOKUP_HIDDEN))) + type = NULL_TREE; + /* Copy the value. */ val = new->value; if (val) - switch (TREE_CODE (val)) - { - case TEMPLATE_DECL: - /* If we expect types or namespaces, and not templates, - or this is not a template class. */ - if ((LOOKUP_QUALIFIERS_ONLY (flags) - && !DECL_CLASS_TEMPLATE_P (val)) - || hidden_name_p (val)) - val = NULL_TREE; - break; - case TYPE_DECL: - if (LOOKUP_NAMESPACES_ONLY (flags) || hidden_name_p (val)) - val = NULL_TREE; - break; - case NAMESPACE_DECL: - if (LOOKUP_TYPES_ONLY (flags)) - val = NULL_TREE; - break; - case FUNCTION_DECL: - /* Ignore built-in functions that are still anticipated. */ - if (LOOKUP_QUALIFIERS_ONLY (flags) || hidden_name_p (val)) - val = NULL_TREE; - break; - default: - if (LOOKUP_QUALIFIERS_ONLY (flags)) - val = NULL_TREE; - } + { + if (hidden_name_p (val) && !(flags & LOOKUP_HIDDEN)) + val = NULL_TREE; + else + switch (TREE_CODE (val)) + { + case TEMPLATE_DECL: + /* If we expect types or namespaces, and not templates, + or this is not a template class. */ + if ((LOOKUP_QUALIFIERS_ONLY (flags) + && !DECL_CLASS_TEMPLATE_P (val))) + val = NULL_TREE; + break; + case TYPE_DECL: + if (LOOKUP_NAMESPACES_ONLY (flags) + || (type && (flags & LOOKUP_PREFER_TYPES))) + val = NULL_TREE; + break; + case NAMESPACE_DECL: + if (LOOKUP_TYPES_ONLY (flags)) + val = NULL_TREE; + break; + case FUNCTION_DECL: + /* Ignore built-in functions that are still anticipated. */ + if (LOOKUP_QUALIFIERS_ONLY (flags)) + val = NULL_TREE; + break; + default: + if (LOOKUP_QUALIFIERS_ONLY (flags)) + val = NULL_TREE; + } + } + /* If val is hidden, shift down any class or enumeration name. */ + if (!val) + { + val = type; + type = NULL_TREE; + } + +//LLVM LOCAL end mainline if (!old->value) old->value = val; /* APPLE LOCAL C++ using lookup 4329536 */ @@ -3579,25 +3631,23 @@ else { old->value = tree_cons (NULL_TREE, old->value, - build_tree_list (NULL_TREE, new->value)); + //LLVM LOCAL begin mainline + build_tree_list (NULL_TREE, val)); + //LLVM LOCAL end mainline TREE_TYPE (old->value) = error_mark_node; } } - /* ... and copy the type. */ - type = new->type; - if (LOOKUP_NAMESPACES_ONLY (flags)) - type = NULL_TREE; + + //LLVM LOCAL begin mainline if (!old->type) old->type = type; else if (type && old->type != type) { - if (flags & LOOKUP_COMPLAIN) - { - error ("%qD denotes an ambiguous type",name); - error ("%J first type here", TYPE_MAIN_DECL (old->type)); - error ("%J other type here", TYPE_MAIN_DECL (type)); - } + old->type = tree_cons (NULL_TREE, old->type, + build_tree_list (NULL_TREE, type)); + TREE_TYPE (old->type) = error_mark_node; } + //LLVM LOCAL end mainline } /* Return the declarations that are members of the namespace NS. */ @@ -3686,36 +3736,6 @@ return fns; } -/* Select the right _DECL from multiple choices. */ - -static tree -select_decl (const struct scope_binding *binding, int flags) -{ - tree val; - val = binding->value; - - timevar_push (TV_NAME_LOOKUP); - if (LOOKUP_NAMESPACES_ONLY (flags)) - { - /* We are not interested in types. */ - if (val && (TREE_CODE (val) == NAMESPACE_DECL - || TREE_CODE (val) == TREE_LIST)) - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val); - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE); - } - - /* If looking for a type, or if there is no non-type binding, select - the value binding. */ - if (binding->type && (!val || (flags & LOOKUP_PREFER_TYPES))) - val = binding->type; - /* Don't return non-types if we really prefer types. */ - else if (val && LOOKUP_TYPES_ONLY (flags) - && ! DECL_DECLARES_TYPE_P (val)) - val = NULL_TREE; - - POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val); -} - /* Unscoped lookup of a global: iterate over current namespaces, considering using-directives. */ @@ -3727,22 +3747,21 @@ tree siter; struct cp_binding_level *level; tree val = NULL_TREE; - struct scope_binding binding = EMPTY_SCOPE_BINDING; timevar_push (TV_NAME_LOOKUP); for (; !val; scope = CP_DECL_CONTEXT (scope)) { + //LLVM LOCAL begin mainline + struct scope_binding binding = EMPTY_SCOPE_BINDING; + //LLVM LOCAL end mainline cxx_binding *b = cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name); if (b) - { - if (b->value - && ((flags & LOOKUP_HIDDEN) || !hidden_name_p (b->value))) - binding.value = b->value; - binding.type = b->type; - } + //LLVM LOCAL begin mainline + ambiguous_decl (&binding, b, flags); + //LLVM LOCAL end mainline /* Add all _DECLs seen through local using-directives. */ for (level = current_binding_level; @@ -3767,7 +3786,9 @@ siter = CP_DECL_CONTEXT (siter); } - val = select_decl (&binding, flags); + //LLVM LOCAL begin mainline + val = binding.value; + //LLVM LOCAL end mainline if (scope == global_namespace) break; } @@ -3797,7 +3818,9 @@ if (is_type_p) flags |= LOOKUP_PREFER_TYPES; if (qualified_lookup_using_namespace (name, scope, &binding, flags)) - t = select_decl (&binding, flags); + //LLVM LOCAL begin mainline + t = binding.value; + //LLVM LOCAL end mainline } else if (is_aggr_type (scope, complain)) t = lookup_member (scope, name, 2, is_type_p); @@ -3830,7 +3853,9 @@ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name); /* Resolve ambiguities. */ if (val1) - ambiguous_decl (name, val, val1, flags); + //LLVM LOCAL begin mainline + ambiguous_decl (val, val1, flags); + //LLVM LOCAL end mainline } POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val->value != error_mark_node); } @@ -3859,7 +3884,9 @@ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name); seen = tree_cons (scope, NULL_TREE, seen); if (binding) - ambiguous_decl (name, result, binding, flags); + //LLVM LOCAL begin mainline + ambiguous_decl (result, binding, flags); + //LLVM LOCAL end mainline /* Consider strong using directives always, and non-strong ones if we haven't found a binding yet. ??? Shouldn't we consider Modified: llvm-gcc-4.2/trunk/gcc/cp/parser.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/parser.c?rev=75463&r1=75462&r2=75463&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/parser.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/parser.c Mon Jul 13 08:02:40 2009 @@ -11177,13 +11177,25 @@ if (parser->scope) { tree decl; + //LLVM LOCAL begin mainline + tree ambiguous_decls; + //LLVM LOCAL end mainline decl = cp_parser_lookup_name (parser, identifier, tag_type, /*is_template=*/false, /*is_namespace=*/false, /*check_dependency=*/true, - /*ambiguous_decls=*/NULL); + //LLVM LOCAL begin mainline + &ambiguous_decls); + //LLVM LOCAL end mainline + + //LLVM LOCAL begin mainline + /* If the lookup was ambiguous, an error will already have been + issued. */ + if (ambiguous_decls) + return error_mark_node; + //LLVM LOCAL end mainline /* If we are parsing friend declaration, DECL may be a TEMPLATE_DECL tree node here. However, we need to check From espindola at google.com Mon Jul 13 08:06:16 2009 From: espindola at google.com (Rafael Espindola) Date: Mon, 13 Jul 2009 14:06:16 +0100 Subject: [llvm-commits] [llvm-gcc-4.2] r75463 - in /llvm-gcc-4.2/trunk/gcc/cp: decl.c name-lookup.c parser.c In-Reply-To: <200907131302.n6DD2lno010985@zion.cs.uiuc.edu> References: <200907131302.n6DD2lno010985@zion.cs.uiuc.edu> Message-ID: <38a0d8450907130606s7eb822d8se01b0b70d8ac37a9@mail.gmail.com> Forgot to mention, the patch fixes: ----------------------------------- namespace A { typedef int B; } struct B { }; using ::A::B; --------------------------------- Cheers, -- Rafael Avila de Espindola Google | Gordon House | Barrow Street | Dublin 4 | Ireland Registered in Dublin, Ireland | Registration Number: 368047 From anton at korobeynikov.info Mon Jul 13 08:10:52 2009 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Mon, 13 Jul 2009 17:10:52 +0400 Subject: [llvm-commits] [llvm-gcc-4.2] r75463 - in /llvm-gcc-4.2/trunk/gcc/cp: decl.c name-lookup.c parser.c In-Reply-To: <200907131302.n6DD2lno010985@zion.cs.uiuc.edu> References: <200907131302.n6DD2lno010985@zion.cs.uiuc.edu> Message-ID: Hello, Rafael > + //LLVM LOCAL begin mainline Could you please use C-style comments? Thanks! -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From krister.walfridsson at gmail.com Mon Jul 13 08:35:41 2009 From: krister.walfridsson at gmail.com (Krister Walfridsson) Date: Mon, 13 Jul 2009 15:35:41 +0200 (CEST) Subject: [llvm-commits] patch: add NetBSD to class Triple Message-ID: The attached patch add NetBSD to class Triple. /Krister -------------- next part -------------- Index: include/llvm/ADT/Triple.h =================================================================== --- include/llvm/ADT/Triple.h (revision 75441) +++ include/llvm/ADT/Triple.h (working copy) @@ -54,6 +54,7 @@ DragonFly, FreeBSD, Linux, + NetBSD, OpenBSD }; Index: lib/Support/Triple.cpp =================================================================== --- lib/Support/Triple.cpp (revision 75441) +++ lib/Support/Triple.cpp (working copy) @@ -48,6 +48,7 @@ case DragonFly: return "dragonfly"; case FreeBSD: return "freebsd"; case Linux: return "linux"; + case NetBSD: return "netbsd"; case OpenBSD: return "openbsd"; } @@ -91,6 +92,8 @@ OS = FreeBSD; else if (memcmp(&OSName[0], "linux", 5) == 0) OS = Linux; + else if (memcmp(&OSName[0], "netbsd", 6) == 0) + OS = NetBSD; else if (memcmp(&OSName[0], "openbsd", 7) == 0) OS = OpenBSD; else From criswell at uiuc.edu Mon Jul 13 09:01:54 2009 From: criswell at uiuc.edu (John Criswell) Date: Mon, 13 Jul 2009 14:01:54 -0000 Subject: [llvm-commits] [poolalloc] r75466 - in /poolalloc/trunk/lib: DSA/DataStructureOpt.cpp DSA/Local.cpp PoolAllocate/AccessTrace.cpp PoolAllocate/Heuristic.cpp PoolAllocate/PAMultipleGlobalPool.cpp PoolAllocate/PASimple.cpp PoolAllocate/PointerCompress.cpp PoolAllocate/PoolAllocate.cpp PoolAllocate/PoolOptimize.cpp PoolAllocate/TransformFunctionBody.cpp Message-ID: <200907131401.n6DE1sgi012986@zion.cs.uiuc.edu> Author: criswell Date: Mon Jul 13 09:01:51 2009 New Revision: 75466 URL: http://llvm.org/viewvc/llvm-project?rev=75466&view=rev Log: Updated to the latest LLVM API. This time, we changed Constant::getNullValue() to ConstantAggregateZero::get(). Modified: poolalloc/trunk/lib/DSA/DataStructureOpt.cpp poolalloc/trunk/lib/DSA/Local.cpp poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp poolalloc/trunk/lib/PoolAllocate/Heuristic.cpp poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp poolalloc/trunk/lib/PoolAllocate/PASimple.cpp poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp Modified: poolalloc/trunk/lib/DSA/DataStructureOpt.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructureOpt.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/DataStructureOpt.cpp (original) +++ poolalloc/trunk/lib/DSA/DataStructureOpt.cpp Mon Jul 13 09:01:51 2009 @@ -17,6 +17,7 @@ #include "llvm/Analysis/Passes.h" #include "llvm/Module.h" #include "llvm/Constant.h" +#include "llvm/Constants.h" #include "llvm/Type.h" #include "llvm/ADT/Statistic.h" #include "llvm/Support/Debug.h" @@ -78,7 +79,8 @@ // remove anything that references the global: later passes will take // care of nuking it. if (!I->use_empty()) { - I->replaceAllUsesWith(Constant::getNullValue((Type*)I->getType())); + Type * Ty = (Type *) I->getType(); + I->replaceAllUsesWith(ConstantAggregateZero::get(Ty)); ++NumGlobalsIsolated; } } else if (GNode && GNode->isCompleteNode()) { @@ -87,7 +89,8 @@ // visible, kill any references to it so it can be DCE'd. if (!GNode->isModifiedNode() && !GNode->isReadNode() &&I->hasInternalLinkage()){ if (!I->use_empty()) { - I->replaceAllUsesWith(Constant::getNullValue((Type*)I->getType())); + Type * Ty = (Type *) I->getType(); + I->replaceAllUsesWith(ConstantAggregateZero::get(Ty)); ++NumGlobalsIsolated; } } Modified: poolalloc/trunk/lib/DSA/Local.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/Local.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/Local.cpp (original) +++ poolalloc/trunk/lib/DSA/Local.cpp Mon Jul 13 09:01:51 2009 @@ -375,7 +375,7 @@ bool AllZeros = true; for (unsigned i = 1, e = GEP.getNumOperands(); i != e; ++i) if (GEP.getOperand(i) != - Constant::getNullValue(GEP.getOperand(i)->getType())) { + ConstantAggregateZero::get(GEP.getOperand(i)->getType())) { AllZeros = false; break; } Modified: poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp Mon Jul 13 09:01:51 2009 @@ -91,7 +91,7 @@ if (PD) PD = CastInst::CreatePointerCast (PD, VoidPtrTy, PD->getName(), I); else - PD = Constant::getNullValue(VoidPtrTy); + PD = ConstantAggregateZero::get(VoidPtrTy); // Insert the trace call. Value *Opts[2] = {Ptr, PD}; Modified: poolalloc/trunk/lib/PoolAllocate/Heuristic.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/Heuristic.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/Heuristic.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/Heuristic.cpp Mon Jul 13 09:01:51 2009 @@ -443,7 +443,7 @@ NullGlobal = new GlobalVariable(*M, PoolAllocate::PoolDescPtrTy, false, GlobalValue::ExternalLinkage, - Constant::getNullValue(PoolAllocate::PoolDescPtrTy), + ConstantAggregateZero::get(PoolAllocate::PoolDescPtrTy), "llvm-poolalloc-null-init"); } while (isa(I)) ++I; Modified: poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp Mon Jul 13 09:01:51 2009 @@ -365,7 +365,7 @@ new GlobalVariable (M, getPoolType(), false, GlobalValue::ExternalLinkage, - Constant::getNullValue(getPoolType()), + ConstantAggregateZero::get(getPoolType()), "__poolalloc_GlobalPool"); Value *ElSize = ConstantInt::get(Type::Int32Ty, RecSize); Modified: poolalloc/trunk/lib/PoolAllocate/PASimple.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PASimple.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PASimple.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PASimple.cpp Mon Jul 13 09:01:51 2009 @@ -355,7 +355,7 @@ GlobalVariable *GV = new GlobalVariable(M, getPoolType(), false, GlobalValue::ExternalLinkage, - Constant::getNullValue(getPoolType()), + ConstantAggregateZero::get(getPoolType()), "__poolalloc_GlobalPool"); Function *InitFunc = Function::Create Modified: poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp Mon Jul 13 09:01:51 2009 @@ -287,7 +287,7 @@ assert(PoolBase == 0 && "Mixing and matching optimized vs not!"); // Get the pool base pointer. - Constant *Zero = Constant::getNullValue(Type::Int32Ty); + Constant *Zero = ConstantAggregateZero::get(Type::Int32Ty); Value *Opts[2] = {Zero, Zero}; Value *BasePtrPtr = GetElementPtrInst::Create(getPoolDesc(), Opts, Opts + 2, "poolbaseptrptr", &I); @@ -299,7 +299,7 @@ isa(PoolDesc))) { BasicBlock::iterator IP = I.getParent()->getParent()->begin()->begin(); while (isa(IP)) ++IP; - Constant *Zero = Constant::getNullValue(Type::Int32Ty); + Constant *Zero = ConstantAggregateZero::get(Type::Int32Ty); Value *Opts[2] = {Zero, Zero}; Value *BasePtrPtr = GetElementPtrInst::Create(getPoolDesc(), Opts, Opts + 2, "poolbaseptrptr", IP); @@ -383,7 +383,7 @@ /// value, creating a new forward ref value as needed. Value *getTransformedValue(Value *V) { if (isa(V)) // null -> uint 0 - return Constant::getNullValue(SCALARUINTTYPE); + return ConstantAggregateZero::get(SCALARUINTTYPE); if (isa(V)) // undef -> uint undef return UndefValue::get(SCALARUINTTYPE); @@ -828,7 +828,7 @@ } } else { // FIXME: This assumes that all null pointers are compressed! - SrcVal = Constant::getNullValue(MEMUINTTYPE); + SrcVal = ConstantAggregateZero::get(MEMUINTTYPE); } // Get the pool base pointer. Modified: poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp Mon Jul 13 09:01:51 2009 @@ -587,7 +587,7 @@ // Any unallocated DSNodes get null pool descriptor pointers. for (hash_set::iterator I = GlobalHeapNodes.begin(), E = GlobalHeapNodes.end(); I != E; ++I) { - GlobalNodes[*I] = Constant::getNullValue(PointerType::getUnqual(PoolDescType)); + GlobalNodes[*I] = ConstantAggregateZero::get(PointerType::getUnqual(PoolDescType)); ++NumNonprofit; } @@ -602,7 +602,7 @@ GlobalVariable *GV = new GlobalVariable(*CurModule, PoolDescType, false, GlobalValue::InternalLinkage, - Constant::getNullValue(PoolDescType), "GlobalPool"); + ConstantAggregateZero::get(PoolDescType), "GlobalPool"); // Update the global DSGraph to include this. DSNode *GNode = Graphs->getGlobalsGraph()->addObjectToGraph(GV); @@ -686,7 +686,7 @@ // Any unallocated DSNodes get null pool descriptor pointers. for (std::set::iterator I = UnallocatedNodes.begin(), E = UnallocatedNodes.end(); I != E; ++I) { - PoolDescriptors[*I] =Constant::getNullValue(PointerType::getUnqual(PoolDescType)); + PoolDescriptors[*I] =ConstantAggregateZero::get(PointerType::getUnqual(PoolDescType)); ++NumNonprofit; } } Modified: poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp Mon Jul 13 09:01:51 2009 @@ -130,7 +130,7 @@ // poolrealloc(PD, X, 0) -> poolfree(PD, X) Value* Opts[2] = {CI->getOperand(1), CI->getOperand(2)}; CallInst::Create(PoolFree, Opts, Opts + 2, "", CI); - CI->replaceAllUsesWith(Constant::getNullValue(CI->getType())); + CI->replaceAllUsesWith(ConstantAggregateZero::get(CI->getType())); CI->eraseFromParent(); } else if (isa(CI->getOperand(1))) { // poolrealloc(null, X, Y) -> realloc(X, Y) Modified: poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp?rev=75466&r1=75465&r2=75466&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp Mon Jul 13 09:01:51 2009 @@ -446,7 +446,7 @@ PH = getPoolHandle(I); // Return success always. - Value *RetVal = Constant::getNullValue(I->getType()); + Value *RetVal = ConstantAggregateZero::get(I->getType()); I->replaceAllUsesWith(RetVal); static const Type *PtrPtr=PointerType::getUnqual(PointerType::getUnqual(Type::Int8Ty)); @@ -727,7 +727,7 @@ // pool descriptors to pass in... std::vector Args; for (unsigned i = 0, e = ArgNodes.size(); i != e; ++i) { - Value *ArgVal = Constant::getNullValue(PoolAllocate::PoolDescPtrTy); + Value *ArgVal = ConstantAggregateZero::get(PoolAllocate::PoolDescPtrTy); if (NodeMapping.count(ArgNodes[i])) if (DSNode *LocalNode = NodeMapping[ArgNodes[i]].getNode()) if (FI.PoolDescriptors.count(LocalNode)) From rafael.espindola at gmail.com Mon Jul 13 09:11:20 2009 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Mon, 13 Jul 2009 14:11:20 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75467 - in /llvm-gcc-4.2/trunk/gcc/cp: decl.c name-lookup.c parser.c Message-ID: <200907131411.n6DEBKw1013330@zion.cs.uiuc.edu> Author: rafael Date: Mon Jul 13 09:11:20 2009 New Revision: 75467 URL: http://llvm.org/viewvc/llvm-project?rev=75467&view=rev Log: Use C-style comments. Modified: llvm-gcc-4.2/trunk/gcc/cp/decl.c llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c llvm-gcc-4.2/trunk/gcc/cp/parser.c Modified: llvm-gcc-4.2/trunk/gcc/cp/decl.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/decl.c?rev=75467&r1=75466&r2=75467&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/decl.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/decl.c Mon Jul 13 09:11:20 2009 @@ -10433,14 +10433,14 @@ | DECL_SELF_REFERENCE_P (decl)); return t; } - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ else if (decl && TREE_CODE (decl) == TREE_LIST) { error ("reference to %qD is ambiguous", name); print_candidates (decl); return error_mark_node; } - //LLVM LOCAL end mainline + /* LLVM LOCAL begin mainline */ else return NULL_TREE; } Modified: llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c?rev=75467&r1=75466&r2=75467&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c Mon Jul 13 09:11:20 2009 @@ -2114,7 +2114,7 @@ return; } - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ /* Shift the old and new bindings around so we're comparing class and enumeration names to each other. */ if (oldval && DECL_IMPLICIT_TYPEDEF_P (oldval)) @@ -2128,7 +2128,7 @@ decls.type = decls.value; decls.value = NULL_TREE; } - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ /* It is impossible to overload a built-in function; any explicit declaration eliminates the built-in declaration. So, if OLDVAL @@ -2139,7 +2139,7 @@ && !DECL_HIDDEN_FRIEND_P (oldval)) oldval = NULL_TREE; - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ if (decls.value) { /* Check for using functions. */ @@ -2244,7 +2244,7 @@ *newval = *newtype; *newtype = NULL_TREE; } - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ } /* Process a using-declaration at function scope. */ @@ -3564,7 +3564,7 @@ XXX In what way should I treat extern declarations? XXX I don't want to repeat the entire duplicate_decls here */ -//LLVM LOCAL begin mainline +/* LLVM LOCAL begin mainline */ static void ambiguous_decl (struct scope_binding *old, cxx_binding *new, int flags) { @@ -3620,7 +3620,7 @@ type = NULL_TREE; } -//LLVM LOCAL end mainline +/* LLVM LOCAL end mainline */ if (!old->value) old->value = val; /* APPLE LOCAL C++ using lookup 4329536 */ @@ -3631,14 +3631,14 @@ else { old->value = tree_cons (NULL_TREE, old->value, - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ build_tree_list (NULL_TREE, val)); - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ TREE_TYPE (old->value) = error_mark_node; } } - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ if (!old->type) old->type = type; else if (type && old->type != type) @@ -3647,7 +3647,7 @@ build_tree_list (NULL_TREE, type)); TREE_TYPE (old->type) = error_mark_node; } - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ } /* Return the declarations that are members of the namespace NS. */ @@ -3752,16 +3752,16 @@ for (; !val; scope = CP_DECL_CONTEXT (scope)) { - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ struct scope_binding binding = EMPTY_SCOPE_BINDING; - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ cxx_binding *b = cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name); if (b) - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ ambiguous_decl (&binding, b, flags); - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ /* Add all _DECLs seen through local using-directives. */ for (level = current_binding_level; @@ -3786,9 +3786,9 @@ siter = CP_DECL_CONTEXT (siter); } - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ val = binding.value; - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ if (scope == global_namespace) break; } @@ -3818,9 +3818,9 @@ if (is_type_p) flags |= LOOKUP_PREFER_TYPES; if (qualified_lookup_using_namespace (name, scope, &binding, flags)) - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ t = binding.value; - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ } else if (is_aggr_type (scope, complain)) t = lookup_member (scope, name, 2, is_type_p); @@ -3853,9 +3853,9 @@ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name); /* Resolve ambiguities. */ if (val1) - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ ambiguous_decl (val, val1, flags); - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ } POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, val->value != error_mark_node); } @@ -3884,9 +3884,9 @@ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name); seen = tree_cons (scope, NULL_TREE, seen); if (binding) - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ ambiguous_decl (result, binding, flags); - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ /* Consider strong using directives always, and non-strong ones if we haven't found a binding yet. ??? Shouldn't we consider Modified: llvm-gcc-4.2/trunk/gcc/cp/parser.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/parser.c?rev=75467&r1=75466&r2=75467&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/parser.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/parser.c Mon Jul 13 09:11:20 2009 @@ -11177,25 +11177,25 @@ if (parser->scope) { tree decl; - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ tree ambiguous_decls; - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ decl = cp_parser_lookup_name (parser, identifier, tag_type, /*is_template=*/false, /*is_namespace=*/false, /*check_dependency=*/true, - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ &ambiguous_decls); - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ - //LLVM LOCAL begin mainline + /* LLVM LOCAL begin mainline */ /* If the lookup was ambiguous, an error will already have been issued. */ if (ambiguous_decls) return error_mark_node; - //LLVM LOCAL end mainline + /* LLVM LOCAL end mainline */ /* If we are parsing friend declaration, DECL may be a TEMPLATE_DECL tree node here. However, we need to check From criswell at uiuc.edu Mon Jul 13 10:48:58 2009 From: criswell at uiuc.edu (John Criswell) Date: Mon, 13 Jul 2009 15:48:58 -0000 Subject: [llvm-commits] [poolalloc] r75469 - /poolalloc/trunk/lib/DSA/Local.cpp Message-ID: <200907131548.n6DFmwSa018131@zion.cs.uiuc.edu> Author: criswell Date: Mon Jul 13 10:48:58 2009 New Revision: 75469 URL: http://llvm.org/viewvc/llvm-project?rev=75469&view=rev Log: Fixed last commit. I'm not sure if there exists a way to generate a "zero" value for any type, but in this case, we know that we're checking integers. Therefore, use the isZero() method of ConstantInt to check that all the integer operands of a GEP are zeros. Modified: poolalloc/trunk/lib/DSA/Local.cpp Modified: poolalloc/trunk/lib/DSA/Local.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/Local.cpp?rev=75469&r1=75468&r2=75469&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/Local.cpp (original) +++ poolalloc/trunk/lib/DSA/Local.cpp Mon Jul 13 10:48:58 2009 @@ -373,12 +373,14 @@ // As a special case, if all of the index operands of GEP are constant zeros, // handle this just like we handle casts (ie, don't do much). bool AllZeros = true; - for (unsigned i = 1, e = GEP.getNumOperands(); i != e; ++i) - if (GEP.getOperand(i) != - ConstantAggregateZero::get(GEP.getOperand(i)->getType())) { - AllZeros = false; - break; - } + for (unsigned i = 1, e = GEP.getNumOperands(); i != e; ++i) { + if (ConstantInt * CI = dyn_cast(GEP.getOperand(i))) + if (CI->isZero()) { + continue; + } + AllZeros = false; + break; + } // If all of the indices are zero, the result points to the operand without // applying the type. From criswell at uiuc.edu Mon Jul 13 11:11:04 2009 From: criswell at uiuc.edu (John Criswell) Date: Mon, 13 Jul 2009 16:11:04 -0000 Subject: [llvm-commits] [poolalloc] r75470 - in /poolalloc/trunk/lib: DSA/DataStructureOpt.cpp PoolAllocate/AccessTrace.cpp PoolAllocate/Makefile PoolAllocate/PointerCompress.cpp PoolAllocate/PoolAllocate.cpp PoolAllocate/PoolOptimize.cpp PoolAllocate/TransformFunctionBody.cpp Message-ID: <200907131611.n6DGB4vh019599@zion.cs.uiuc.edu> Author: criswell Date: Mon Jul 13 11:11:04 2009 New Revision: 75470 URL: http://llvm.org/viewvc/llvm-project?rev=75470&view=rev Log: Fixed code so that it calls ConstantPointerNull::get() or ConstantAggregateZero()::get() depending upon which type of zero constant it needs to produce. Build pool allocation as a shared library so that it can be used in bugpoint and opt. Modified: poolalloc/trunk/lib/DSA/DataStructureOpt.cpp poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp poolalloc/trunk/lib/PoolAllocate/Makefile poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp Modified: poolalloc/trunk/lib/DSA/DataStructureOpt.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructureOpt.cpp?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/DataStructureOpt.cpp (original) +++ poolalloc/trunk/lib/DSA/DataStructureOpt.cpp Mon Jul 13 11:11:04 2009 @@ -79,8 +79,7 @@ // remove anything that references the global: later passes will take // care of nuking it. if (!I->use_empty()) { - Type * Ty = (Type *) I->getType(); - I->replaceAllUsesWith(ConstantAggregateZero::get(Ty)); + I->replaceAllUsesWith(ConstantPointerNull::get(I->getType())); ++NumGlobalsIsolated; } } else if (GNode && GNode->isCompleteNode()) { @@ -89,8 +88,7 @@ // visible, kill any references to it so it can be DCE'd. if (!GNode->isModifiedNode() && !GNode->isReadNode() &&I->hasInternalLinkage()){ if (!I->use_empty()) { - Type * Ty = (Type *) I->getType(); - I->replaceAllUsesWith(ConstantAggregateZero::get(Ty)); + I->replaceAllUsesWith(ConstantPointerNull::get(I->getType())); ++NumGlobalsIsolated; } } Modified: poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp Mon Jul 13 11:11:04 2009 @@ -29,7 +29,7 @@ PoolAllocate *PoolAlloc; DataStructures *G; Constant *AccessTraceInitFn, *PoolAccessTraceFn; - const Type *VoidPtrTy; + const PointerType *VoidPtrTy; public: PoolAccessTrace() : ModulePass((intptr_t)&ID) {} @@ -91,7 +91,7 @@ if (PD) PD = CastInst::CreatePointerCast (PD, VoidPtrTy, PD->getName(), I); else - PD = ConstantAggregateZero::get(VoidPtrTy); + PD = ConstantPointerNull::get(VoidPtrTy); // Insert the trace call. Value *Opts[2] = {Ptr, PD}; Modified: poolalloc/trunk/lib/PoolAllocate/Makefile URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/Makefile?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/Makefile (original) +++ poolalloc/trunk/lib/PoolAllocate/Makefile Mon Jul 13 11:11:04 2009 @@ -7,6 +7,7 @@ # Give the name of a library. This will build a dynamic version. # BUILD_RELINKED=1 +SHARED_LIBRARY=1 LIBRARYNAME=poolalloc # Modified: poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp Mon Jul 13 11:11:04 2009 @@ -287,7 +287,7 @@ assert(PoolBase == 0 && "Mixing and matching optimized vs not!"); // Get the pool base pointer. - Constant *Zero = ConstantAggregateZero::get(Type::Int32Ty); + Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); Value *Opts[2] = {Zero, Zero}; Value *BasePtrPtr = GetElementPtrInst::Create(getPoolDesc(), Opts, Opts + 2, "poolbaseptrptr", &I); @@ -299,7 +299,7 @@ isa(PoolDesc))) { BasicBlock::iterator IP = I.getParent()->getParent()->begin()->begin(); while (isa(IP)) ++IP; - Constant *Zero = ConstantAggregateZero::get(Type::Int32Ty); + Constant *Zero = ConstantInt::get(Type::Int32Ty, 0); Value *Opts[2] = {Zero, Zero}; Value *BasePtrPtr = GetElementPtrInst::Create(getPoolDesc(), Opts, Opts + 2, "poolbaseptrptr", IP); @@ -383,7 +383,7 @@ /// value, creating a new forward ref value as needed. Value *getTransformedValue(Value *V) { if (isa(V)) // null -> uint 0 - return ConstantAggregateZero::get(SCALARUINTTYPE); + return ConstantInt::get(SCALARUINTTYPE, 0); if (isa(V)) // undef -> uint undef return UndefValue::get(SCALARUINTTYPE); @@ -828,7 +828,7 @@ } } else { // FIXME: This assumes that all null pointers are compressed! - SrcVal = ConstantAggregateZero::get(MEMUINTTYPE); + SrcVal = ConstantInt::get(MEMUINTTYPE, 0); } // Get the pool base pointer. Modified: poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp Mon Jul 13 11:11:04 2009 @@ -587,7 +587,7 @@ // Any unallocated DSNodes get null pool descriptor pointers. for (hash_set::iterator I = GlobalHeapNodes.begin(), E = GlobalHeapNodes.end(); I != E; ++I) { - GlobalNodes[*I] = ConstantAggregateZero::get(PointerType::getUnqual(PoolDescType)); + GlobalNodes[*I] = ConstantPointerNull::get(PointerType::getUnqual(PoolDescType)); ++NumNonprofit; } @@ -686,7 +686,7 @@ // Any unallocated DSNodes get null pool descriptor pointers. for (std::set::iterator I = UnallocatedNodes.begin(), E = UnallocatedNodes.end(); I != E; ++I) { - PoolDescriptors[*I] =ConstantAggregateZero::get(PointerType::getUnqual(PoolDescType)); + PoolDescriptors[*I] = ConstantPointerNull::get(PointerType::getUnqual(PoolDescType)); ++NumNonprofit; } } Modified: poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp Mon Jul 13 11:11:04 2009 @@ -130,7 +130,9 @@ // poolrealloc(PD, X, 0) -> poolfree(PD, X) Value* Opts[2] = {CI->getOperand(1), CI->getOperand(2)}; CallInst::Create(PoolFree, Opts, Opts + 2, "", CI); - CI->replaceAllUsesWith(ConstantAggregateZero::get(CI->getType())); + const PointerType * PT = dyn_cast(CI->getType()); + assert (PT && "poolrealloc call does not return a pointer!\n"); + CI->replaceAllUsesWith(ConstantPointerNull::get(PT)); CI->eraseFromParent(); } else if (isa(CI->getOperand(1))) { // poolrealloc(null, X, Y) -> realloc(X, Y) Modified: poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp?rev=75470&r1=75469&r2=75470&view=diff ============================================================================== --- poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp (original) +++ poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp Mon Jul 13 11:11:04 2009 @@ -446,7 +446,9 @@ PH = getPoolHandle(I); // Return success always. - Value *RetVal = ConstantAggregateZero::get(I->getType()); + const PointerType * PT = dyn_cast(I->getType()); + assert (PT && "memalign() does not return pointer type!\n"); + Value *RetVal = ConstantPointerNull::get(PT); I->replaceAllUsesWith(RetVal); static const Type *PtrPtr=PointerType::getUnqual(PointerType::getUnqual(Type::Int8Ty)); From greened at obbligato.org Mon Jul 13 11:49:28 2009 From: greened at obbligato.org (David Greene) Date: Mon, 13 Jul 2009 16:49:28 -0000 Subject: [llvm-commits] [llvm] r75472 - in /llvm/trunk: include/llvm/CodeGen/AsmFormatter.h include/llvm/Support/FormattedStream.h lib/Support/FormattedStream.cpp Message-ID: <200907131649.n6DGnTIV022198@zion.cs.uiuc.edu> Author: greened Date: Mon Jul 13 11:49:27 2009 New Revision: 75472 URL: http://llvm.org/viewvc/llvm-project?rev=75472&view=rev Log: Make some more changes suggested by Chris. Manipulators go away. Removed: llvm/trunk/include/llvm/CodeGen/AsmFormatter.h Modified: llvm/trunk/include/llvm/Support/FormattedStream.h llvm/trunk/lib/Support/FormattedStream.cpp Removed: llvm/trunk/include/llvm/CodeGen/AsmFormatter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmFormatter.h?rev=75471&view=auto ============================================================================== --- llvm/trunk/include/llvm/CodeGen/AsmFormatter.h (original) +++ llvm/trunk/include/llvm/CodeGen/AsmFormatter.h (removed) @@ -1,65 +0,0 @@ -//===-- llvm/CodeGen/AsmFormatter.h - Formatted asm framework ---*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file contains various I/O manipulators to pretty-print asm. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Support/FormattedStream.h" -#include "llvm/Target/TargetAsmInfo.h" - -namespace llvm -{ - /// AsmComment - An I/O manipulator to output an end-of-line comment - /// - class AsmComment : public Column { - private: - /// CommentColumn - The column at which to output a comment - /// - static const int CommentColumn = 60; - /// Text - The comment to output - /// - std::string Text; - /// TAI - Target information from the code generator - /// - const TargetAsmInfo &TAI; - - public: - AsmComment(const TargetAsmInfo &T) - : Column(CommentColumn), Text(""), TAI(T) {} - - AsmComment(const std::string &Cmnt, - const TargetAsmInfo &T) - : Column(CommentColumn), Text(Cmnt), TAI(T) {} - - /// operator() - Store a comments tring for later processing. - /// - AsmComment &operator()(const std::string &Cmnt) { - Text = Cmnt; - return *this; - } - - /// operator() - Make Comment a functor invoktable by a stream - /// output operator. This intentially hides Column's operator(). - /// - formatted_raw_ostream &operator()(formatted_raw_ostream &Out) const { - Column::operator()(Out); - Out << TAI.getCommentString() << " " << Text; - return(Out); - } - }; - - /// operator<< - Support comment formatting in formatted streams. - /// - inline formatted_raw_ostream &operator<<(formatted_raw_ostream &Out, - const AsmComment &Func) - { - return(Func(Out)); - } -} Modified: llvm/trunk/include/llvm/Support/FormattedStream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FormattedStream.h?rev=75472&r1=75471&r2=75472&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/FormattedStream.h (original) +++ llvm/trunk/include/llvm/Support/FormattedStream.h Mon Jul 13 11:49:27 2009 @@ -12,23 +12,24 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CODEGEN_ASMSTREAM_H -#define LLVM_CODEGEN_ASMSTREAM_H +#ifndef LLVM_SUPPORT_FORMATTEDSTREAM_H +#define LLVM_SUPPORT_FORMATTEDSTREAM_H #include "llvm/Support/raw_ostream.h" namespace llvm { - /// raw_asm_fd_ostream - Formatted raw_fd_ostream to handle - /// asm-specific constructs + /// formatted_raw_ostream - Formatted raw_fd_ostream to handle + /// asm-specific constructs. /// class formatted_raw_ostream : public raw_ostream { private: - /// TheStream - The real stream we output to + /// TheStream - The real stream we output to. /// raw_ostream &TheStream; - /// Column - The current output column of the stream + /// Column - The current output column of the stream. The column + /// scheme is zero-based. /// unsigned Column; @@ -63,44 +64,14 @@ formatted_raw_ostream(raw_ostream &Stream) : raw_ostream(), TheStream(Stream), Column(0) {} - /// PadToColumn - Align the output to some column number + /// PadToColumn - Align the output to some column number. /// - /// \param NewCol - The column to move to + /// \param NewCol - The column to move to. /// \param MinPad - The minimum space to give after the most - /// recent I/O, even if the current column + minpad > newcol + /// recent I/O, even if the current column + minpad > newcol. /// void PadToColumn(unsigned NewCol, unsigned MinPad = 0); }; - - /// Column - An I/O manipulator to advance the output to a certain column - /// - class Column { - private: - /// Col - The column to move to - /// - unsigned int Col; - - public: - explicit Column(unsigned int c) - : Col(c) {} - - /// operator() - Make Column a functor invokable by a stream - /// output operator. - /// - formatted_raw_ostream &operator()(formatted_raw_ostream &Out) const { - // Make at least one space before the next output - Out.PadToColumn(Col, 1); - return(Out); - } - }; - - /// operator<< - Support coulmn-setting in formatted streams. - /// - inline formatted_raw_ostream &operator<<(formatted_raw_ostream &Out, - const Column &Func) - { - return(Func(Out)); - } } #endif Modified: llvm/trunk/lib/Support/FormattedStream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FormattedStream.cpp?rev=75472&r1=75471&r2=75472&view=diff ============================================================================== --- llvm/trunk/lib/Support/FormattedStream.cpp (original) +++ llvm/trunk/lib/Support/FormattedStream.cpp Mon Jul 13 11:49:27 2009 @@ -1,74 +1,57 @@ -//===-- llvm/CodeGen/AsmStream.cpp - AsmStream Framework --------*- C++ -*-===// +//===-- llvm/Support/FormattedStream.cpp - Formatted streams ----*- C++ -*-===// // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // -// This file contains instantiations of "standard" AsmOStreams. +// This file contains the implementation of formatted_raw_ostream and +// friends. // //===----------------------------------------------------------------------===// #include "llvm/Support/FormattedStream.h" -namespace llvm { - /// ComputeColumn - Examine the current output and figure out which - /// column we end up in after output. - /// - void formatted_raw_ostream::ComputeColumn(const char *Ptr, unsigned Size) - { - // Keep track of the current column by scanning the string for - // special characters - - // Find the last newline. This is our column start. If there - // is no newline, start with the current column. - const char *nlpos = NULL; - for (const char *pos = Ptr + Size, *epos = Ptr; pos > epos; --pos) { - if (*(pos-1) == '\n') { - nlpos = pos-1; - // The newline will be counted, setting this to zero. We - // need to do it this way in case nlpos is Ptr. - Column = -1; - break; - } - } - - if (nlpos == NULL) { - nlpos = Ptr; - } - - // Walk through looking for tabs and advance column as appropriate - for (const char *pos = nlpos, *epos = Ptr + Size; pos != epos; ++pos) { - ++Column; - if (*pos == '\t') { - // Advance to next tab stop (every eight characters) - Column += ((8 - (Column & 0x7)) & 0x7); - assert(!(Column & 0x3) && "Column out of alignment"); - } - } +using namespace llvm; + +/// ComputeColumn - Examine the current output and figure out which +/// column we end up in after output. +/// +void formatted_raw_ostream::ComputeColumn(const char *Ptr, unsigned Size) +{ + // Keep track of the current column by scanning the string for + // special characters + + for (const char *epos = Ptr + Size; Ptr != epos; ++Ptr) { + ++Column; + if (*Ptr == '\n' || *Ptr == '\r') + Column = 0; + else if (*Ptr == '\t') + Column += (8 - (Column & 0x7)) & 0x7; } +} - /// PadToColumn - Align the output to some column number - /// - /// \param NewCol - The column to move to - /// \param MinPad - The minimum space to give after the most recent - /// I/O, even if the current column + minpad > newcol - /// - void formatted_raw_ostream::PadToColumn(unsigned NewCol, unsigned MinPad) - { - flush(); - - // Output spaces until we reach the desired column - unsigned num = NewCol - Column; - if (NewCol < Column || num < MinPad) { - num = MinPad; - } - - // TODO: Write a whole string at a time - while (num-- > 0) { - write(' '); - } +/// PadToColumn - Align the output to some column number. +/// +/// \param NewCol - The column to move to. +/// \param MinPad - The minimum space to give after the most recent +/// I/O, even if the current column + minpad > newcol. +/// +void formatted_raw_ostream::PadToColumn(unsigned NewCol, unsigned MinPad) +{ + flush(); + + // Output spaces until we reach the desired column. + unsigned num = NewCol - Column; + if (NewCol < Column || num < MinPad) { + num = MinPad; + } + + // TODO: Write a whole string at a time. + while (num-- > 0) { + write(' '); } } + From david_goodwin at apple.com Mon Jul 13 12:10:19 2009 From: david_goodwin at apple.com (David Goodwin) Date: Mon, 13 Jul 2009 17:10:19 -0000 Subject: [llvm-commits] [test-suite] r75475 - in /test-suite/trunk: External/SPEC/Makefile.spec Makefile.programs Message-ID: <200907131710.n6DHAKYF023684@zion.cs.uiuc.edu> Author: david_goodwin Date: Mon Jul 13 12:10:19 2009 New Revision: 75475 URL: http://llvm.org/viewvc/llvm-project?rev=75475&view=rev Log: Use $CURDIR to get the current directory. Modified: test-suite/trunk/External/SPEC/Makefile.spec test-suite/trunk/Makefile.programs Modified: test-suite/trunk/External/SPEC/Makefile.spec URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/External/SPEC/Makefile.spec?rev=75475&r1=75474&r2=75475&view=diff ============================================================================== --- test-suite/trunk/External/SPEC/Makefile.spec (original) +++ test-suite/trunk/External/SPEC/Makefile.spec Mon Jul 13 12:10:19 2009 @@ -121,7 +121,7 @@ Output/%.bugpoint-opt: Output/%.noopt-llvm.bc $(LBUGPOINT) \ Output/opt-pass-args Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) -llc-safe ../$*.noopt-llvm.bc `cat Output/opt-pass-args` $(OPTPASSES) \ + PWD=$(CURDIR) $(LBUGPOINT) -llc-safe ../$*.noopt-llvm.bc `cat Output/opt-pass-args` $(OPTPASSES) \ $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" @@ -129,40 +129,40 @@ Output/%.bugpoint-llvm-ld: Output/%.nollvm-ldopt-llvm.bc $(LBUGPOINT) \ Output/llvm-ld-pass-args Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) -llc-safe ../$*.nollvm-ldopt-llvm.bc `cat Output/llvm-ld-pass-args` $(OPTPASSES) \ + PWD=$(CURDIR) $(LBUGPOINT) -llc-safe ../$*.nollvm-ldopt-llvm.bc `cat Output/llvm-ld-pass-args` $(OPTPASSES) \ $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-llc): \ Output/%.bugpoint-llc: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) ../$*.llvm.bc -run-llc $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) ../$*.llvm.bc -run-llc $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-llc-beta): \ Output/%.bugpoint-llc-beta: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) ../$*.llvm.bc -run-llc $(BUGPOINT_OPTIONS) \ + PWD=$(CURDIR) $(LBUGPOINT) ../$*.llvm.bc -run-llc $(BUGPOINT_OPTIONS) \ $(LLCBETAOPTION) $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-jit): \ Output/%.bugpoint-jit: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) ../$*.llvm.bc -safe-run-llc -run-jit $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) ../$*.llvm.bc -safe-run-llc -run-jit $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-jit-beta): \ Output/%.bugpoint-jit-beta: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) ../$*.llvm.bc -run-jit $(BUGPOINT_OPTIONS) \ + PWD=$(CURDIR) $(LBUGPOINT) ../$*.llvm.bc -run-jit $(BUGPOINT_OPTIONS) \ $(LLCBETAOPTION) $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-cbe): \ Output/%.bugpoint-cbe: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat $(SPEC_SANDBOX) bugpoint-$(RUN_TYPE) $@ $(REF_IN_DIR) \ - PWD=$(shell /bin/pwd) $(LBUGPOINT) ../$*.llvm.bc -cbe-bug $(BUGPOINT_OPTIONS) \ + PWD=$(CURDIR) $(LBUGPOINT) ../$*.llvm.bc -cbe-bug $(BUGPOINT_OPTIONS) \ $(BUGPOINT_ARGS) @echo "===> Leaving Output/bugpoint-$(RUN_TYPE)" Modified: test-suite/trunk/Makefile.programs URL: http://llvm.org/viewvc/llvm-project/test-suite/trunk/Makefile.programs?rev=75475&r1=75474&r2=75475&view=diff ============================================================================== --- test-suite/trunk/Makefile.programs (original) +++ test-suite/trunk/Makefile.programs Mon Jul 13 12:10:19 2009 @@ -558,32 +558,32 @@ $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-opt): \ Output/%.bugpoint-opt: Output/%.noopt-llvm.bc $(LBUGPOINT) \ Output/opt-pass-args Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) -llc-safe $< `cat Output/opt-pass-args` $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) -llc-safe $< `cat Output/opt-pass-args` $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-llvm-ld): \ Output/%.bugpoint-llvm-ld: Output/%.nollvm-ldopt-llvm.bc $(LBUGPOINT) \ Output/llvm-ld-pass-args Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) -llc-safe $< `cat Output/llvm-ld-pass-args` $(OPTPASSES) $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) -llc-safe $< `cat Output/llvm-ld-pass-args` $(OPTPASSES) $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-llc): \ Output/%.bugpoint-llc: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) $< -run-llc $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) $< -run-llc $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-llc-beta): \ Output/%.bugpoint-llc-beta: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) $< -run-llc $(BUGPOINT_OPTIONS) $(LLCBETAOPTION) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) $< -run-llc $(BUGPOINT_OPTIONS) $(LLCBETAOPTION) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-opt-beta): \ Output/%.bugpoint-opt-beta: Output/%.linked.rbc $(LBUGPOINT) Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) -llc-safe $< $(BUGPOINT_OPTIONS) $(LLCBETAOPTION) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) -llc-safe $< $(BUGPOINT_OPTIONS) $(LLCBETAOPTION) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-jit): \ Output/%.bugpoint-jit: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) $< -run-jit -safe-run-llc $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) $< -run-jit -safe-run-llc $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.bugpoint-cbe): \ Output/%.bugpoint-cbe: Output/%.llvm.bc $(LBUGPOINT) Output/%.out-nat - PWD=$(shell /bin/pwd) $(LBUGPOINT) $< -cbe-bug $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) + PWD=$(CURDIR) $(LBUGPOINT) $< -cbe-bug $(BUGPOINT_OPTIONS) $(BUGPOINT_ARGS) $(PROGRAMS_TO_TEST:%=Output/%.misopt.out): \ Output/%.misopt.out: Output/%.linked.rbc $(LFINDMISOPT) From sabre at nondot.org Mon Jul 13 12:14:23 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 17:14:23 -0000 Subject: [llvm-commits] [llvm] r75476 - in /llvm/trunk: lib/Analysis/MemoryDependenceAnalysis.cpp test/Transforms/GVN/2009-07-13-MemDepSortFail.ll Message-ID: <200907131714.n6DHENYx023972@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 12:14:23 2009 New Revision: 75476 URL: http://llvm.org/viewvc/llvm-project?rev=75476&view=rev Log: Move the re-sort of invalidated NonLocalPointerDeps cache earlier so that all code paths get it. PR4256 was about a case where the phi translation loop would find all preds in the Visited cache, so it could get by without re-sorting the NonLocalPointerDeps cache. Fix this by resorting it earlier, there is no reason not to do this. This patch inspired by Jakub Staszak's patch. Added: llvm/trunk/test/Transforms/GVN/2009-07-13-MemDepSortFail.ll Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=75476&r1=75475&r2=75476&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Mon Jul 13 12:14:23 2009 @@ -731,10 +731,22 @@ // If we do need to do phi translation, then there are a bunch of different // cases, because we have to find a Value* live in the predecessor block. We // know that PtrInst is defined in this block at least. + + // We may have added values to the cache list before this PHI translation. + // If so, we haven't done anything to ensure that the cache remains sorted. + // Sort it now (if needed) so that recursive invocations of + // getNonLocalPointerDepFromBB and other routines that could reuse the cache + // value will only see properly sorted cache arrays. + if (Cache && NumSortedEntries != Cache->size()) { + std::sort(Cache->begin(), Cache->end()); + NumSortedEntries = Cache->size(); + } // If this is directly a PHI node, just use the incoming values for each // pred as the phi translated version. if (PHINode *PtrPHI = dyn_cast(PtrInst)) { + Cache = 0; + for (BasicBlock **PI = PredCache->GetPreds(BB); *PI; ++PI) { BasicBlock *Pred = *PI; Value *PredPtr = PtrPHI->getIncomingValueForBlock(Pred); @@ -759,15 +771,6 @@ goto PredTranslationFailure; } - // We may have added values to the cache list before this PHI - // translation. If so, we haven't done anything to ensure that the - // cache remains sorted. Sort it now (if needed) so that recursive - // invocations of getNonLocalPointerDepFromBB that could reuse the cache - // value will only see properly sorted cache arrays. - if (Cache && NumSortedEntries != Cache->size()) - std::sort(Cache->begin(), Cache->end()); - Cache = 0; - // FIXME: it is entirely possible that PHI translating will end up with // the same value. Consider PHI translating something like: // X = phi [x, bb1], [y, bb2]. PHI translating for bb1 doesn't *need* @@ -779,7 +782,7 @@ Result, Visited)) goto PredTranslationFailure; } - + // Refresh the CacheInfo/Cache pointer so that it isn't invalidated. CacheInfo = &NonLocalPointerDeps[CacheKey]; Cache = &CacheInfo->second; @@ -806,11 +809,8 @@ CacheInfo = &NonLocalPointerDeps[CacheKey]; Cache = &CacheInfo->second; NumSortedEntries = Cache->size(); - } else if (NumSortedEntries != Cache->size()) { - std::sort(Cache->begin(), Cache->end()); - NumSortedEntries = Cache->size(); } - + // Since we did phi translation, the "Cache" set won't contain all of the // results for the query. This is ok (we can still use it to accelerate // specific block queries) but we can't do the fastpath "return all Added: llvm/trunk/test/Transforms/GVN/2009-07-13-MemDepSortFail.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/2009-07-13-MemDepSortFail.ll?rev=75476&view=auto ============================================================================== --- llvm/trunk/test/Transforms/GVN/2009-07-13-MemDepSortFail.ll (added) +++ llvm/trunk/test/Transforms/GVN/2009-07-13-MemDepSortFail.ll Mon Jul 13 12:14:23 2009 @@ -0,0 +1,67 @@ +; RUN: llvm-as < %s | opt -gvn | llvm-dis +; PR4256 +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" +target triple = "i386-linux-gnu" + %llvm.dbg.anchor.type = type { i32, i32 } + %struct.cset = type { i8*, i8, i8, i32, i8* } + %struct.lmat = type { %struct.re_guts*, i32, %llvm.dbg.anchor.type*, i8*, i8*, i8*, i8*, i8**, i32, i8*, i8*, i8*, i8*, i8* } + %struct.re_guts = type { i32*, %struct.cset*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i32, i32, i32, i32, [1 x i8] } + +define i8* @lbackref(%struct.lmat* %m, i8* %start, i8* %stop, i32 %startst, i32 %stopst, i32 %lev, i32 %rec) nounwind { +entry: + br label %bb63 + +bb: ; preds = %bb63 + switch i32 0, label %bb62 [ + i32 268435456, label %bb2 + i32 805306368, label %bb9 + i32 -1610612736, label %bb51 + ] + +bb2: ; preds = %bb + br label %bb62 + +bb9: ; preds = %bb + %0 = load i8* %sp.1, align 1 ; [#uses=0] + br label %bb62 + +bb51: ; preds = %bb + %1 = load i8* %sp.1, align 1 ; [#uses=0] + ret i8* null + +bb62: ; preds = %bb9, %bb2, %bb + br label %bb63 + +bb63: ; preds = %bb84, %bb69, %bb62, %entry + %sp.1 = phi i8* [ null, %bb62 ], [ %sp.1.lcssa, %bb84 ], [ %start, %entry ], [ %sp.1.lcssa, %bb69 ] ; [#uses=3] + br i1 false, label %bb, label %bb65 + +bb65: ; preds = %bb63 + %sp.1.lcssa = phi i8* [ %sp.1, %bb63 ] ; [#uses=4] + br i1 false, label %bb66, label %bb69 + +bb66: ; preds = %bb65 + ret i8* null + +bb69: ; preds = %bb65 + switch i32 0, label %bb108.loopexit2.loopexit.loopexit [ + i32 1342177280, label %bb63 + i32 1476395008, label %bb84 + i32 1879048192, label %bb104 + i32 2013265920, label %bb93 + ] + +bb84: ; preds = %bb69 + %2 = tail call i8* @lbackref(%struct.lmat* %m, i8* %sp.1.lcssa, i8* %stop, i32 0, i32 %stopst, i32 0, i32 0) nounwind ; [#uses=0] + br label %bb63 + +bb93: ; preds = %bb69 + ret i8* null + +bb104: ; preds = %bb69 + %sp.1.lcssa.lcssa33 = phi i8* [ %sp.1.lcssa, %bb69 ] ; [#uses=0] + unreachable + +bb108.loopexit2.loopexit.loopexit: ; preds = %bb69 + ret i8* null +} From sabre at nondot.org Mon Jul 13 12:20:05 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 17:20:05 -0000 Subject: [llvm-commits] [llvm] r75478 - /llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Message-ID: <200907131720.n6DHK5I6024453@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 12:20:05 2009 New Revision: 75478 URL: http://llvm.org/viewvc/llvm-project?rev=75478&view=rev Log: factor the 'optimized sort' code out into a static helper function and use it from one more place. Patch by Jakub Staszak! Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=75478&r1=75477&r2=75478&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Mon Jul 13 12:20:05 2009 @@ -599,6 +599,42 @@ return Dep; } +/// SortNonLocalDepInfoCache - Sort the a NonLocalDepInfo cache, given a certain +/// number of elements in the array that are already properly ordered. This is +/// optimized for the case when only a few entries are added. +static void +SortNonLocalDepInfoCache(MemoryDependenceAnalysis::NonLocalDepInfo &Cache, + unsigned NumSortedEntries) { + switch (Cache.size() - NumSortedEntries) { + case 0: + // done, no new entries. + break; + case 2: { + // Two new entries, insert the last one into place. + MemoryDependenceAnalysis::NonLocalDepEntry Val = Cache.back(); + Cache.pop_back(); + MemoryDependenceAnalysis::NonLocalDepInfo::iterator Entry = + std::upper_bound(Cache.begin(), Cache.end()-1, Val); + Cache.insert(Entry, Val); + // FALL THROUGH. + } + case 1: + // One new entry, Just insert the new value at the appropriate position. + if (Cache.size() != 1) { + MemoryDependenceAnalysis::NonLocalDepEntry Val = Cache.back(); + Cache.pop_back(); + MemoryDependenceAnalysis::NonLocalDepInfo::iterator Entry = + std::upper_bound(Cache.begin(), Cache.end(), Val); + Cache.insert(Entry, Val); + } + break; + default: + // Added many values, do a full scale sort. + std::sort(Cache.begin(), Cache.end()); + break; + } +} + /// getNonLocalPointerDepFromBB - Perform a dependency query based on /// pointer/pointeesize starting at the end of StartBB. Add any clobber/def @@ -738,7 +774,7 @@ // getNonLocalPointerDepFromBB and other routines that could reuse the cache // value will only see properly sorted cache arrays. if (Cache && NumSortedEntries != Cache->size()) { - std::sort(Cache->begin(), Cache->end()); + SortNonLocalDepInfoCache(*Cache, NumSortedEntries); NumSortedEntries = Cache->size(); } @@ -841,33 +877,7 @@ } // Okay, we're done now. If we added new values to the cache, re-sort it. - switch (Cache->size()-NumSortedEntries) { - case 0: - // done, no new entries. - break; - case 2: { - // Two new entries, insert the last one into place. - NonLocalDepEntry Val = Cache->back(); - Cache->pop_back(); - NonLocalDepInfo::iterator Entry = - std::upper_bound(Cache->begin(), Cache->end()-1, Val); - Cache->insert(Entry, Val); - // FALL THROUGH. - } - case 1: - // One new entry, Just insert the new value at the appropriate position. - if (Cache->size() != 1) { - NonLocalDepEntry Val = Cache->back(); - Cache->pop_back(); - NonLocalDepInfo::iterator Entry = - std::upper_bound(Cache->begin(), Cache->end(), Val); - Cache->insert(Entry, Val); - } - break; - default: - // Added many values, do a full scale sort. - std::sort(Cache->begin(), Cache->end()); - } + SortNonLocalDepInfoCache(*Cache, NumSortedEntries); DEBUG(AssertSorted(*Cache)); return false; } From resistor at mac.com Mon Jul 13 12:34:27 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 10:34:27 -0700 Subject: [llvm-commits] [poolalloc] r75466 - in /poolalloc/trunk/lib: DSA/DataStructureOpt.cpp DSA/Local.cpp PoolAllocate/AccessTrace.cpp PoolAllocate/Heuristic.cpp PoolAllocate/PAMultipleGlobalPool.cpp PoolAllocate/PASimple.cpp PoolAllocate/PointerCompress.cpp PoolAllocate/PoolAllocate.cpp PoolAllocate/PoolOptimize.cpp PoolAllocate/TransformFunctionBody.cpp In-Reply-To: <200907131401.n6DE1sgi012986@zion.cs.uiuc.edu> References: <200907131401.n6DE1sgi012986@zion.cs.uiuc.edu> Message-ID: <618C2240-4351-4C61-AA9D-91A989C20D86@mac.com> On Jul 13, 2009, at 7:01 AM, John Criswell wrote: > Author: criswell > Date: Mon Jul 13 09:01:51 2009 > New Revision: 75466 > > URL: http://llvm.org/viewvc/llvm-project?rev=75466&view=rev > Log: > Updated to the latest LLVM API. > This time, we changed Constant::getNullValue() to > ConstantAggregateZero::get(). FYI, all of the static methods on Constant subclasses will be going away. The correct solution will be to use an LLVMContext. You fetch one from getGlobalContext() if you're not planning to run multithreaded. --Owen From isanbard at gmail.com Mon Jul 13 13:05:11 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 13 Jul 2009 11:05:11 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r75447 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp In-Reply-To: <200907130410.n6D4AHLD013861@zion.cs.uiuc.edu> References: <200907130410.n6D4AHLD013861@zion.cs.uiuc.edu> Message-ID: <16e5fdf90907131105t2d0c8796ja317b9d18a7d7b19@mail.gmail.com> Hi Owen, There are more places to update: /Volumes/SandBox/NightlyTest/llvmgcc42.roots/llvmgcc42~obj/src/gcc/config/rs6000/llvm-rs6000.cpp: In member function 'bool TreeToLLVM::TargetIntrinsicLower(tree_node*, unsigned int, const MemRef*, llvm::Value*&, const llvm::Type*, std::vector >&)': /Volumes/SandBox/NightlyTest/llvmgcc42.roots/llvmgcc42~obj/src/gcc/config/rs6000/llvm-rs6000.cpp:344: error: 'getNullValue' is not a member of 'llvm::Constant' make[4]: *** [llvm-rs6000.o] Error 1 make[4]: *** Waiting for unfinished jobs.... rm fsf-funding.pod gcov.pod gfdl.pod cpp.pod gpl.pod gcc.pod make[3]: *** [all-stage1-gcc] Error 2 make[2]: *** [stage1-bubble] Error 2 make[1]: *** [all] Error 2 -bw On Sun, Jul 12, 2009 at 9:10 PM, Owen Anderson wrote: > Author: resistor > Date: Sun Jul 12 23:10:16 2009 > New Revision: 75447 > > URL: http://llvm.org/viewvc/llvm-project?rev=75447&view=rev > Log: > Update for LLVM API change. > > Modified: > ? ?llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp > ? ?llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp > > Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=75447&r1=75446&r2=75447&view=diff > > ============================================================================== > --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) > +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Sun Jul 12 23:10:16 2009 > @@ -279,7 +279,7 @@ > ? ? else > ? ? ? // Non constant values, e.g. arguments, are not at global scope. > ? ? ? // When PCH is read, only global scope values are used. > - ? ? ?ValuesForPCH.push_back(Constant::getNullValue(Type::Int32Ty)); > + ? ? ?ValuesForPCH.push_back(getGlobalContext().getNullValue(Type::Int32Ty)); > ? } > > ? // Create string table. > @@ -1250,7 +1250,7 @@ > ? ? // This global should be zero initialized. ?Reconvert the type in case the > ? ? // forward def of the global and the real def differ in type (e.g. declared > ? ? // as 'int A[]', and defined as 'int A[100]'). > - ? ?Init = Constant::getNullValue(ConvertType(TREE_TYPE(decl))); > + ? ?Init = getGlobalContext().getNullValue(ConvertType(TREE_TYPE(decl))); > ? } else { > ? ? assert((TREE_CONSTANT(DECL_INITIAL(decl)) || > ? ? ? ? ? ? TREE_CODE(DECL_INITIAL(decl)) == STRING_CST) && > > Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=75447&r1=75446&r2=75447&view=diff > > ============================================================================== > --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) > +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Sun Jul 12 23:10:16 2009 > @@ -1146,7 +1146,8 @@ > ? ? // it is dead. ?This allows us to insert allocas in order without having to > ? ? // scan for an insertion point. Use BitCast for int -> int > ? ? AllocaInsertionPoint = CastInst::Create(Instruction::BitCast, > - ? ? ?Constant::getNullValue(Type::Int32Ty), Type::Int32Ty, "alloca point"); > + ? ? ?getGlobalContext().getNullValue(Type::Int32Ty), > + ? ? ?Type::Int32Ty, "alloca point"); > ? ? // Insert it as the first instruction in the entry block. > ? ? Fn->begin()->getInstList().insert(Fn->begin()->begin(), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AllocaInsertionPoint); > @@ -1312,7 +1313,7 @@ > ? const Type *ElTy = > ? ? cast(DestLoc.Ptr->getType())->getElementType(); > ? if (ElTy->isSingleValueType()) { > - ? ?StoreInst *St = Builder.CreateStore(Constant::getNullValue(ElTy), > + ? ?StoreInst *St = Builder.CreateStore(getGlobalContext().getNullValue(ElTy), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DestLoc.Ptr, DestLoc.Volatile); > ? ? St->setAlignment(DestLoc.getAlignment()); > ? } else if (const StructType *STy = dyn_cast(ElTy)) { > @@ -1601,7 +1602,7 @@ > ? ? ? // before initialization doesn't get garbage results to follow. > ? ? ? const Type *T = cast(AI->getType())->getElementType(); > ? ? ? EmitTypeGcroot(AI, decl); > - ? ? ?Builder.CreateStore(Constant::getNullValue(T), AI); > + ? ? ?Builder.CreateStore(getGlobalContext().getNullValue(T), AI); > ? ? } > > ? if (TheDebugInfo) { > @@ -1963,7 +1964,7 @@ > ? ? ? ? if (!TypeList) { > ? ? ? ? ? // Catch-all - push a null pointer. > ? ? ? ? ? Args.push_back( > - ? ? ? ? ? ?Constant::getNullValue(PointerType::getUnqual(Type::Int8Ty)) > + ? ? ? ? ? getGlobalContext().getNullValue(PointerType::getUnqual(Type::Int8Ty)) > ? ? ? ? ? ); > ? ? ? ? } else { > ? ? ? ? ? // Add the type infos. > @@ -1989,8 +1990,8 @@ > ? ? ? ? tree catch_all_type = lang_eh_catch_all(); > ? ? ? ? if (catch_all_type == NULL_TREE) > ? ? ? ? ? // Use a C++ style null catch-all object. > - ? ? ? ? ?Catch_All = > - ? ? ? ? ? ?Constant::getNullValue(PointerType::getUnqual(Type::Int8Ty)); > + ? ? ? ? ?Catch_All = getGlobalContext().getNullValue( > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PointerType::getUnqual(Type::Int8Ty)); > ? ? ? ? else > ? ? ? ? ? // This language has a type that catches all others. > ? ? ? ? ? Catch_All = Emit(catch_all_type, 0); > @@ -2193,7 +2194,7 @@ > ? } else { > ? ? // This is a bitfield reference. > ? ? if (!LV.BitSize) > - ? ? ?return Constant::getNullValue(Ty); > + ? ? ?return getGlobalContext().getNullValue(Ty); > > ? ? const Type *ValTy = cast(LV.Ptr->getType())->getElementType(); > ? ? unsigned ValSizeInBits = ValTy->getPrimitiveSizeInBits(); > @@ -3168,7 +3169,7 @@ > ? ? ICmpInst::Predicate pred = TYPE_UNSIGNED(TREE_TYPE(TREE_OPERAND(exp, 0))) ? > ? ? ? ICmpInst::ICMP_UGE : ICmpInst::ICMP_SGE; > ? ? Value *Cmp = Builder.CreateICmp(pred, Op, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? Constant::getNullValue(Op->getType()), "abscond"); > + ? ? ? ? ? ? ? ? ? ?getGlobalContext().getNullValue(Op->getType()), "abscond"); > ? ? return Builder.CreateSelect(Cmp, Op, OpN, "abs"); > ? } > > @@ -3224,7 +3225,8 @@ > ?Value *TreeToLLVM::EmitTRUTH_NOT_EXPR(tree exp) { > ? Value *V = Emit(TREE_OPERAND(exp, 0), 0); > ? if (V->getType() != Type::Int1Ty) > - ? ?V = Builder.CreateICmpNE(V, Constant::getNullValue(V->getType()), "toBool"); > + ? ?V = Builder.CreateICmpNE(V, > + ? ? ? ? ?getGlobalContext().getNullValue(V->getType()), "toBool"); > ? V = Builder.CreateNot(V, (V->getName()+"not").c_str()); > ? return CastToUIntType(V, ConvertType(TREE_TYPE(exp))); > ?} > @@ -3382,9 +3384,11 @@ > > ? // This is a truth operation like the strict &&,||,^^. ?Convert to bool as > ? // a test against zero > - ?LHS = Builder.CreateICmpNE(LHS, Constant::getNullValue(LHS->getType()), > + ?LHS = Builder.CreateICmpNE(LHS, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? getGlobalContext().getNullValue(LHS->getType()), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"toBool"); > - ?RHS = Builder.CreateICmpNE(RHS, Constant::getNullValue(RHS->getType()), > + ?RHS = Builder.CreateICmpNE(RHS, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? getGlobalContext().getNullValue(RHS->getType()), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"toBool"); > > ? Value *Res = Builder.CreateBinOp((Instruction::BinaryOps)Opc, LHS, RHS); > @@ -4965,9 +4969,10 @@ > ? ? Result = Builder.CreateAdd(Result, ConstantInt::get(Result->getType(), 1)); > ? ? Result = CastToUIntType(Result, ConvertType(TREE_TYPE(exp))); > ? ? Value *Cond = > - ? ? ?Builder.CreateICmpEQ(Amt, Constant::getNullValue(Amt->getType())); > + ? ? ?Builder.CreateICmpEQ(Amt, > + ? ? ? ? ? ? ? ? ? ? ? ? ? getGlobalContext().getNullValue(Amt->getType())); > ? ? Result = Builder.CreateSelect(Cond, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Constant::getNullValue(Result->getType()), > + ? ? ? ? ? ? ? ? ? ? ? ? ? getGlobalContext().getNullValue(Result->getType()), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Result); > ? ? return true; > ? } > @@ -5445,7 +5450,7 @@ > ? ? { > ? ? ? const Type *Ty = ConvertType(TREE_TYPE(exp)); > ? ? ? if (Ty != Type::VoidTy) > - ? ? ? ?Result = Constant::getNullValue(Ty); > + ? ? ? ?Result = getGlobalContext().getNullValue(Ty); > ? ? ? return true; > ? ? } > ?#endif ?// FIXME: Should handle these GCC extensions eventually. > @@ -5510,7 +5515,7 @@ > ?} > > ?bool TreeToLLVM::EmitBuiltinConstantP(tree exp, Value *&Result) { > - ?Result = Constant::getNullValue(ConvertType(TREE_TYPE(exp))); > + ?Result = getGlobalContext().getNullValue(ConvertType(TREE_TYPE(exp))); > ? return true; > ?} > > @@ -5625,7 +5630,7 @@ > ? unsigned DstAlign = getPointerAlignment(Dst); > > ? Value *DstV = Emit(Dst, 0); > - ?Value *Val = Constant::getNullValue(Type::Int32Ty); > + ?Value *Val = getGlobalContext().getNullValue(Type::Int32Ty); > ? Value *Len = Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0); > ? EmitMemSet(DstV, Val, Len, DstAlign); > ? return true; > @@ -5671,7 +5676,7 @@ > > ? // Default to highly local read. > ? if (ReadWrite == 0) > - ? ?ReadWrite = Constant::getNullValue(Type::Int32Ty); > + ? ?ReadWrite = getGlobalContext().getNullValue(Type::Int32Ty); > ? if (Locality == 0) > ? ? Locality = ConstantInt::get(Type::Int32Ty, 3); > > @@ -6776,7 +6781,7 @@ > ? ? std::vector BuildVecOps; > > ? ? // Insert zero initializers for any uninitialized values. > - ? ?Constant *Zero = Constant::getNullValue(PTy->getElementType()); > + ? ?Constant *Zero = getGlobalContext().getNullValue(PTy->getElementType()); > ? ? BuildVecOps.resize(cast(Ty)->getNumElements(), Zero); > > ? ? // Insert all of the elements here. > @@ -6954,7 +6959,7 @@ > > ?Constant *TreeConstantToLLVM::ConvertVECTOR_CST(tree exp) { > ? if (!TREE_VECTOR_CST_ELTS(exp)) > - ? ?return Constant::getNullValue(ConvertType(TREE_TYPE(exp))); > + ? ?return getGlobalContext().getNullValue(ConvertType(TREE_TYPE(exp))); > > ? std::vector Elts; > ? for (tree elt = TREE_VECTOR_CST_ELTS(exp); elt; elt = TREE_CHAIN(elt)) > @@ -6963,7 +6968,7 @@ > ? // The vector should be zero filled if insufficient elements are provided. > ? if (Elts.size() < TYPE_VECTOR_SUBPARTS(TREE_TYPE(exp))) { > ? ? tree EltType = TREE_TYPE(TREE_TYPE(exp)); > - ? ?Constant *Zero = Constant::getNullValue(ConvertType(EltType)); > + ? ?Constant *Zero = getGlobalContext().getNullValue(ConvertType(EltType)); > ? ? while (Elts.size() < TYPE_VECTOR_SUBPARTS(TREE_TYPE(exp))) > ? ? ? Elts.push_back(Zero); > ? } > @@ -7016,7 +7021,7 @@ > ? ? ? Elts.resize(ConstantSize); > ? ? } else { > ? ? ? // Fill the end of the string with nulls. > - ? ? ?Constant *C = Constant::getNullValue(ElTy); > + ? ? ?Constant *C = getGlobalContext().getNullValue(ElTy); > ? ? ? for (; Len != ConstantSize; ++Len) > ? ? ? ? Elts.push_back(C); > ? ? } > @@ -7090,7 +7095,7 @@ > ? // when array is filled during program initialization. > ? if (CONSTRUCTOR_ELTS(exp) == 0 || > ? ? ? VEC_length(constructor_elt, CONSTRUCTOR_ELTS(exp)) == 0) ?// All zeros? > - ? ?return Constant::getNullValue(ConvertType(TREE_TYPE(exp))); > + ? ?return getGlobalContext().getNullValue(ConvertType(TREE_TYPE(exp))); > > ? switch (TREE_CODE(TREE_TYPE(exp))) { > ? default: > @@ -7197,7 +7202,7 @@ > ? // ? ? ? of an array. ?This can occur in cases where we have an array of > ? // ? ? ? unions, and the various unions had different pieces init'd. > ? const Type *ElTy = SomeVal->getType(); > - ?Constant *Filler = Constant::getNullValue(ElTy); > + ?Constant *Filler = getGlobalContext().getNullValue(ElTy); > ? bool AllEltsSameType = true; > ? for (unsigned i = 0, e = ResultElts.size(); i != e; ++i) { > ? ? if (ResultElts[i] == 0) > @@ -7282,7 +7287,8 @@ > ? ? const Type *PadTy = Type::Int8Ty; > ? ? if (AlignedEltOffs-EltOffs != 1) > ? ? ? PadTy = ArrayType::get(PadTy, AlignedEltOffs-EltOffs); > - ? ?ResultElts.insert(ResultElts.begin()+i, Constant::getNullValue(PadTy)); > + ? ?ResultElts.insert(ResultElts.begin()+i, > + ? ? ? ? ? ? ? ? ? ? ?getGlobalContext().getNullValue(PadTy)); > ? ? ++e; ?// One extra element to scan. > ? } > > @@ -7366,7 +7372,7 @@ > ? ? if (GCCFieldOffsetInBits/8-NextFieldByteStart != 1) > ? ? ? FillTy = ArrayType::get(FillTy, > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GCCFieldOffsetInBits/8-NextFieldByteStart); > - ? ?ResultElts.push_back(Constant::getNullValue(FillTy)); > + ? ?ResultElts.push_back(getGlobalContext().getNullValue(FillTy)); > > ? ? NextFieldByteStart = GCCFieldOffsetInBits/8; > > @@ -7552,7 +7558,7 @@ > ? ? const Type *FillTy = Type::Int8Ty; > ? ? if (GCCStructSize - NextFieldByteStart != 1) > ? ? ? FillTy = ArrayType::get(FillTy, GCCStructSize - NextFieldByteStart); > - ? ?ResultElts.push_back(Constant::getNullValue(FillTy)); > + ? ?ResultElts.push_back(getGlobalContext().getNullValue(FillTy)); > ? ? NextFieldByteStart = GCCStructSize; > > ? ? // At this point, we know that our struct should have the right size. > @@ -7659,7 +7665,7 @@ > ? ? ? ? FillTy = Type::Int8Ty; > ? ? ? else > ? ? ? ? FillTy = ArrayType::get(Type::Int8Ty, UnionSize - InitSize); > - ? ? ?Elts.push_back(Constant::getNullValue(FillTy)); > + ? ? ?Elts.push_back(getGlobalContext().getNullValue(FillTy)); > ? ? } > ? } > ? return ConstantStruct::get(Elts, false); > @@ -7907,7 +7913,7 @@ > > ? ? Constant *Ops[] = { > ? ? ? StructAddrLV, > - ? ? ?Constant::getNullValue(Type::Int32Ty), > + ? ? ?getGlobalContext().getNullValue(Type::Int32Ty), > ? ? ? ConstantInt::get(Type::Int32Ty, MemberIndex) > ? ? }; > ? ? FieldPtr = TheFolder->CreateGetElementPtr(StructAddrLV, Ops+1, 2); > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From bob.wilson at apple.com Mon Jul 13 13:11:38 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Mon, 13 Jul 2009 18:11:38 -0000 Subject: [llvm-commits] [llvm] r75479 - in /llvm/trunk/lib/Target/ARM: ARMISelLowering.cpp ARMISelLowering.h Message-ID: <200907131811.n6DIBcv6027927@zion.cs.uiuc.edu> Author: bwilson Date: Mon Jul 13 13:11:36 2009 New Revision: 75479 URL: http://llvm.org/viewvc/llvm-project?rev=75479&view=rev Log: Fix comment typos. Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp llvm/trunk/lib/Target/ARM/ARMISelLowering.h Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=75479&r1=75478&r2=75479&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Mon Jul 13 13:11:36 2009 @@ -1114,7 +1114,7 @@ } // ConstantPool, JumpTable, GlobalAddress, and ExternalSymbol are lowered as -// their target countpart wrapped in the ARMISD::Wrapper node. Suppose N is +// their target counterpart wrapped in the ARMISD::Wrapper node. Suppose N is // one of the above mentioned nodes. It has to be wrapped because otherwise // Select(N) returns N. So the raw TargetGlobalAddress nodes, etc. can only // be used to form addressing mode. These wrapped nodes will be selected Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.h?rev=75479&r1=75478&r2=75479&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.h (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.h Mon Jul 13 13:11:36 2009 @@ -205,7 +205,7 @@ /// make the right decision when generating code for different targets. const ARMSubtarget *Subtarget; - /// ARMPCLabelIndex - Keep track the number of ARM PC labels created. + /// ARMPCLabelIndex - Keep track of the number of ARM PC labels created. /// unsigned ARMPCLabelIndex; From gohman at apple.com Mon Jul 13 13:25:44 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 18:25:44 -0000 Subject: [llvm-commits] [llvm] r75480 - /llvm/trunk/include/llvm/ADT/FoldingSet.h Message-ID: <200907131825.n6DIPi4B028452@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 13:25:44 2009 New Revision: 75480 URL: http://llvm.org/viewvc/llvm-project?rev=75480&view=rev Log: Add an optional optimization to FoldingSet to allow ID values to be stored rather than recomputed on each bucket traversal. Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=75480&r1=75479&r2=75480&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/FoldingSet.h (original) +++ llvm/trunk/include/llvm/ADT/FoldingSet.h Mon Jul 13 13:25:44 2009 @@ -439,6 +439,20 @@ }; //===----------------------------------------------------------------------===// +/// FastFoldingSetNode - This is a subclass of FoldingSetNode which stores +/// a FoldingSetNodeID value rather than requiring the node to recompute it +/// each time it is needed. This trades space for speed (which can be +/// significant if the ID is long), and it also permits nodes to drop +/// information that would otherwise only be required for recomputing an ID. +class FastFoldingSetNode : public FoldingSetNode { + FoldingSetNodeID FastID; +protected: + explicit FastFoldingSetNode(const FoldingSetNodeID &ID) : FastID(ID) {} +public: + void Profile(FoldingSetNodeID& ID) { ID = FastID; } +}; + +//===----------------------------------------------------------------------===// // Partial specializations of FoldingSetTrait. template struct FoldingSetTrait { From gohman at apple.com Mon Jul 13 13:28:00 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 18:28:00 -0000 Subject: [llvm-commits] [llvm] r75481 - /llvm/trunk/lib/VMCore/AsmWriter.cpp Message-ID: <200907131828.n6DIS0rU028533@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 13:27:59 2009 New Revision: 75481 URL: http://llvm.org/viewvc/llvm-project?rev=75481&view=rev Log: Change printInstruction to not print a trailing newline. Value::dump always adds a newline, so this fixes Value::dump printing an extra blank line. Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=75481&r1=75480&r2=75481&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/AsmWriter.cpp (original) +++ llvm/trunk/lib/VMCore/AsmWriter.cpp Mon Jul 13 13:27:59 2009 @@ -1620,8 +1620,10 @@ if (AnnotationWriter) AnnotationWriter->emitBasicBlockStartAnnot(BB, Out); // Output all of the instructions in the basic block... - for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) + for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I != E; ++I) { printInstruction(*I); + Out << '\n'; + } if (AnnotationWriter) AnnotationWriter->emitBasicBlockEndAnnot(BB, Out); } @@ -1903,7 +1905,6 @@ } printInfoComment(I); - Out << '\n'; } From eli.friedman at gmail.com Mon Jul 13 13:28:28 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 11:28:28 -0700 Subject: [llvm-commits] [poolalloc] r75469 - /poolalloc/trunk/lib/DSA/Local.cpp In-Reply-To: <200907131548.n6DFmwSa018131@zion.cs.uiuc.edu> References: <200907131548.n6DFmwSa018131@zion.cs.uiuc.edu> Message-ID: On Mon, Jul 13, 2009 at 8:48 AM, John Criswell wrote: > Author: criswell > Date: Mon Jul 13 10:48:58 2009 > New Revision: 75469 > > URL: http://llvm.org/viewvc/llvm-project?rev=75469&view=rev > Log: >?I'm not sure if there exists a way to generate a "zero" > value for any type, Constant::isNullValue and LLVMContext::getNullValue are the relevant functions. -Eli From resistor at mac.com Mon Jul 13 13:28:53 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 18:28:53 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75482 - /llvm-gcc-4.2/trunk/gcc/config/rs6000/llvm-rs6000.cpp Message-ID: <200907131828.n6DISrcf028565@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 13:28:53 2009 New Revision: 75482 URL: http://llvm.org/viewvc/llvm-project?rev=75482&view=rev Log: Missed one place to update for the LLVM API change. I don't know why my test build didn't catch this one. Modified: llvm-gcc-4.2/trunk/gcc/config/rs6000/llvm-rs6000.cpp Modified: llvm-gcc-4.2/trunk/gcc/config/rs6000/llvm-rs6000.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/rs6000/llvm-rs6000.cpp?rev=75482&r1=75481&r2=75482&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/rs6000/llvm-rs6000.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/config/rs6000/llvm-rs6000.cpp Mon Jul 13 13:28:53 2009 @@ -341,7 +341,7 @@ Function *smax = Intrinsic::getDeclaration(TheModule, smax_iid[N]); Function *subss = Intrinsic::getDeclaration(TheModule, subss_iid[N]); - Value *ActualOps[] = { Constant::getNullValue(ResultType), Ops[0] }; + Value *ActualOps[] = {getGlobalContext().getNullValue(ResultType), Ops[0] }; Result = Builder.CreateCall(subss, ActualOps, ActualOps+2, "tmp"); ActualOps[0] = Ops[0]; ActualOps[1] = Result; From resistor at mac.com Mon Jul 13 13:30:36 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 11:30:36 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r75447 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp In-Reply-To: <16e5fdf90907131105t2d0c8796ja317b9d18a7d7b19@mail.gmail.com> References: <200907130410.n6D4AHLD013861@zion.cs.uiuc.edu> <16e5fdf90907131105t2d0c8796ja317b9d18a7d7b19@mail.gmail.com> Message-ID: <09E8EE8F-6861-4C09-9DBD-B00F28598603@mac.com> On Jul 13, 2009, at 11:05 AM, Bill Wendling wrote: > /Volumes/SandBox/NightlyTest/llvmgcc42.roots/llvmgcc42~obj/src/gcc/ > config/rs6000/llvm-rs6000.cpp: > In member function 'bool TreeToLLVM::TargetIntrinsicLower(tree_node*, > unsigned int, const MemRef*, llvm::Value*&, const llvm::Type*, > std::vector >&)': > /Volumes/SandBox/NightlyTest/llvmgcc42.roots/llvmgcc42~obj/src/gcc/ > config/rs6000/llvm-rs6000.cpp:344: > error: 'getNullValue' is not a member of 'llvm::Constant' > make[4]: *** [llvm-rs6000.o] Error 1 > make[4]: *** Waiting for unfinished jobs.... > rm fsf-funding.pod gcov.pod gfdl.pod cpp.pod gpl.pod gcc.pod > make[3]: *** [all-stage1-gcc] Error 2 > make[2]: *** [stage1-bubble] Error 2 > make[1]: *** [all] Error 2 Fixed. grep claims that's the only one I missed. I don't know why my build last night didn't catch it. --Owen From daniel at zuster.org Mon Jul 13 13:35:35 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 18:35:35 -0000 Subject: [llvm-commits] [llvm] r75483 - /llvm/trunk/Makefile.rules Message-ID: <200907131835.n6DIZZrZ028844@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 13:35:35 2009 New Revision: 75483 URL: http://llvm.org/viewvc/llvm-project?rev=75483&view=rev Log: Makefile rules for generating assembly matcher. - Unused, fear not cmakers. Modified: llvm/trunk/Makefile.rules Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=75483&r1=75482&r2=75483&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Mon Jul 13 13:35:35 2009 @@ -1450,6 +1450,11 @@ $(Echo) "Building $( Author: void Date: Mon Jul 13 13:48:39 2009 New Revision: 75484 URL: http://llvm.org/viewvc/llvm-project?rev=75484&view=rev Log: On greater than Leopard systems, place exception tables in the __TEXT section. Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=75484&r1=75483&r2=75484&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jul 13 13:48:39 2009 @@ -40,7 +40,7 @@ X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM): X86TargetAsmInfo(TM) { - const X86Subtarget* Subtarget = &TM.getSubtarget(); + const X86Subtarget *Subtarget = &TM.getSubtarget(); bool is64Bit = Subtarget->is64Bit(); AlignmentIsInBytes = false; @@ -60,10 +60,12 @@ SixteenByteConstantSection = getUnnamedSection("\t.literal16\n", SectionFlags::Mergeable); LCOMMDirective = "\t.lcomm\t"; + // Leopard and above support aligned common symbols. COMMDirectiveTakesAlignment = (Subtarget->getDarwinVers() >= 9); HasDotTypeDotSizeDirective = false; NonLocalEHFrameLabel = true; + if (is64Bit) { PersonalityPrefix = ""; PersonalitySuffix = "+4 at GOTPCREL"; @@ -71,6 +73,7 @@ PersonalityPrefix = "L"; PersonalitySuffix = "$non_lazy_ptr"; } + InlineAsmStart = "## InlineAsm Start"; InlineAsmEnd = "## InlineAsm End"; CommentString = "##"; @@ -80,7 +83,6 @@ ProtectedDirective = "\t.globl\t"; SupportsDebugInformation = true; - DwarfDebugInlineSection = ".section __DWARF,__debug_inlined,regular,debug"; DwarfUsesInlineInfoSection = true; @@ -91,7 +93,13 @@ AbsoluteEHSectionOffsets = false; DwarfEHFrameSection = ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support"; - DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; + + // Leopard and earlier put exception tables in __DATA. Greater than Leopard + // put them in __TEXT. + if (Subtarget->getDarwinVers() < 10) + DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; + else + DwarfExceptionSection = ".section __TEXT,__gcc_except_tab"; } unsigned From isanbard at gmail.com Mon Jul 13 13:49:31 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 13 Jul 2009 11:49:31 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r75447 - in /llvm-gcc-4.2/trunk/gcc: llvm-backend.cpp llvm-convert.cpp In-Reply-To: <09E8EE8F-6861-4C09-9DBD-B00F28598603@mac.com> References: <200907130410.n6D4AHLD013861@zion.cs.uiuc.edu> <16e5fdf90907131105t2d0c8796ja317b9d18a7d7b19@mail.gmail.com> <09E8EE8F-6861-4C09-9DBD-B00F28598603@mac.com> Message-ID: <16e5fdf90907131149o36a24601i14b92202c80338f5@mail.gmail.com> On Mon, Jul 13, 2009 at 11:30 AM, Owen Anderson wrote: > > On Jul 13, 2009, at 11:05 AM, Bill Wendling wrote: >> /Volumes/SandBox/NightlyTest/llvmgcc42.roots/llvmgcc42~obj/src/gcc/ >> config/rs6000/llvm-rs6000.cpp: >> In member function 'bool TreeToLLVM::TargetIntrinsicLower(tree_node*, >> unsigned int, const MemRef*, llvm::Value*&, const llvm::Type*, >> std::vector >&)': >> /Volumes/SandBox/NightlyTest/llvmgcc42.roots/llvmgcc42~obj/src/gcc/ >> config/rs6000/llvm-rs6000.cpp:344: >> error: 'getNullValue' is not a member of 'llvm::Constant' >> make[4]: *** [llvm-rs6000.o] Error 1 >> make[4]: *** Waiting for unfinished jobs.... >> rm fsf-funding.pod gcov.pod gfdl.pod cpp.pod gpl.pod gcc.pod >> make[3]: *** [all-stage1-gcc] Error 2 >> make[2]: *** [stage1-bubble] Error 2 >> make[1]: *** [all] Error 2 > > Fixed. ?grep claims that's the only one I missed. ?I don't know why my > build last night didn't catch it. > I think it'll only catch it on a PPC system. Or at least that's how the buildbots are acting... Thanks! -bw From dalej at apple.com Mon Jul 13 14:12:02 2009 From: dalej at apple.com (Dale Johannesen) Date: Mon, 13 Jul 2009 19:12:02 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75486 - in /llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg: const-cfstring-4-64bit.mm const-cfstring-4.mm const-str-10.mm const-str-11.mm const-str-9.mm objc-gc-section-1.mm objc-gc-section-2.mm Message-ID: <200907131912.n6DJC3Pi030192@zion.cs.uiuc.edu> Author: johannes Date: Mon Jul 13 14:12:00 2009 New Revision: 75486 URL: http://llvm.org/viewvc/llvm-project?rev=75486&view=rev Log: Adjust some tests for recent whitespace changes in llvm-gcc output. Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-1.mm llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-2.mm Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-cfstring-4-64bit.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4-64bit.mm Mon Jul 13 14:12:00 2009 @@ -7,6 +7,7 @@ typedef const struct __CFString * CFStringRef; CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; -/* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__DATA, __cfstring" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992.*\n\t.space( |\t)4\n\t.quad\t.*\n\t.quad\t19\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-cfstring-4.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-cfstring-4.mm Mon Jul 13 14:12:00 2009 @@ -9,6 +9,7 @@ typedef const struct __CFString * CFStringRef; CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; -/* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__DATA, __cfstring" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992.*\n\t.long\t.*\n\t.long\t19.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-str-10.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-10.mm Mon Jul 13 14:12:00 2009 @@ -30,6 +30,7 @@ const NSConstantString *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-str-11.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-11.mm Mon Jul 13 14:12:00 2009 @@ -29,6 +29,7 @@ const XStr *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/const-str-9.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/const-str-9.mm Mon Jul 13 14:12:00 2009 @@ -23,6 +23,7 @@ const NSConstantString *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-1.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/objc-gc-section-1.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-1.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-1.mm Mon Jul 13 14:12:00 2009 @@ -10,7 +10,8 @@ @end @implementation INTF @end -/* { dg-final { scan-assembler ".section __OBJC, __image_info" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __image_info" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler "L_OBJC_IMAGE_INFO:.*\n\t.space( |\t)8" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-2.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/objc-gc-section-2.mm?rev=75486&r1=75485&r2=75486&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-2.mm (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/objc-gc-section-2.mm Mon Jul 13 14:12:00 2009 @@ -9,6 +9,7 @@ @end @implementation INTF @end -/* { dg-final { scan-assembler ".section __OBJC, __image_info" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __image_info" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler "L_OBJC_IMAGE_INFO:.*\n\t.(long\t0|space\t4)\n\t.long\t6" } } */ From isanbard at gmail.com Mon Jul 13 15:18:44 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 13 Jul 2009 20:18:44 -0000 Subject: [llvm-commits] [llvm] r75488 - /llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Message-ID: <200907132018.n6DKIiIQ032183@zion.cs.uiuc.edu> Author: void Date: Mon Jul 13 15:18:43 2009 New Revision: 75488 URL: http://llvm.org/viewvc/llvm-project?rev=75488&view=rev Log: More standard way of specifying greater than Leopard. Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=75488&r1=75487&r2=75488&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jul 13 15:18:43 2009 @@ -96,10 +96,10 @@ // Leopard and earlier put exception tables in __DATA. Greater than Leopard // put them in __TEXT. - if (Subtarget->getDarwinVers() < 10) - DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; - else + if (Subtarget->getDarwinVers() > 9) DwarfExceptionSection = ".section __TEXT,__gcc_except_tab"; + else + DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; } unsigned From clattner at apple.com Mon Jul 13 15:19:22 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 13:19:22 -0700 Subject: [llvm-commits] [llvm] r75472 - in /llvm/trunk: include/llvm/CodeGen/AsmFormatter.h include/llvm/Support/FormattedStream.h lib/Support/FormattedStream.cpp In-Reply-To: <200907131649.n6DGnTIV022198@zion.cs.uiuc.edu> References: <200907131649.n6DGnTIV022198@zion.cs.uiuc.edu> Message-ID: <2F90445D-5A8F-48C6-A856-919E3D4BE1D3@apple.com> On Jul 13, 2009, at 9:49 AM, David Greene wrote: > Author: greened > Date: Mon Jul 13 11:49:27 2009 > New Revision: 75472 > > URL: http://llvm.org/viewvc/llvm-project?rev=75472&view=rev > Log: > > Make some more changes suggested by Chris. Manipulators go away. Thanks David, this looks really nice! -Chris From sabre at nondot.org Mon Jul 13 15:22:23 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 20:22:23 -0000 Subject: [llvm-commits] [llvm] r75489 - in /llvm/trunk: include/llvm/ADT/Triple.h lib/Support/Triple.cpp Message-ID: <200907132022.n6DKMNHI032295@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 15:22:23 2009 New Revision: 75489 URL: http://llvm.org/viewvc/llvm-project?rev=75489&view=rev Log: Add NetBSD to the Triple class, patch by Krister Walfridsson! Modified: llvm/trunk/include/llvm/ADT/Triple.h llvm/trunk/lib/Support/Triple.cpp Modified: llvm/trunk/include/llvm/ADT/Triple.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Triple.h?rev=75489&r1=75488&r2=75489&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/Triple.h (original) +++ llvm/trunk/include/llvm/ADT/Triple.h Mon Jul 13 15:22:23 2009 @@ -54,6 +54,7 @@ DragonFly, FreeBSD, Linux, + NetBSD, OpenBSD }; Modified: llvm/trunk/lib/Support/Triple.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Triple.cpp?rev=75489&r1=75488&r2=75489&view=diff ============================================================================== --- llvm/trunk/lib/Support/Triple.cpp (original) +++ llvm/trunk/lib/Support/Triple.cpp Mon Jul 13 15:22:23 2009 @@ -48,6 +48,7 @@ case DragonFly: return "dragonfly"; case FreeBSD: return "freebsd"; case Linux: return "linux"; + case NetBSD: return "netbsd"; case OpenBSD: return "openbsd"; } @@ -91,6 +92,8 @@ OS = FreeBSD; else if (memcmp(&OSName[0], "linux", 5) == 0) OS = Linux; + else if (memcmp(&OSName[0], "netbsd", 6) == 0) + OS = NetBSD; else if (memcmp(&OSName[0], "openbsd", 7) == 0) OS = OpenBSD; else From clattner at apple.com Mon Jul 13 15:22:33 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 13:22:33 -0700 Subject: [llvm-commits] patch: add NetBSD to class Triple In-Reply-To: References: Message-ID: <9CAACEEB-C699-4901-93FC-4278CF109E81@apple.com> On Jul 13, 2009, at 6:35 AM, Krister Walfridsson wrote: > The attached patch add NetBSD to class Triple. Thanks! Applied in r75489, -Chris From greened at obbligato.org Mon Jul 13 15:25:49 2009 From: greened at obbligato.org (David Greene) Date: Mon, 13 Jul 2009 20:25:49 -0000 Subject: [llvm-commits] [llvm] r75490 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h include/llvm/Target/TargetAsmInfo.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/Target/TargetAsmInfo.cpp utils/TableGen/AsmWriterEmitter.cpp Message-ID: <200907132025.n6DKPnmb032397@zion.cs.uiuc.edu> Author: greened Date: Mon Jul 13 15:25:48 2009 New Revision: 75490 URL: http://llvm.org/viewvc/llvm-project?rev=75490&view=rev Log: Add infrastructure to allow post instruction printing action triggers. We'll eventually use this to print comments in asm files and do other fun things. This adds interfaces to the AsmPrinter and changes TableGen to invoke the postInstructionAction when appropriate. It also add parameters to TargetAsmInfo to control comment layout. Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h llvm/trunk/include/llvm/Target/TargetAsmInfo.h llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp llvm/trunk/lib/Target/TargetAsmInfo.cpp llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=75490&r1=75489&r2=75490&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original) +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Mon Jul 13 15:25:48 2009 @@ -34,6 +34,7 @@ class MachineConstantPoolEntry; class MachineConstantPoolValue; class MachineModuleInfo; + class MCInst; class DwarfWriter; class Mangler; class Section; @@ -64,7 +65,7 @@ /// DW - If available, this is a pointer to the current dwarf writer. DwarfWriter *DW; - + public: /// Output stream on which we're printing assembly code. /// @@ -332,6 +333,17 @@ /// debug tables. void printDeclare(const MachineInstr *MI) const; + /// postInstructionAction - Handling printing of items after the + /// instruction iteself has been printed (e.g. comments) + void postInstructionAction(const MachineInstr &MI) const { + postInstructionActionImpl(MI); + EmitComments(MI); + } + void postInstructionAction(const MCInst &MI) const { + postInstructionActionImpl(MI); + EmitComments(MI); + } + protected: /// EmitZeros - Emit a block of zeros. /// @@ -396,7 +408,7 @@ /// printOffset - This is just convenient handler for printing offsets. void printOffset(int64_t Offset) const; - + private: const GlobalValue *findGlobalValue(const Constant* CV); void EmitLLVMUsedList(Constant *List); @@ -408,6 +420,14 @@ void EmitGlobalConstantFP(const ConstantFP* CFP, unsigned AddrSpace); void EmitGlobalConstantLargeInt(const ConstantInt* CI, unsigned AddrSpace); GCMetadataPrinter *GetOrCreateGCPrinter(GCStrategy *C); + + /// EmitComments - Pretty-print comments for instructions + void EmitComments(const MachineInstr &MI) const; + /// EmitComments - Pretty-print comments for instructions + void EmitComments(const MCInst &MI) const; + + virtual void postInstructionActionImpl(const MachineInstr &MI) const {} + virtual void postInstructionActionImpl(const MCInst &MI) const {} }; } Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=75490&r1=75489&r2=75490&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jul 13 15:25:48 2009 @@ -214,6 +214,10 @@ /// measure inline asm instructions. char SeparatorChar; // Defaults to ';' + /// CommentColumn - This indicates the comment num (zero-based) at + /// which asm comments should be printed. + unsigned CommentColumn; // Defaults to 60 + /// CommentString - This indicates the comment character used by the /// assembler. const char *CommentString; // Defaults to "#" @@ -693,6 +697,9 @@ char getSeparatorChar() const { return SeparatorChar; } + const unsigned getCommentColumn() const { + return CommentColumn; + } const char *getCommentString() const { return CommentString; } Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=75490&r1=75489&r2=75490&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Jul 13 15:25:48 2009 @@ -24,6 +24,7 @@ #include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/FormattedStream.h" #include "llvm/Support/Mangler.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetAsmInfo.h" @@ -1748,3 +1749,15 @@ cerr << "no GCMetadataPrinter registered for GC: " << Name << "\n"; llvm_unreachable(); } + +/// EmitComments - Pretty-print comments for instructions +void AsmPrinter::EmitComments(const MachineInstr &MI) const +{ + // No comments in MachineInstr yet +} + +/// EmitComments - Pretty-print comments for instructions +void AsmPrinter::EmitComments(const MCInst &MI) const +{ + // No comments in MCInst yet +} Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=75490&r1=75489&r2=75490&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Jul 13 15:25:48 2009 @@ -43,6 +43,7 @@ MaxInstLength = 4; PCSymbol = "$"; SeparatorChar = ';'; + CommentColumn = 60; CommentString = "#"; GlobalPrefix = ""; PrivateGlobalPrefix = "."; Modified: llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp?rev=75490&r1=75489&r2=75490&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Mon Jul 13 15:25:48 2009 @@ -259,8 +259,6 @@ LastEmitted = VarEnd; } } - - AddLiteralString("\\n"); } /// MatchesAllButOneOp - If this instruction is exactly identical to the @@ -357,7 +355,6 @@ } O << "\n"; } - O << " break;\n"; } @@ -385,8 +382,12 @@ Command = " " + Inst->Operands[0].getCode() + "\n"; // If this is the last operand, emit a return. - if (Inst->Operands.size() == 1) + if (Inst->Operands.size() == 1) { + Command += " postInstructionAction(*MI);\n"; + // Print the final newline + Command += " O << \"\\n\";\n"; Command += " return true;\n"; + } // Check to see if we already have 'Command' in UniqueOperandCommands. // If not, add it. @@ -452,8 +453,12 @@ std::string Command = " " + FirstInst->Operands[Op].getCode() + "\n"; // If this is the last operand, emit a return after the code. - if (FirstInst->Operands.size() == Op+1) + if (FirstInst->Operands.size() == Op+1) { + Command += " postInstructionAction(*MI);\n"; + // Print the final newline + Command += " O << \"\\n\";\n"; Command += " return true;\n"; + } UniqueOperandCommands[CommandIdx] += Command; InstOpsUsed[CommandIdx]++; @@ -564,10 +569,11 @@ // For the first operand check, add a default value for instructions with // just opcode strings to use. if (isFirst) { - UniqueOperandCommands.push_back(" return true;\n"); + // Do the post instruction processing and print the final newline + UniqueOperandCommands.push_back(" postInstructionAction(*MI);\n O << \"\\n\";\n return true;\n"); isFirst = false; } - + std::vector InstIdxs; std::vector NumInstOpsHandled; FindUniqueOperandCommands(UniqueOperandCommands, InstIdxs, @@ -739,6 +745,9 @@ EmitInstructions(Instructions, O); O << " }\n"; + O << " postInstructionAction(*MI);\n"; + // Print the final newline + O << " O << \"\\n\";\n"; O << " return true;\n"; } From isanbard at gmail.com Mon Jul 13 15:27:42 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 13 Jul 2009 20:27:42 -0000 Subject: [llvm-commits] [llvm] r75491 - /llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Message-ID: <200907132027.n6DKRg9r032458@zion.cs.uiuc.edu> Author: void Date: Mon Jul 13 15:27:41 2009 New Revision: 75491 URL: http://llvm.org/viewvc/llvm-project?rev=75491&view=rev Log: Reverted r75484. It was causing a failure with Apple-style builds. Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=75491&r1=75490&r2=75491&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jul 13 15:27:41 2009 @@ -93,13 +93,7 @@ AbsoluteEHSectionOffsets = false; DwarfEHFrameSection = ".section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support"; - - // Leopard and earlier put exception tables in __DATA. Greater than Leopard - // put them in __TEXT. - if (Subtarget->getDarwinVers() > 9) - DwarfExceptionSection = ".section __TEXT,__gcc_except_tab"; - else - DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; + DwarfExceptionSection = ".section __DATA,__gcc_except_tab"; } unsigned From clattner at apple.com Mon Jul 13 15:34:20 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 13:34:20 -0700 Subject: [llvm-commits] [llvm] r75490 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h include/llvm/Target/TargetAsmInfo.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/Target/TargetAsmInfo.cpp utils/TableGen/AsmWriterEmitter.cpp In-Reply-To: <200907132025.n6DKPnmb032397@zion.cs.uiuc.edu> References: <200907132025.n6DKPnmb032397@zion.cs.uiuc.edu> Message-ID: <069B1CA2-D196-4805-96CE-DC2DB7F010C4@apple.com> On Jul 13, 2009, at 1:25 PM, David Greene wrote: > Author: greened > Date: Mon Jul 13 15:25:48 2009 > New Revision: 75490 > > URL: http://llvm.org/viewvc/llvm-project?rev=75490&view=rev > Log: > > Add infrastructure to allow post instruction printing action triggers. > We'll eventually use this to print comments in asm files and do other > fun things. > > This adds interfaces to the AsmPrinter and changes TableGen to invoke > the postInstructionAction when appropriate. It also add parameters to > TargetAsmInfo to control comment layout. Ok, are you intending to have specific instructions that have custom hooks? What hooks? Why do you need this? > + /// postInstructionAction - Handling printing of items after the > + /// instruction iteself has been printed (e.g. comments) > + void postInstructionAction(const MachineInstr &MI) const { > + postInstructionActionImpl(MI); > + EmitComments(MI); > + } > + void postInstructionAction(const MCInst &MI) const { > + postInstructionActionImpl(MI); > + EmitComments(MI); > + } You are conflating comment printing and action printing into the same patch, please try to make patches do one thing at a time whereever possible. > +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jul 13 > 15:25:48 2009 > @@ -214,6 +214,10 @@ > /// measure inline asm instructions. > char SeparatorChar; // Defaults to ';' > > + /// CommentColumn - This indicates the comment num (zero-based) > at > + /// which asm comments should be printed. > + unsigned CommentColumn; // Defaults to 60 Is this really important to parameterize? It doesn't hurt, but I'm just curious why you bothered :) > + > /// CommentString - This indicates the comment character used by > the > /// assembler. > const char *CommentString; // Defaults to "#" > @@ -693,6 +697,9 @@ > char getSeparatorChar() const { > return SeparatorChar; > } > + const unsigned getCommentColumn() const { "const unsigned" -> "unsigned". -Chris From clattner at apple.com Mon Jul 13 15:39:13 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 13:39:13 -0700 Subject: [llvm-commits] [llvm] r75445 - in /llvm/trunk: docs/tutorial/ examples/BrainF/ examples/Kaleidoscope/ include/llvm/ include/llvm/CodeGen/ include/llvm/Support/ lib/Analysis/ lib/Analysis/IPA/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/Target/ lib/Target/CBackend/ lib/Target/Mips/ lib/Target/Mips/AsmPrinter/ lib/Target/X86/ lib/Transforms/Scalar/ lib/Transforms/Utils/ lib/VMCore/ tools/bugpoint/ tools/lto/ unittests/ExecutionEngine/JIT/ unittests/Support/ In-Reply-To: <200907130409.n6D49Om9013790@zion.cs.uiuc.edu> References: <200907130409.n6D49Om9013790@zion.cs.uiuc.edu> Message-ID: <25DBA418-5274-4B2F-9C54-B3D275230CAE@apple.com> On Jul 12, 2009, at 9:09 PM, Owen Anderson wrote: > Author: resistor > Date: Sun Jul 12 23:09:18 2009 > New Revision: 75445 > > URL: http://llvm.org/viewvc/llvm-project?rev=75445&view=rev > Log: > Begin the painful process of tearing apart the rat'ss nest that is > Constants.cpp and ConstantFold.cpp. > This involves temporarily hard wiring some parts to use the global > context. This isn't ideal, but it's > the only way I could figure out to make this process vaguely > incremental. Ok. > +++ llvm/trunk/include/llvm/Constants.h Sun Jul 12 23:09:18 2009 > @@ -383,7 +380,7 @@ > /// isString) and it ends in a null byte \0 and does not contains > any other > /// @endverbatim > /// null bytes except its terminator. > - bool isCString() const; > + bool isCString(LLVMContext &Context) const; This shouldn't need to take a context. In it's implementation, instead of using "getNullValue" and then doing a pointer comparison against it, just check to see if the operand is a null value etc. > @@ -218,8 +222,8 @@ > /// isNeg, isFNeg, isNot - Check if the given Value is a > /// NEG, FNeg, or NOT instruction. > /// > - static bool isNeg(const Value *V); > - static bool isFNeg(const Value *V); > + static bool isNeg(LLVMContext &Context, const Value *V); > + static bool isFNeg(LLVMContext &Context, const Value *V); Likewise, these should not need to take contexts. -Chris From dag at cray.com Mon Jul 13 15:40:35 2009 From: dag at cray.com (David Greene) Date: Mon, 13 Jul 2009 15:40:35 -0500 Subject: [llvm-commits] [llvm] r75490 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h include/llvm/Target/TargetAsmInfo.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/Target/TargetAsmInfo.cpp utils/TableGen/AsmWriterEmitter.cpp In-Reply-To: <069B1CA2-D196-4805-96CE-DC2DB7F010C4@apple.com> References: <200907132025.n6DKPnmb032397@zion.cs.uiuc.edu> <069B1CA2-D196-4805-96CE-DC2DB7F010C4@apple.com> Message-ID: <200907131540.36214.dag@cray.com> On Monday 13 July 2009 15:34, Chris Lattner wrote: things. > > > > This adds interfaces to the AsmPrinter and changes TableGen to invoke > > the postInstructionAction when appropriate. It also add parameters to > > TargetAsmInfo to control comment layout. > > Ok, are you intending to have specific instructions that have custom > hooks? What hooks? Why do you need this? The intent is to allow target asmprinters to override this if necessary. Right now the base asmprinter uses it to print comments. I designed it as a hook because we don't want to keep hacking TableGen every time we want to do something new and interesting with asm printing. Because hacking TableGen is really voodoo. > You are conflating comment printing and action printing into the same > patch, please try to make patches do one thing at a time whereever > possible. Ok. > > +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jul 13 > > 15:25:48 2009 > > @@ -214,6 +214,10 @@ > > /// measure inline asm instructions. > > char SeparatorChar; // Defaults to ';' > > > > + /// CommentColumn - This indicates the comment num (zero-based) > > at > > + /// which asm comments should be printed. > > + unsigned CommentColumn; // Defaults to 60 > > Is this really important to parameterize? It doesn't hurt, but I'm > just curious why you bothered :) I figured some targets might want to start the comment column at a different place. I've seen some bizarre ISA formats out here. :) > > + const unsigned getCommentColumn() const { > > "const unsigned" -> "unsigned". Oops. :) -Dave From gohman at apple.com Mon Jul 13 15:46:11 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 20:46:11 -0000 Subject: [llvm-commits] [llvm] r75493 - /llvm/trunk/include/llvm/Target/TargetAsmInfo.h Message-ID: <200907132046.n6DKkC9a000589@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 15:46:11 2009 New Revision: 75493 URL: http://llvm.org/viewvc/llvm-project?rev=75493&view=rev Log: Delete a spurious const. Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=75493&r1=75492&r2=75493&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jul 13 15:46:11 2009 @@ -697,7 +697,7 @@ char getSeparatorChar() const { return SeparatorChar; } - const unsigned getCommentColumn() const { + unsigned getCommentColumn() const { return CommentColumn; } const char *getCommentString() const { From gohman at apple.com Mon Jul 13 15:50:20 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 20:50:20 -0000 Subject: [llvm-commits] [llvm] r75494 - in /llvm/trunk: include/llvm/Analysis/ScalarEvolution.h include/llvm/Analysis/ScalarEvolutionExpressions.h lib/Analysis/ScalarEvolution.cpp Message-ID: <200907132050.n6DKoKnA000774@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 15:50:19 2009 New Revision: 75494 URL: http://llvm.org/viewvc/llvm-project?rev=75494&view=rev Log: Convert SCEV from FoldingSetNode to FastFoldingSetNode. This eliminates a bunch of redundent code in Profile methods, and prepares for upcoming changes to do improved memoization. Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=75494&r1=75493&r2=75494&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Mon Jul 13 15:50:19 2009 @@ -42,7 +42,7 @@ /// are opaque objects that the client is not allowed to do much with /// directly. /// - class SCEV : public FoldingSetNode { + class SCEV : public FastFoldingSetNode { const unsigned SCEVType; // The SCEV baseclass this node corresponds to SCEV(const SCEV &); // DO NOT IMPLEMENT @@ -50,10 +50,8 @@ protected: virtual ~SCEV(); public: - explicit SCEV(unsigned SCEVTy) : - SCEVType(SCEVTy) {} - - virtual void Profile(FoldingSetNodeID &ID) const = 0; + explicit SCEV(const FoldingSetNodeID &ID, unsigned SCEVTy) : + FastFoldingSetNode(ID), SCEVType(SCEVTy) {} unsigned getSCEVType() const { return SCEVType; } @@ -129,7 +127,6 @@ SCEVCouldNotCompute(); // None of these methods are valid for this object. - virtual void Profile(FoldingSetNodeID &ID) const; virtual bool isLoopInvariant(const Loop *L) const; virtual const Type *getType() const; virtual bool hasComputableLoopEvolution(const Loop *L) const; Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h?rev=75494&r1=75493&r2=75494&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpressions.h Mon Jul 13 15:50:19 2009 @@ -37,11 +37,9 @@ friend class ScalarEvolution; ConstantInt *V; - explicit SCEVConstant(ConstantInt *v) : - SCEV(scConstant), V(v) {} + SCEVConstant(const FoldingSetNodeID &ID, ConstantInt *v) : + SCEV(ID, scConstant), V(v) {} public: - virtual void Profile(FoldingSetNodeID &ID) const; - ConstantInt *getValue() const { return V; } virtual bool isLoopInvariant(const Loop *L) const { @@ -81,11 +79,10 @@ const SCEV *Op; const Type *Ty; - SCEVCastExpr(unsigned SCEVTy, const SCEV *op, const Type *ty); + SCEVCastExpr(const FoldingSetNodeID &ID, + unsigned SCEVTy, const SCEV *op, const Type *ty); public: - virtual void Profile(FoldingSetNodeID &ID) const; - const SCEV *getOperand() const { return Op; } virtual const Type *getType() const { return Ty; } @@ -115,7 +112,8 @@ class SCEVTruncateExpr : public SCEVCastExpr { friend class ScalarEvolution; - SCEVTruncateExpr(const SCEV *op, const Type *ty); + SCEVTruncateExpr(const FoldingSetNodeID &ID, + const SCEV *op, const Type *ty); public: const SCEV *replaceSymbolicValuesWithConcrete(const SCEV *Sym, @@ -143,7 +141,8 @@ class SCEVZeroExtendExpr : public SCEVCastExpr { friend class ScalarEvolution; - SCEVZeroExtendExpr(const SCEV *op, const Type *ty); + SCEVZeroExtendExpr(const FoldingSetNodeID &ID, + const SCEV *op, const Type *ty); public: const SCEV *replaceSymbolicValuesWithConcrete(const SCEV *Sym, @@ -171,7 +170,8 @@ class SCEVSignExtendExpr : public SCEVCastExpr { friend class ScalarEvolution; - SCEVSignExtendExpr(const SCEV *op, const Type *ty); + SCEVSignExtendExpr(const FoldingSetNodeID &ID, + const SCEV *op, const Type *ty); public: const SCEV *replaceSymbolicValuesWithConcrete(const SCEV *Sym, @@ -201,12 +201,11 @@ protected: SmallVector Operands; - SCEVNAryExpr(enum SCEVTypes T, const SmallVectorImpl &ops) - : SCEV(T), Operands(ops.begin(), ops.end()) {} + SCEVNAryExpr(const FoldingSetNodeID &ID, + enum SCEVTypes T, const SmallVectorImpl &ops) + : SCEV(ID, T), Operands(ops.begin(), ops.end()) {} public: - virtual void Profile(FoldingSetNodeID &ID) const; - unsigned getNumOperands() const { return (unsigned)Operands.size(); } const SCEV *getOperand(unsigned i) const { assert(i < Operands.size() && "Operand index out of range!"); @@ -262,9 +261,10 @@ /// class SCEVCommutativeExpr : public SCEVNAryExpr { protected: - SCEVCommutativeExpr(enum SCEVTypes T, + SCEVCommutativeExpr(const FoldingSetNodeID &ID, + enum SCEVTypes T, const SmallVectorImpl &ops) - : SCEVNAryExpr(T, ops) {} + : SCEVNAryExpr(ID, T, ops) {} public: const SCEV *replaceSymbolicValuesWithConcrete(const SCEV *Sym, @@ -292,8 +292,9 @@ class SCEVAddExpr : public SCEVCommutativeExpr { friend class ScalarEvolution; - explicit SCEVAddExpr(const SmallVectorImpl &ops) - : SCEVCommutativeExpr(scAddExpr, ops) { + SCEVAddExpr(const FoldingSetNodeID &ID, + const SmallVectorImpl &ops) + : SCEVCommutativeExpr(ID, scAddExpr, ops) { } public: @@ -312,8 +313,9 @@ class SCEVMulExpr : public SCEVCommutativeExpr { friend class ScalarEvolution; - explicit SCEVMulExpr(const SmallVectorImpl &ops) - : SCEVCommutativeExpr(scMulExpr, ops) { + SCEVMulExpr(const FoldingSetNodeID &ID, + const SmallVectorImpl &ops) + : SCEVCommutativeExpr(ID, scMulExpr, ops) { } public: @@ -335,12 +337,10 @@ const SCEV *LHS; const SCEV *RHS; - SCEVUDivExpr(const SCEV *lhs, const SCEV *rhs) - : SCEV(scUDivExpr), LHS(lhs), RHS(rhs) {} + SCEVUDivExpr(const FoldingSetNodeID &ID, const SCEV *lhs, const SCEV *rhs) + : SCEV(ID, scUDivExpr), LHS(lhs), RHS(rhs) {} public: - virtual void Profile(FoldingSetNodeID &ID) const; - const SCEV *getLHS() const { return LHS; } const SCEV *getRHS() const { return RHS; } @@ -392,16 +392,15 @@ const Loop *L; - SCEVAddRecExpr(const SmallVectorImpl &ops, const Loop *l) - : SCEVNAryExpr(scAddRecExpr, ops), L(l) { + SCEVAddRecExpr(const FoldingSetNodeID &ID, + const SmallVectorImpl &ops, const Loop *l) + : SCEVNAryExpr(ID, scAddRecExpr, ops), L(l) { for (size_t i = 0, e = Operands.size(); i != e; ++i) assert(Operands[i]->isLoopInvariant(l) && "Operands of AddRec must be loop-invariant!"); } public: - virtual void Profile(FoldingSetNodeID &ID) const; - const SCEV *getStart() const { return Operands[0]; } const Loop *getLoop() const { return L; } @@ -454,6 +453,12 @@ const SCEV *Conc, ScalarEvolution &SE) const; + /// getPostIncExpr - Return an expression representing the value of + /// this expression one iteration of the loop ahead. + const SCEV *getPostIncExpr(ScalarEvolution &SE) const { + return SE.getAddExpr(this, getStepRecurrence(SE)); + } + virtual void print(raw_ostream &OS) const; /// Methods for support type inquiry through isa, cast, and dyn_cast: @@ -470,8 +475,9 @@ class SCEVSMaxExpr : public SCEVCommutativeExpr { friend class ScalarEvolution; - explicit SCEVSMaxExpr(const SmallVectorImpl &ops) - : SCEVCommutativeExpr(scSMaxExpr, ops) { + SCEVSMaxExpr(const FoldingSetNodeID &ID, + const SmallVectorImpl &ops) + : SCEVCommutativeExpr(ID, scSMaxExpr, ops) { } public: @@ -491,8 +497,9 @@ class SCEVUMaxExpr : public SCEVCommutativeExpr { friend class ScalarEvolution; - explicit SCEVUMaxExpr(const SmallVectorImpl &ops) - : SCEVCommutativeExpr(scUMaxExpr, ops) { + SCEVUMaxExpr(const FoldingSetNodeID &ID, + const SmallVectorImpl &ops) + : SCEVCommutativeExpr(ID, scUMaxExpr, ops) { } public: @@ -515,12 +522,10 @@ friend class ScalarEvolution; Value *V; - explicit SCEVUnknown(Value *v) : - SCEV(scUnknown), V(v) {} - - public: - virtual void Profile(FoldingSetNodeID &ID) const; + SCEVUnknown(const FoldingSetNodeID &ID, Value *v) : + SCEV(ID, scUnknown), V(v) {} + public: Value *getValue() const { return V; } virtual bool isLoopInvariant(const Loop *L) const; Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75494&r1=75493&r2=75494&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 15:50:19 2009 @@ -145,11 +145,7 @@ } SCEVCouldNotCompute::SCEVCouldNotCompute() : - SCEV(scCouldNotCompute) {} - -void SCEVCouldNotCompute::Profile(FoldingSetNodeID &ID) const { - LLVM_UNREACHABLE("Attempt to use a SCEVCouldNotCompute object!"); -} + SCEV(FoldingSetNodeID(), scCouldNotCompute) {} bool SCEVCouldNotCompute::isLoopInvariant(const Loop *L) const { LLVM_UNREACHABLE("Attempt to use a SCEVCouldNotCompute object!"); @@ -189,7 +185,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVConstant(V); + new (S) SCEVConstant(ID, V); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -203,33 +199,23 @@ return getConstant(ConstantInt::get(cast(Ty), V, isSigned)); } -void SCEVConstant::Profile(FoldingSetNodeID &ID) const { - ID.AddInteger(scConstant); - ID.AddPointer(V); -} - const Type *SCEVConstant::getType() const { return V->getType(); } void SCEVConstant::print(raw_ostream &OS) const { WriteAsOperand(OS, V, false); } -SCEVCastExpr::SCEVCastExpr(unsigned SCEVTy, - const SCEV *op, const Type *ty) - : SCEV(SCEVTy), Op(op), Ty(ty) {} - -void SCEVCastExpr::Profile(FoldingSetNodeID &ID) const { - ID.AddInteger(getSCEVType()); - ID.AddPointer(Op); - ID.AddPointer(Ty); -} +SCEVCastExpr::SCEVCastExpr(const FoldingSetNodeID &ID, + unsigned SCEVTy, const SCEV *op, const Type *ty) + : SCEV(ID, SCEVTy), Op(op), Ty(ty) {} bool SCEVCastExpr::dominates(BasicBlock *BB, DominatorTree *DT) const { return Op->dominates(BB, DT); } -SCEVTruncateExpr::SCEVTruncateExpr(const SCEV *op, const Type *ty) - : SCEVCastExpr(scTruncate, op, ty) { +SCEVTruncateExpr::SCEVTruncateExpr(const FoldingSetNodeID &ID, + const SCEV *op, const Type *ty) + : SCEVCastExpr(ID, scTruncate, op, ty) { assert((Op->getType()->isInteger() || isa(Op->getType())) && (Ty->isInteger() || isa(Ty)) && "Cannot truncate non-integer value!"); @@ -239,8 +225,9 @@ OS << "(trunc " << *Op->getType() << " " << *Op << " to " << *Ty << ")"; } -SCEVZeroExtendExpr::SCEVZeroExtendExpr(const SCEV *op, const Type *ty) - : SCEVCastExpr(scZeroExtend, op, ty) { +SCEVZeroExtendExpr::SCEVZeroExtendExpr(const FoldingSetNodeID &ID, + const SCEV *op, const Type *ty) + : SCEVCastExpr(ID, scZeroExtend, op, ty) { assert((Op->getType()->isInteger() || isa(Op->getType())) && (Ty->isInteger() || isa(Ty)) && "Cannot zero extend non-integer value!"); @@ -250,8 +237,9 @@ OS << "(zext " << *Op->getType() << " " << *Op << " to " << *Ty << ")"; } -SCEVSignExtendExpr::SCEVSignExtendExpr(const SCEV *op, const Type *ty) - : SCEVCastExpr(scSignExtend, op, ty) { +SCEVSignExtendExpr::SCEVSignExtendExpr(const FoldingSetNodeID &ID, + const SCEV *op, const Type *ty) + : SCEVCastExpr(ID, scSignExtend, op, ty) { assert((Op->getType()->isInteger() || isa(Op->getType())) && (Ty->isInteger() || isa(Ty)) && "Cannot sign extend non-integer value!"); @@ -303,13 +291,6 @@ return this; } -void SCEVNAryExpr::Profile(FoldingSetNodeID &ID) const { - ID.AddInteger(getSCEVType()); - ID.AddInteger(Operands.size()); - for (unsigned i = 0, e = Operands.size(); i != e; ++i) - ID.AddPointer(Operands[i]); -} - bool SCEVNAryExpr::dominates(BasicBlock *BB, DominatorTree *DT) const { for (unsigned i = 0, e = getNumOperands(); i != e; ++i) { if (!getOperand(i)->dominates(BB, DT)) @@ -318,12 +299,6 @@ return true; } -void SCEVUDivExpr::Profile(FoldingSetNodeID &ID) const { - ID.AddInteger(scUDivExpr); - ID.AddPointer(LHS); - ID.AddPointer(RHS); -} - bool SCEVUDivExpr::dominates(BasicBlock *BB, DominatorTree *DT) const { return LHS->dominates(BB, DT) && RHS->dominates(BB, DT); } @@ -341,14 +316,6 @@ return RHS->getType(); } -void SCEVAddRecExpr::Profile(FoldingSetNodeID &ID) const { - ID.AddInteger(scAddRecExpr); - ID.AddInteger(Operands.size()); - for (unsigned i = 0, e = Operands.size(); i != e; ++i) - ID.AddPointer(Operands[i]); - ID.AddPointer(L); -} - const SCEV * SCEVAddRecExpr::replaceSymbolicValuesWithConcrete(const SCEV *Sym, const SCEV *Conc, @@ -399,11 +366,6 @@ OS << "}<" << L->getHeader()->getName() + ">"; } -void SCEVUnknown::Profile(FoldingSetNodeID &ID) const { - ID.AddInteger(scUnknown); - ID.AddPointer(V); -} - bool SCEVUnknown::isLoopInvariant(const Loop *L) const { // All non-instruction values are loop invariant. All instructions are loop // invariant if they are not contained in the specified loop. @@ -749,6 +711,13 @@ "This is not a conversion to a SCEVable type!"); Ty = getEffectiveSCEVType(Ty); + FoldingSetNodeID ID; + ID.AddInteger(scTruncate); + ID.AddPointer(Op); + ID.AddPointer(Ty); + void *IP = 0; + if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; + // Fold if the operand is constant. if (const SCEVConstant *SC = dyn_cast(Op)) return getConstant( @@ -774,14 +743,11 @@ return getAddRecExpr(Operands, AddRec->getLoop()); } - FoldingSetNodeID ID; - ID.AddInteger(scTruncate); - ID.AddPointer(Op); - ID.AddPointer(Ty); - void *IP = 0; + // The cast wasn't folded; create an explicit cast node. + // Recompute the insert position, as it may have been invalidated. if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVTruncateExpr(Op, Ty); + new (S) SCEVTruncateExpr(ID, Op, Ty); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -877,7 +843,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVZeroExtendExpr(Op, Ty); + new (S) SCEVZeroExtendExpr(ID, Op, Ty); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -957,7 +923,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVSignExtendExpr(Op, Ty); + new (S) SCEVSignExtendExpr(ID, Op, Ty); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -1426,7 +1392,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVAddExpr(Ops); + new (S) SCEVAddExpr(ID, Ops); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -1597,7 +1563,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVMulExpr(Ops); + new (S) SCEVMulExpr(ID, Ops); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -1696,7 +1662,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVUDivExpr(LHS, RHS); + new (S) SCEVUDivExpr(ID, LHS, RHS); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -1779,7 +1745,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVAddRecExpr(Operands, L); + new (S) SCEVAddRecExpr(ID, Operands, L); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -1876,7 +1842,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVSMaxExpr(Ops); + new (S) SCEVSMaxExpr(ID, Ops); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -1973,7 +1939,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVUMaxExpr(Ops); + new (S) SCEVUMaxExpr(ID, Ops); UniqueSCEVs.InsertNode(S, IP); return S; } @@ -2002,7 +1968,7 @@ void *IP = 0; if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); - new (S) SCEVUnknown(V); + new (S) SCEVUnknown(ID, V); UniqueSCEVs.InsertNode(S, IP); return S; } From clattner at apple.com Mon Jul 13 15:51:22 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 13:51:22 -0700 Subject: [llvm-commits] [llvm] r75490 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h include/llvm/Target/TargetAsmInfo.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/Target/TargetAsmInfo.cpp utils/TableGen/AsmWriterEmitter.cpp In-Reply-To: <200907131540.36214.dag@cray.com> References: <200907132025.n6DKPnmb032397@zion.cs.uiuc.edu> <069B1CA2-D196-4805-96CE-DC2DB7F010C4@apple.com> <200907131540.36214.dag@cray.com> Message-ID: <20B337AE-9336-4368-84C1-5899B9F6EA32@apple.com> On Jul 13, 2009, at 1:40 PM, David Greene wrote: > On Monday 13 July 2009 15:34, Chris Lattner wrote: > things. >>> >>> This adds interfaces to the AsmPrinter and changes TableGen to >>> invoke >>> the postInstructionAction when appropriate. It also add >>> parameters to >>> TargetAsmInfo to control comment layout. >> >> Ok, are you intending to have specific instructions that have custom >> hooks? What hooks? Why do you need this? > > The intent is to allow target asmprinters to override this if > necessary. > Right now the base asmprinter uses it to print comments. > > I designed it as a hook because we don't want to keep hacking TableGen > every time we want to do something new and interesting with asm > printing. > Because hacking TableGen is really voodoo. Can you remove this piece? I *strongly* prefer "lazy design" rather than "preemptive design", because sometimes when you finally get to the place where you need this, you find out that there is a better way to go. -Chris From eli.friedman at gmail.com Mon Jul 13 15:53:00 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 20:53:00 -0000 Subject: [llvm-commits] [llvm] r75495 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200907132053.n6DKr01J000886@zion.cs.uiuc.edu> Author: efriedma Date: Mon Jul 13 15:53:00 2009 New Revision: 75495 URL: http://llvm.org/viewvc/llvm-project?rev=75495&view=rev Log: Don't bother to call commonIntCastTransforms for bitcasts; int->int bitcasts will always be eliminated anyway. Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75495&r1=75494&r2=75495&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 15:53:00 2009 @@ -8257,9 +8257,8 @@ } } -/// Only the TRUNC, ZEXT, SEXT, and BITCAST can both operand and result as -/// integer types. This function implements the common transforms for all those -/// cases. +/// Only the TRUNC, ZEXT, SEXT. This function implements the common transforms +/// for all those cases. /// @brief Implement the transforms common to CastInst with integer operands Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) { if (Instruction *Result = commonCastTransforms(CI)) @@ -9004,10 +9003,7 @@ const Type *SrcTy = Src->getType(); const Type *DestTy = CI.getType(); - if (SrcTy->isInteger() && DestTy->isInteger()) { - if (Instruction *Result = commonIntCastTransforms(CI)) - return Result; - } else if (isa(SrcTy)) { + if (isa(SrcTy)) { if (Instruction *I = commonPointerCastTransforms(CI)) return I; } else { From gohman at apple.com Mon Jul 13 15:55:54 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 20:55:54 -0000 Subject: [llvm-commits] [llvm] r75496 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp Message-ID: <200907132055.n6DKtsC9000969@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 15:55:53 2009 New Revision: 75496 URL: http://llvm.org/viewvc/llvm-project?rev=75496&view=rev Log: Move the memoization check for SCEVSignExtendExpr and SCEVZeroExtendExpr ahead of the most expensive analysis. This speeds up analysis and helps avoid pathologically bad behavior on the testcase in PR4534. Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75496&r1=75495&r2=75496&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 15:55:53 2009 @@ -772,6 +772,15 @@ if (const SCEVZeroExtendExpr *SZ = dyn_cast(Op)) return getZeroExtendExpr(SZ->getOperand(), Ty); + // Before doing any expensive analysis, check to see if we've already + // computed a SCEV for this Op and Ty. + FoldingSetNodeID ID; + ID.AddInteger(scZeroExtend); + ID.AddPointer(Op); + ID.AddPointer(Ty); + void *IP = 0; + if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; + // If the input value is a chrec scev, and we can prove that the value // did not overflow the old, smaller, value, we can zero extend all of the // operands (often constants). This allows analysis of something like @@ -836,11 +845,8 @@ } } - FoldingSetNodeID ID; - ID.AddInteger(scZeroExtend); - ID.AddPointer(Op); - ID.AddPointer(Ty); - void *IP = 0; + // The cast wasn't folded; create an explicit cast node. + // Recompute the insert position, as it may have been invalidated. if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); new (S) SCEVZeroExtendExpr(ID, Op, Ty); @@ -868,6 +874,15 @@ if (const SCEVSignExtendExpr *SS = dyn_cast(Op)) return getSignExtendExpr(SS->getOperand(), Ty); + // Before doing any expensive analysis, check to see if we've already + // computed a SCEV for this Op and Ty. + FoldingSetNodeID ID; + ID.AddInteger(scSignExtend); + ID.AddPointer(Op); + ID.AddPointer(Ty); + void *IP = 0; + if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; + // If the input value is a chrec scev, and we can prove that the value // did not overflow the old, smaller, value, we can sign extend all of the // operands (often constants). This allows analysis of something like @@ -916,11 +931,8 @@ } } - FoldingSetNodeID ID; - ID.AddInteger(scSignExtend); - ID.AddPointer(Op); - ID.AddPointer(Ty); - void *IP = 0; + // The cast wasn't folded; create an explicit cast node. + // Recompute the insert position, as it may have been invalidated. if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S; SCEV *S = SCEVAllocator.Allocate(); new (S) SCEVSignExtendExpr(ID, Op, Ty); From resistor at mac.com Mon Jul 13 15:58:05 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 20:58:05 -0000 Subject: [llvm-commits] [llvm] r75497 - in /llvm/trunk: include/llvm/ include/llvm/Support/ lib/Analysis/ lib/Target/X86/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/Transforms/Utils/ lib/VMCore/ Message-ID: <200907132058.n6DKw6uA001054@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 15:58:05 2009 New Revision: 75497 URL: http://llvm.org/viewvc/llvm-project?rev=75497&view=rev Log: Move more functionality over to LLVMContext. Modified: llvm/trunk/include/llvm/Constant.h llvm/trunk/include/llvm/Constants.h llvm/trunk/include/llvm/InstrTypes.h llvm/trunk/include/llvm/LLVMContext.h llvm/trunk/include/llvm/Support/IRBuilder.h llvm/trunk/lib/Analysis/ScalarEvolution.cpp llvm/trunk/lib/Target/X86/X86InstrInfo.cpp llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/Transforms/Scalar/PredicateSimplifier.cpp llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp llvm/trunk/lib/Transforms/Scalar/SCCP.cpp llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp llvm/trunk/lib/VMCore/Constants.cpp llvm/trunk/lib/VMCore/Instructions.cpp llvm/trunk/lib/VMCore/LLVMContext.cpp Modified: llvm/trunk/include/llvm/Constant.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constant.h?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constant.h (original) +++ llvm/trunk/include/llvm/Constant.h Mon Jul 13 15:58:05 2009 @@ -60,11 +60,6 @@ void destroyConstantImpl(); public: - /// Static constructor to get a '-1' constant. This supports integers and - /// vectors. - /// - static Constant *getAllOnesValue(const Type *Ty); - /// isNullValue - Return true if this is the value that would be returned by /// getNullValue. virtual bool isNullValue() const = 0; Modified: llvm/trunk/include/llvm/Constants.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constants.h (original) +++ llvm/trunk/include/llvm/Constants.h Mon Jul 13 15:58:05 2009 @@ -227,11 +227,6 @@ return Val.getLimitedValue(Limit); } - /// @returns the value for an integer constant of the given type that has all - /// its bits set to true. - /// @brief Get the all ones value - static ConstantInt *getAllOnesValue(const Type *Ty); - /// @brief Methods to support type inquiry through isa, cast, and dyn_cast. static inline bool classof(const ConstantInt *) { return true; } static bool classof(const Value *V) { @@ -487,11 +482,6 @@ inline const VectorType *getType() const { return reinterpret_cast(Value::getType()); } - - /// @returns the value for a vector integer constant of the given type that - /// has all its bits set to true. - /// @brief Get the all ones value - static ConstantVector *getAllOnesValue(const VectorType *Ty); /// isNullValue - Return true if this is the value that would be returned by /// getNullValue. This always returns false because zero vectors are always @@ -702,7 +692,6 @@ /// ConstantExpr::get* - Return some common constants without having to /// specify the full Instruction::OPCODE identifier. /// - static Constant *getNot(Constant *C); static Constant *getAdd(Constant *C1, Constant *C2); static Constant *getFAdd(Constant *C1, Constant *C2); static Constant *getSub(Constant *C1, Constant *C2); Modified: llvm/trunk/include/llvm/InstrTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InstrTypes.h?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/include/llvm/InstrTypes.h (original) +++ llvm/trunk/include/llvm/InstrTypes.h Mon Jul 13 15:58:05 2009 @@ -214,9 +214,11 @@ static BinaryOperator *CreateFNeg(LLVMContext &Context, Value *Op, const std::string &Name, BasicBlock *InsertAtEnd); - static BinaryOperator *CreateNot(Value *Op, const std::string &Name = "", + static BinaryOperator *CreateNot(LLVMContext &Context, + Value *Op, const std::string &Name = "", Instruction *InsertBefore = 0); - static BinaryOperator *CreateNot(Value *Op, const std::string &Name, + static BinaryOperator *CreateNot(LLVMContext &Context, + Value *Op, const std::string &Name, BasicBlock *InsertAtEnd); /// isNeg, isFNeg, isNot - Check if the given Value is a Modified: llvm/trunk/include/llvm/LLVMContext.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LLVMContext.h?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/include/llvm/LLVMContext.h (original) +++ llvm/trunk/include/llvm/LLVMContext.h Mon Jul 13 15:58:05 2009 @@ -58,6 +58,10 @@ // Constant accessors Constant* getNullValue(const Type* Ty); + + /// @returns the value for an integer constant of the given type that has all + /// its bits set to true. + /// @brief Get the all ones value Constant* getAllOnesValue(const Type* Ty); // UndefValue accessors @@ -73,7 +77,6 @@ ConstantInt* getConstantIntSigned(const IntegerType* Ty, int64_t V); ConstantInt* getConstantInt(const APInt& V); Constant* getConstantInt(const Type* Ty, const APInt& V); - ConstantInt* getConstantIntAllOnesValue(const Type* Ty); // ConstantPointerNull accessors ConstantPointerNull* getConstantPointerNull(const PointerType* T); @@ -188,7 +191,6 @@ const std::vector& V); Constant* getConstantVector(const std::vector& V); Constant* getConstantVector(Constant* const* Vals, unsigned NumVals); - ConstantVector* getConstantVectorAllOnesValue(const VectorType* Ty); // MDNode accessors MDNode* getMDNode(Value* const* Vals, unsigned NumVals); Modified: llvm/trunk/include/llvm/Support/IRBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IRBuilder.h?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/IRBuilder.h (original) +++ llvm/trunk/include/llvm/Support/IRBuilder.h Mon Jul 13 15:58:05 2009 @@ -311,17 +311,17 @@ Value *CreateNeg(Value *V, const char *Name = "") { if (Constant *VC = dyn_cast(V)) return Folder.CreateNeg(VC); - return Insert(BinaryOperator::CreateNeg(getGlobalContext(), V), Name); + return Insert(BinaryOperator::CreateNeg(Context, V), Name); } Value *CreateFNeg(Value *V, const char *Name = "") { if (Constant *VC = dyn_cast(V)) return Folder.CreateFNeg(VC); - return Insert(BinaryOperator::CreateFNeg(getGlobalContext(), V), Name); + return Insert(BinaryOperator::CreateFNeg(Context, V), Name); } Value *CreateNot(Value *V, const char *Name = "") { if (Constant *VC = dyn_cast(V)) return Folder.CreateNot(VC); - return Insert(BinaryOperator::CreateNot(V), Name); + return Insert(BinaryOperator::CreateNot(Context, V), Name); } //===--------------------------------------------------------------------===// Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 15:58:05 2009 @@ -2067,17 +2067,20 @@ const Type *Ty = V->getType(); Ty = getEffectiveSCEVType(Ty); - return getMulExpr(V, getConstant(ConstantInt::getAllOnesValue(Ty))); + return getMulExpr(V, + getConstant(cast(Context->getAllOnesValue(Ty)))); } /// getNotSCEV - Return a SCEV corresponding to ~V = -1-V const SCEV *ScalarEvolution::getNotSCEV(const SCEV *V) { if (const SCEVConstant *VC = dyn_cast(V)) - return getConstant(cast(ConstantExpr::getNot(VC->getValue()))); + return getConstant( + cast(Context->getConstantExprNot(VC->getValue()))); const Type *Ty = V->getType(); Ty = getEffectiveSCEVType(Ty); - const SCEV *AllOnes = getConstant(ConstantInt::getAllOnesValue(Ty)); + const SCEV *AllOnes = + getConstant(cast(Context->getAllOnesValue(Ty))); return getMinusSCEV(AllOnes, V); } Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Mon Jul 13 15:58:05 2009 @@ -2314,7 +2314,7 @@ const VectorType *Ty = VectorType::get(Type::Int32Ty, 4); Constant *C = LoadMI->getOpcode() == X86::V_SET0 ? MF.getFunction()->getContext()->getNullValue(Ty) : - ConstantVector::getAllOnesValue(Ty); + MF.getFunction()->getContext()->getAllOnesValue(Ty); unsigned CPI = MCP.getConstantPoolIndex(C, 16); // Create operands to load from the constant pool entry. Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Mon Jul 13 15:58:05 2009 @@ -891,7 +891,7 @@ case ICmpInst::ICMP_ULE: case ICmpInst::ICMP_SLE: case ICmpInst::ICMP_EQ: - LV = BinaryOperator::CreateNot(LV, "notinit", CI); + LV = BinaryOperator::CreateNot(*Context, LV, "notinit", CI); break; case ICmpInst::ICMP_NE: case ICmpInst::ICMP_UGE: Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 15:58:05 2009 @@ -2107,7 +2107,7 @@ ZI->getOperand(0)->getType() == Type::Int1Ty) return SelectInst::Create(ZI->getOperand(0), Context->getNullValue(I.getType()), - Context->getConstantIntAllOnesValue(I.getType())); + Context->getAllOnesValue(I.getType())); } if (isa(LHS)) @@ -2485,7 +2485,7 @@ if (ConstantInt *C = dyn_cast(Op0)) { // Replace (-1 - A) with (~A)... if (C->isAllOnesValue()) - return BinaryOperator::CreateNot(Op1); + return BinaryOperator::CreateNot(*Context, Op1); // C - ~X == X + (1+C) Value *X = 0; @@ -2567,7 +2567,8 @@ Value *OtherOp = Op1I->getOperand(Op1I->getOperand(0) == Op0); Value *NewNot = - InsertNewInstBefore(BinaryOperator::CreateNot(OtherOp, "B.not"), I); + InsertNewInstBefore(BinaryOperator::CreateNot(*Context, + OtherOp, "B.not"), I); return BinaryOperator::CreateAnd(Op0, NewNot); } @@ -3219,7 +3220,7 @@ if (RHSI->getOpcode() == Instruction::Shl && isa(RHSI->getOperand(0))) { if (cast(RHSI->getOperand(0))->getValue().isPowerOf2()) { - Constant *N1 = Context->getConstantIntAllOnesValue(I.getType()); + Constant *N1 = Context->getAllOnesValue(I.getType()); Value *Add = InsertNewInstBefore(BinaryOperator::CreateAdd(RHSI, N1, "tmp"), I); return BinaryOperator::CreateAnd(Op0, Add); @@ -4128,7 +4129,7 @@ Instruction *Or = BinaryOperator::CreateOr(Op0NotVal, Op1NotVal, I.getName()+".demorgan"); InsertNewInstBefore(Or, I); - return BinaryOperator::CreateNot(Or); + return BinaryOperator::CreateNot(*Context, Or); } { @@ -4174,7 +4175,7 @@ std::swap(A, B); } if (A == Op0) { // A&(A^B) -> A & ~B - Instruction *NotB = BinaryOperator::CreateNot(B, "tmp"); + Instruction *NotB = BinaryOperator::CreateNot(*Context, B, "tmp"); InsertNewInstBefore(NotB, I); return BinaryOperator::CreateAnd(A, NotB); } @@ -4902,7 +4903,7 @@ if (A && isOnlyUse(Op0) && isOnlyUse(Op1)) { Value *And = InsertNewInstBefore(BinaryOperator::CreateAnd(A, B, I.getName()+".demorgan"), I); - return BinaryOperator::CreateNot(And); + return BinaryOperator::CreateNot(*Context, And); } } @@ -5056,7 +5057,7 @@ if (dyn_castNotVal(Op0I->getOperand(1), Context)) Op0I->swapOperands(); if (Value *Op0NotVal = dyn_castNotVal(Op0I->getOperand(0), Context)) { Instruction *NotY = - BinaryOperator::CreateNot(Op0I->getOperand(1), + BinaryOperator::CreateNot(*Context, Op0I->getOperand(1), Op0I->getOperand(1)->getName()+".not"); InsertNewInstBefore(NotY, I); if (Op0I->getOpcode() == Instruction::And) @@ -5202,7 +5203,8 @@ std::swap(A, B); if (B == Op1) { // (A|B)^B == A & ~B Instruction *NotB = - InsertNewInstBefore(BinaryOperator::CreateNot(Op1, "tmp"), I); + InsertNewInstBefore(BinaryOperator::CreateNot(*Context, + Op1, "tmp"), I); return BinaryOperator::CreateAnd(A, NotB); } } else if (match(Op0I, m_Xor(m_Specific(Op1), m_Value(B)), *Context)) { @@ -5216,7 +5218,7 @@ if (B == Op1 && // (B&A)^A == ~B & A !isa(Op1)) { // Canonical form is (B&C)^C Instruction *N = - InsertNewInstBefore(BinaryOperator::CreateNot(A, "tmp"), I); + InsertNewInstBefore(BinaryOperator::CreateNot(*Context, A, "tmp"), I); return BinaryOperator::CreateAnd(N, Op1); } } @@ -6006,7 +6008,7 @@ case ICmpInst::ICMP_EQ: { // icmp eq i1 A, B -> ~(A^B) Instruction *Xor = BinaryOperator::CreateXor(Op0, Op1, I.getName()+"tmp"); InsertNewInstBefore(Xor, I); - return BinaryOperator::CreateNot(Xor); + return BinaryOperator::CreateNot(*Context, Xor); } case ICmpInst::ICMP_NE: // icmp eq i1 A, B -> A^B return BinaryOperator::CreateXor(Op0, Op1); @@ -6015,7 +6017,8 @@ std::swap(Op0, Op1); // Change icmp ugt -> icmp ult // FALL THROUGH case ICmpInst::ICMP_ULT:{ // icmp ult i1 A, B -> ~A & B - Instruction *Not = BinaryOperator::CreateNot(Op0, I.getName()+"tmp"); + Instruction *Not = BinaryOperator::CreateNot(*Context, + Op0, I.getName()+"tmp"); InsertNewInstBefore(Not, I); return BinaryOperator::CreateAnd(Not, Op1); } @@ -6023,7 +6026,8 @@ std::swap(Op0, Op1); // Change icmp sgt -> icmp slt // FALL THROUGH case ICmpInst::ICMP_SLT: { // icmp slt i1 A, B -> A & ~B - Instruction *Not = BinaryOperator::CreateNot(Op1, I.getName()+"tmp"); + Instruction *Not = BinaryOperator::CreateNot(*Context, + Op1, I.getName()+"tmp"); InsertNewInstBefore(Not, I); return BinaryOperator::CreateAnd(Not, Op0); } @@ -6031,7 +6035,8 @@ std::swap(Op0, Op1); // Change icmp uge -> icmp ule // FALL THROUGH case ICmpInst::ICMP_ULE: { // icmp ule i1 A, B -> ~A | B - Instruction *Not = BinaryOperator::CreateNot(Op0, I.getName()+"tmp"); + Instruction *Not = BinaryOperator::CreateNot(*Context, + Op0, I.getName()+"tmp"); InsertNewInstBefore(Not, I); return BinaryOperator::CreateOr(Not, Op1); } @@ -6039,7 +6044,8 @@ std::swap(Op0, Op1); // Change icmp sge -> icmp sle // FALL THROUGH case ICmpInst::ICMP_SLE: { // icmp sle i1 A, B -> A | ~B - Instruction *Not = BinaryOperator::CreateNot(Op1, I.getName()+"tmp"); + Instruction *Not = BinaryOperator::CreateNot(*Context, + Op1, I.getName()+"tmp"); InsertNewInstBefore(Not, I); return BinaryOperator::CreateOr(Not, Op0); } @@ -6168,7 +6174,7 @@ // (x (x >s -1) -> true if sign bit clear if (CI->isMinValue(true)) return new ICmpInst(*Context, ICmpInst::ICMP_SGT, Op0, - Context->getConstantIntAllOnesValue(Op0->getType())); + Context->getAllOnesValue(Op0->getType())); } break; case ICmpInst::ICMP_UGT: @@ -7298,7 +7304,7 @@ if (isSignedExt) { // We're performing an unsigned comp with a sign extended value. // This is true if the input is >= 0. [aka >s -1] - Constant *NegOne = Context->getConstantIntAllOnesValue(SrcTy); + Constant *NegOne = Context->getAllOnesValue(SrcTy); Result = InsertNewInstBefore(new ICmpInst(*Context, ICmpInst::ICMP_SGT, LHSCIOp, NegOne, ICI.getName()), ICI); } else { @@ -7317,7 +7323,7 @@ "ICmp should be folded!"); if (Constant *CI = dyn_cast(Result)) return ReplaceInstUsesWith(ICI, Context->getConstantExprNot(CI)); - return BinaryOperator::CreateNot(Result); + return BinaryOperator::CreateNot(*Context, Result); } Instruction *InstCombiner::visitShl(BinaryOperator &I) { @@ -8718,7 +8724,7 @@ // Canonicalize sign-extend from i1 to a select. if (Src->getType() == Type::Int1Ty) return SelectInst::Create(Src, - Context->getConstantIntAllOnesValue(CI.getType()), + Context->getAllOnesValue(CI.getType()), Context->getNullValue(CI.getType())); // See if the value being truncated is already sign extended. If so, just @@ -9373,7 +9379,7 @@ true/*SExt*/, "tmp", ICI); if (Pred == ICmpInst::ICMP_SGT) - In = InsertNewInstBefore(BinaryOperator::CreateNot(In, + In = InsertNewInstBefore(BinaryOperator::CreateNot(*Context, In, In->getName()+".not"), *ICI); return ReplaceInstUsesWith(SI, In); @@ -9438,7 +9444,7 @@ } else { // Change: A = select B, false, C --> A = and !B, C Value *NotCond = - InsertNewInstBefore(BinaryOperator::CreateNot(CondVal, + InsertNewInstBefore(BinaryOperator::CreateNot(*Context, CondVal, "not."+CondVal->getName()), SI); return BinaryOperator::CreateAnd(NotCond, FalseVal); } @@ -9449,7 +9455,7 @@ } else { // Change: A = select B, C, true --> A = or !B, C Value *NotCond = - InsertNewInstBefore(BinaryOperator::CreateNot(CondVal, + InsertNewInstBefore(BinaryOperator::CreateNot(*Context, CondVal, "not."+CondVal->getName()), SI); return BinaryOperator::CreateOr(NotCond, TrueVal); } @@ -9472,7 +9478,7 @@ } else if (TrueValC->isZero() && FalseValC->getValue() == 1) { // select C, 0, 1 -> zext !C to int Value *NotCond = - InsertNewInstBefore(BinaryOperator::CreateNot(CondVal, + InsertNewInstBefore(BinaryOperator::CreateNot(*Context, CondVal, "not."+CondVal->getName()), SI); return CastInst::Create(Instruction::ZExt, NotCond, SI.getType()); } Modified: llvm/trunk/lib/Transforms/Scalar/PredicateSimplifier.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/PredicateSimplifier.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/PredicateSimplifier.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/PredicateSimplifier.cpp Mon Jul 13 15:58:05 2009 @@ -1754,7 +1754,7 @@ switch (BO->getOpcode()) { case Instruction::And: { // "and i32 %a, %b" EQ -1 then %a EQ -1 and %b EQ -1 - ConstantInt *CI = ConstantInt::getAllOnesValue(Ty); + ConstantInt *CI = cast(Context->getAllOnesValue(Ty)); if (Canonical == CI) { add(CI, Op0, ICmpInst::ICMP_EQ, NewContext); add(CI, Op1, ICmpInst::ICMP_EQ, NewContext); @@ -1892,7 +1892,7 @@ Constant *Zero = Context->getNullValue(Ty); Constant *One = ConstantInt::get(Ty, 1); - ConstantInt *AllOnes = ConstantInt::getAllOnesValue(Ty); + ConstantInt *AllOnes = cast(Context->getAllOnesValue(Ty)); switch (Opcode) { default: break; Modified: llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Mon Jul 13 15:58:05 2009 @@ -201,7 +201,7 @@ static Instruction *LowerNegateToMultiply(Instruction *Neg, std::map, unsigned> &ValueRankMap, LLVMContext *Context) { - Constant *Cst = Context->getConstantIntAllOnesValue(Neg->getType()); + Constant *Cst = Context->getAllOnesValue(Neg->getType()); Instruction *Res = BinaryOperator::CreateMul(Neg->getOperand(1), Cst, "",Neg); ValueRankMap.erase(Neg); @@ -626,7 +626,7 @@ return Context->getNullValue(X->getType()); } else if (Opcode == Instruction::Or) { // ...|X|~X = -1 ++NumAnnihil; - return Context->getConstantIntAllOnesValue(X->getType()); + return Context->getAllOnesValue(X->getType()); } } } Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Mon Jul 13 15:58:05 2009 @@ -814,10 +814,10 @@ if (I.getOpcode() == Instruction::And) markConstant(IV, &I, Context->getNullValue(I.getType())); else if (const VectorType *PT = dyn_cast(I.getType())) - markConstant(IV, &I, Context->getConstantVectorAllOnesValue(PT)); + markConstant(IV, &I, Context->getAllOnesValue(PT)); else markConstant(IV, &I, - Context->getConstantIntAllOnesValue(I.getType())); + Context->getAllOnesValue(I.getType())); return; } else { if (I.getOpcode() == Instruction::And) { @@ -1388,9 +1388,9 @@ // undef | X -> -1. X could be -1. if (const VectorType *PTy = dyn_cast(ITy)) markForcedConstant(LV, I, - Context->getConstantVectorAllOnesValue(PTy)); + Context->getAllOnesValue(PTy)); else - markForcedConstant(LV, I, Context->getConstantIntAllOnesValue(ITy)); + markForcedConstant(LV, I, Context->getAllOnesValue(ITy)); return true; case Instruction::SDiv: Modified: llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/SimplifyLibCalls.cpp Mon Jul 13 15:58:05 2009 @@ -1225,7 +1225,7 @@ // abs(x) -> x >s -1 ? x : -x Value *Op = CI->getOperand(1); Value *Pos = B.CreateICmpSGT(Op, - Context->getConstantIntAllOnesValue(Op->getType()), + Context->getAllOnesValue(Op->getType()), "ispos"); Value *Neg = B.CreateNeg(Op, "neg"); return B.CreateSelect(Pos, Op, Neg); Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Mon Jul 13 15:58:05 2009 @@ -1570,7 +1570,8 @@ // If we need to invert the condition in the pred block to match, do so now. if (InvertPredCond) { Value *NewCond = - BinaryOperator::CreateNot(PBI->getCondition(), + BinaryOperator::CreateNot(*BI->getParent()->getContext(), + PBI->getCondition(), PBI->getCondition()->getName()+".not", PBI); PBI->setCondition(NewCond); BasicBlock *OldTrue = PBI->getSuccessor(0); @@ -1726,12 +1727,12 @@ // Make sure we get to CommonDest on True&True directions. Value *PBICond = PBI->getCondition(); if (PBIOp) - PBICond = BinaryOperator::CreateNot(PBICond, + PBICond = BinaryOperator::CreateNot(*Context, PBICond, PBICond->getName()+".not", PBI); Value *BICond = BI->getCondition(); if (BIOp) - BICond = BinaryOperator::CreateNot(BICond, + BICond = BinaryOperator::CreateNot(*Context, BICond, BICond->getName()+".not", PBI); // Merge the conditions. Modified: llvm/trunk/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Constants.cpp (original) +++ llvm/trunk/lib/VMCore/Constants.cpp Mon Jul 13 15:58:05 2009 @@ -128,31 +128,6 @@ return false; } -Constant *Constant::getAllOnesValue(const Type *Ty) { - if (const IntegerType* ITy = dyn_cast(Ty)) - return ConstantInt::get(APInt::getAllOnesValue(ITy->getBitWidth())); - return ConstantVector::getAllOnesValue(cast(Ty)); -} - -// Static constructor to create an integral constant with all bits set -ConstantInt *ConstantInt::getAllOnesValue(const Type *Ty) { - if (const IntegerType* ITy = dyn_cast(Ty)) - return ConstantInt::get(APInt::getAllOnesValue(ITy->getBitWidth())); - return 0; -} - -/// @returns the value for a vector integer constant of the given type that -/// has all its bits set to true. -/// @brief Get the all ones value -ConstantVector *ConstantVector::getAllOnesValue(const VectorType *Ty) { - std::vector Elts; - Elts.resize(Ty->getNumElements(), - ConstantInt::getAllOnesValue(Ty->getElementType())); - assert(Elts[0] && "Not a vector integer type!"); - return cast(ConstantVector::get(Elts)); -} - - /// getVectorElements - This method, which is only valid on constant of vector /// type, returns the elements of the vector in the specified smallvector. /// This handles breaking down a vector undef into undef elements, etc. For @@ -797,12 +772,6 @@ return cast(this)->Indices; } -Constant *ConstantExpr::getNot(Constant *C) { - assert(C->getType()->isIntOrIntVector() && - "Cannot NOT a nonintegral value!"); - return get(Instruction::Xor, C, - Constant::getAllOnesValue(C->getType())); -} Constant *ConstantExpr::getAdd(Constant *C1, Constant *C2) { return get(Instruction::Add, C1, C2); } Modified: llvm/trunk/lib/VMCore/Instructions.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Instructions.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Instructions.cpp (original) +++ llvm/trunk/lib/VMCore/Instructions.cpp Mon Jul 13 15:58:05 2009 @@ -1669,30 +1669,32 @@ Op->getType(), Name, InsertAtEnd); } -BinaryOperator *BinaryOperator::CreateNot(Value *Op, const std::string &Name, +BinaryOperator *BinaryOperator::CreateNot(LLVMContext &Context, + Value *Op, const std::string &Name, Instruction *InsertBefore) { Constant *C; if (const VectorType *PTy = dyn_cast(Op->getType())) { - C = ConstantInt::getAllOnesValue(PTy->getElementType()); + C = Context.getAllOnesValue(PTy->getElementType()); C = ConstantVector::get(std::vector(PTy->getNumElements(), C)); } else { - C = ConstantInt::getAllOnesValue(Op->getType()); + C = Context.getAllOnesValue(Op->getType()); } return new BinaryOperator(Instruction::Xor, Op, C, Op->getType(), Name, InsertBefore); } -BinaryOperator *BinaryOperator::CreateNot(Value *Op, const std::string &Name, +BinaryOperator *BinaryOperator::CreateNot(LLVMContext &Context, + Value *Op, const std::string &Name, BasicBlock *InsertAtEnd) { Constant *AllOnes; if (const VectorType *PTy = dyn_cast(Op->getType())) { // Create a vector of all ones values. - Constant *Elt = ConstantInt::getAllOnesValue(PTy->getElementType()); + Constant *Elt = Context.getAllOnesValue(PTy->getElementType()); AllOnes = ConstantVector::get(std::vector(PTy->getNumElements(), Elt)); } else { - AllOnes = ConstantInt::getAllOnesValue(Op->getType()); + AllOnes = Context.getAllOnesValue(Op->getType()); } return new BinaryOperator(Instruction::Xor, Op, AllOnes, Modified: llvm/trunk/lib/VMCore/LLVMContext.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/LLVMContext.cpp?rev=75497&r1=75496&r2=75497&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/LLVMContext.cpp (original) +++ llvm/trunk/lib/VMCore/LLVMContext.cpp Mon Jul 13 15:58:05 2009 @@ -64,7 +64,14 @@ } Constant* LLVMContext::getAllOnesValue(const Type* Ty) { - return Constant::getAllOnesValue(Ty); + if (const IntegerType* ITy = dyn_cast(Ty)) + return getConstantInt(APInt::getAllOnesValue(ITy->getBitWidth())); + + std::vector Elts; + const VectorType* VTy = cast(Ty); + Elts.resize(VTy->getNumElements(), getAllOnesValue(VTy->getElementType())); + assert(Elts[0] && "Not a vector integer type!"); + return cast(getConstantVector(Elts)); } // UndefValue accessors. @@ -105,11 +112,6 @@ return ConstantInt::get(Ty, V); } -ConstantInt* LLVMContext::getConstantIntAllOnesValue(const Type* Ty) { - return ConstantInt::getAllOnesValue(Ty); -} - - // ConstantPointerNull accessors. ConstantPointerNull* LLVMContext::getConstantPointerNull(const PointerType* T) { return ConstantPointerNull::get(T); @@ -285,7 +287,9 @@ } Constant* LLVMContext::getConstantExprNot(Constant* C) { - return ConstantExpr::getNot(C); + assert(C->getType()->isIntOrIntVector() && + "Cannot NOT a nonintegral value!"); + return getConstantExpr(Instruction::Xor, C, getAllOnesValue(C->getType())); } Constant* LLVMContext::getConstantExprAdd(Constant* C1, Constant* C2) { @@ -464,11 +468,6 @@ return ConstantVector::get(Vals, NumVals); } -ConstantVector* LLVMContext::getConstantVectorAllOnesValue( - const VectorType* Ty) { - return ConstantVector::getAllOnesValue(Ty); -} - // MDNode accessors MDNode* LLVMContext::getMDNode(Value* const* Vals, unsigned NumVals) { return MDNode::get(Vals, NumVals); From resistor at mac.com Mon Jul 13 15:58:19 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 20:58:19 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75498 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200907132058.n6DKwJsi001074@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 15:58:19 2009 New Revision: 75498 URL: http://llvm.org/viewvc/llvm-project?rev=75498&view=rev Log: Update for LLVM API change. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=75498&r1=75497&r2=75498&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Jul 13 15:58:19 2009 @@ -3530,7 +3530,7 @@ const Type *Ty = ConvertType(TREE_TYPE(exp)); Constant *Zero = ConstantInt::get(Ty, 0); Constant *One = ConstantInt::get(Ty, 1); - Constant *MinusOne = ConstantInt::getAllOnesValue(Ty); + Constant *MinusOne = getGlobalContext().getAllOnesValue(Ty); Value *LHS = Emit(TREE_OPERAND(exp, 0), 0); Value *RHS = Emit(TREE_OPERAND(exp, 1), 0); @@ -3602,7 +3602,7 @@ const Type *Ty = ConvertType(TREE_TYPE(exp)); Constant *Zero = ConstantInt::get(Ty, 0); Constant *One = ConstantInt::get(Ty, 1); - Constant *MinusOne = ConstantInt::getAllOnesValue(Ty); + Constant *MinusOne = getGlobalContext().getAllOnesValue(Ty); // In the case of signed arithmetic, we calculate FDiv as follows: // LHS FDiv RHS = (LHS + Sign(RHS) * Offset) Div RHS - Offset, @@ -4827,7 +4827,7 @@ // This treats everything as unknown, and is minimally defensible as // correct, although completely useless. if (tree_low_cst (ObjSizeTree, 0) < 2) - Result = ConstantInt::getAllOnesValue(TD.getIntPtrType()); + Result = getGlobalContext().getAllOnesValue(TD.getIntPtrType()); else Result = ConstantInt::get(TD.getIntPtrType(), 0); return true; From eli.friedman at gmail.com Mon Jul 13 15:58:59 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 20:58:59 -0000 Subject: [llvm-commits] [llvm] r75499 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200907132058.n6DKwxRo001105@zion.cs.uiuc.edu> Author: efriedma Date: Mon Jul 13 15:58:59 2009 New Revision: 75499 URL: http://llvm.org/viewvc/llvm-project?rev=75499&view=rev Log: Fix comment. Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75499&r1=75498&r2=75499&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 15:58:59 2009 @@ -8263,9 +8263,8 @@ } } -/// Only the TRUNC, ZEXT, SEXT. This function implements the common transforms -/// for all those cases. -/// @brief Implement the transforms common to CastInst with integer operands +/// commonIntCastTransforms - This function implements the common transforms +/// for trunc, zext, and sext. Instruction *InstCombiner::commonIntCastTransforms(CastInst &CI) { if (Instruction *Result = commonCastTransforms(CI)) return Result; From edwintorok at gmail.com Mon Jul 13 15:59:56 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Mon, 13 Jul 2009 23:59:56 +0300 Subject: [llvm-commits] [PATCH] New pass: pointer (bounds) tracking! In-Reply-To: <4A5508AC.4020805@gmail.com> References: <4A4D0B51.1060302@gmail.com> <4A5508AC.4020805@gmail.com> Message-ID: <4A5BA04C.80003@gmail.com> On 2009-07-08 23:59, T?r?k Edwin wrote: > On 2009-07-08 23:43, Dan Gohman wrote: > >> Hi Edwin, >> >> On Jul 2, 2009, at 12:32 PM, T?r?k Edwin wrote: >> >> >> >> >>> Hi, >>> >>> The attached patch introduces a new pass that can be queried for >>> allocation size of pointers, >>> and contains a simple solver [*] for (a ult b) inequalities useful in >>> bounds checking. This is based on the bounds checker tool I developed >>> for my undergraduate thesis. >>> >>> >> This sounds cool. Thanks for your patience; I'm finally getting around >> to taking a look. >> >> >> > > Hi Dan, > > I am replying to part of your email now, next part will come tomorrow. > Please review the attached is pointertracking1.patch, which should be ready to be applied to LLVM. I also attached pointertracking_notready.patch, which is a WIP for checkLimits, I'll submit it again once pointertracking1.patch is applied to LLVM. This is not ready to be reviewed at this time, I still have some unimplemented parts there, and it needs more testing. >> >> >>> [*] >>> The solver uses isLoopGuardedByCond(), but is able to handle more >>> complicated situations by using >>> properties of SCEV expressions, and transitivity of ULT/ULE: >>> - if a SCEVAddRecExpr is monotonic it checks whether the start and >>> exit >>> value is known to be ULT Limit. >>> >>> >> This is cool :-). >> >> I moved this to pointertracking_notready.patch, I have some more (unimplemented) ideas for checking monotonicity, and limits, based on derivating AddRecExpr ;) >> >> >>> - for PHI nodes that are SCEVUnknowns it checks whether all parts of >>> the PHI are known to be ULT >>> - if a value is a constant offset away from a PHI: C + X X >>> >> It also looks for predicates among the basic blocks that dominate the >>> memory access, trying to >>> find a predicate that is sufficient for the validity of the memory >>> access. >>> >>> Best regards, >>> --Edwin >>> >>> >>> >>> >> Here are some comments on the patch. >> >> > namespace llvm { >> > char PointerTracking::ID=0; >> > >> > [...] >> >> Don't indent namespace contents. >> >> > void PointerTracking::getAnalysisUsage(AnalysisUsage &AU) const { >> > AU.addRequired(); >> > AU.addRequired(); >> > AU.addRequired(); >> >> These should be addRequiredTransitive instead of addRequired, so that >> the >> required analyses are preserved throughout the lifetime of the >> PointerTracking analysis. >> >> > callocFunc = M.getFunction("calloc"); >> [...] >> > reallocFunc = M.getFunction("realloc"); >> >> I don't know what the current prevailing fasion is with respect to >> passes knowing special things about functions with standard C library >> names. It would be good to mention that this pass knows about >> "calloc" and "realloc" in a high-level comment though. >> >> > > Ok. > > >> > const SCEV *PointerTracking::getAllocationSize(Value *V) >> >> This name is a little confusing. Can you rename this to >> getAllocationElementCount or something? >> >> > > Ok. > I also refactored the internals of this method. The implementation should be more straight forward now: - we request to know the element count of a given Type (not necessarely same as allocated type) - we explicitly get the type of allocated element - we check the size of the 2 type, if possible we convert the count without using TargetData - if necessary I use TargetData to convert count Now getAllocationSizeInBytes simply asks for element count with Type::Int8Ty. > >> > { >> > if (AllocationInst *AI = dyn_cast(V)) { >> > Value *arraySize = AI->getArraySize(); >> > if (ConstantInt *C = dyn_cast(arraySize)) { >> > return SE->getConstant(C); >> > } >> > return SE->getSCEVAtScope(arraySize, LI->getLoopFor(AI- >> >getParent())); >> >> It isn't actually necessary to check for a ConstantInt specially >> here. getSCEVAtScope will effectively do this automatically. >> Fixed, I don't use SCEVAtScope here anymore either. >> > } >> > if (GlobalVariable *GV = dyn_cast(V)) { >> > if (GV->hasInitializer()) { >> > Constant *C = GV->getInitializer(); >> > if (const ArrayType *ATy = dyn_cast(C->getType >> ())) { >> > return SE->getConstant(Type::Int32Ty, ATy->getNumElements >> ()); >> >> Hard-coding Int32Ty here may be problematic in some cases. >> I think in general I can't guarantee what the type of the returned SCEV is, the client should convert it to a compatible type when using it (and I'm doing some conversion in compareSCEV too). >> > } >> > } >> > return SE->getConstant(Type::Int32Ty, 1); >> > } >> > // TODO: implement more complicated pointer size tracking >> > return 0; >> > } >> >> > const SCEV *PointerTracking::getAllocationSizeInBytes(Value *V) >> > { >> > assert(TD && "TargetData must be available to calculate size in >> bytes!"); >> >> Would it make sense to postpone this check until TD is actually >> needed, and then return CouldNotCompute if TD is unavailable? >> >> > > Yes. > Done, I also calculate counts using getPrimitiveSizeInBits() if available, and only after that try TargetData (if available). >> > const SCEV *S = getAllocationSize(V); >> > if (isa(S)) { >> > if (CallInst *CI = dyn_cast(V)) { >> > CallSite CS(CI); >> > Function *F = dyn_cast(CS.getCalledValue()- >> >stripPointerCasts()); >> >> This line exceeds 80 columns. >> >> > const Loop *L = LI->getLoopFor(CI->getParent()); >> > if (F == callocFunc) { >> > return >> > SE->getSCEVAtScope(SE->getMulExpr(SE->getSCEV >> (CS.getArgument(0)), >> > SE->getSCEV >> (CS.getArgument(1))), >> > L); >> > } else if (F == reallocFunc) { >> > return SE->getSCEVAtScope(CS.getArgument(1), L); >> > } >> > } >> > return S; >> > } >> > uint64_t elementsize = TD->getTypeStoreSize(V->getType()); >> > return SE->getMulExpr(SE->getConstant(S->getType(), >> elementsize), S); >> >> The size of the allocation will be the number of elements multiplied >> by the "Alloc" size, not the "Store" size. >> >> > > Thanks, will fix. > > >> > const SCEV *getStart(const SCEV *A, const Loop *L) >> > { >> >> Here and elsewhere, the brace for a function definition goes on the >> same line as the close paren. >> >> > > Ok. > >> > if (isa(A)) >> > return A; >> >> This would be a little stronger as A->isLoopInvariant(L). >> >> > DomTreeNodeBase *N = DT->getNode(BB); >> > DomTreeNodeBase *D = N->getIDom(); >> > while (D) { // D dominates N >> > BasicBlock *dBB = D->getBlock(); >> > bool negated; >> > Value *V = getConditionToReach(dBB, BB, negated); >> > if (conditionSufficient(V, negated, I, ICmpInst::ICMP_ULT, >> Limit)) >> > return AlwaysTrue; >> > BB = dBB; >> > D = D->getIDom(); >> > } >> >> This doesn't appear correct. Even if D dominates N and has a >> conditional branch with a successor that reaches N, it's possible >> that the other successor of the conditional branch reaches N also. >> See ScalarEvolution's getPredecessorWithUniqueSuccessorForBB for >> code that solves a similar problem. >> >> > > That is quite a serious bug in my dominator predicate handling then, > I'll have to be more careful. > I'll have a look at this tomorrow, and try to post an updated patch. > I fixed this in pointertracking_notready.patch by checking that: - there is one and only one successor of the branch that dominates the target BB, excluding backedges - all predecessors of the targetBB are dominated by that successor I still need to add testcases for this, and review all the methods in pointertracking_notready.patch once more. Best regards, --Edwin -------------- next part -------------- A non-text attachment was scrubbed... Name: pointertracking1.patch Type: text/x-diff Size: 20620 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/fb086b3f/attachment.bin -------------- next part -------------- A non-text attachment was scrubbed... Name: pointertracking_notready.patch Type: text/x-diff Size: 12264 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/fb086b3f/attachment-0001.bin From dalej at apple.com Mon Jul 13 16:04:36 2009 From: dalej at apple.com (Dale Johannesen) Date: Mon, 13 Jul 2009 21:04:36 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75501 - in /llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg: const-cfstring-4-64bit.m const-cfstring-4.m const-str-10-64bit.m const-str-10.m const-str-11-64bit.m const-str-11.m const-str-9-64bit.m const-str-9.m image-info.m objc-gc-section-1.m objc-gc-section-2.m objc2-newmetadata-sections.m utf16-x86-cfstring-1.m Message-ID: <200907132104.n6DL4aQZ001307@zion.cs.uiuc.edu> Author: johannes Date: Mon Jul 13 16:04:36 2009 New Revision: 75501 URL: http://llvm.org/viewvc/llvm-project?rev=75501&view=rev Log: Testcase adjustments for whitespace adjustment to assembler syntax. Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9-64bit.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/image-info.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-1.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-2.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-newmetadata-sections.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/utf16-x86-cfstring-1.m Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4-64bit.m Mon Jul 13 16:04:36 2009 @@ -7,6 +7,7 @@ typedef const struct __CFString * CFStringRef; static CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; -/* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__DATA, __cfstring" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".quad\t___CFConstantStringClassReference\n\t.long\t1992.*\n\t.space( |\t)4\n\t.quad\t.*\n\t.quad\t19\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-cfstring-4.m Mon Jul 13 16:04:36 2009 @@ -9,6 +9,7 @@ typedef const struct __CFString * CFStringRef; static CFStringRef appKey = (CFStringRef) @"com.apple.soundpref"; -/* { dg-final { scan-assembler ".section __DATA, __cfstring" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__DATA, __cfstring" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t___CFConstantStringClassReference\n\t.long\t1992.*\n\t.long\t.*\n\t.long\t19.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10-64bit.m Mon Jul 13 16:04:36 2009 @@ -29,6 +29,7 @@ const NSConstantString *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5.*\n\t.space( |\t)4\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-10.m Mon Jul 13 16:04:36 2009 @@ -32,6 +32,7 @@ const NSConstantString *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11-64bit.m Mon Jul 13 16:04:36 2009 @@ -28,6 +28,7 @@ const XStr *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".quad\t__XStrClassReference\n\t.quad\t.*\n\t.long\t5.*\n\t.space( |\t)4\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-11.m Mon Jul 13 16:04:36 2009 @@ -31,6 +31,7 @@ const XStr *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t__XStrClassReference\n\t.long\t.*\n\t.long\t5.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9-64bit.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9-64bit.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9-64bit.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9-64bit.m Mon Jul 13 16:04:36 2009 @@ -21,6 +21,7 @@ static const NSConstantString *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".quad\t__NSConstantStringClassReference\n\t.quad\t.*\n\t.long\t5.*\n\t.space( |\t)4\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/const-str-9.m Mon Jul 13 16:04:36 2009 @@ -26,6 +26,7 @@ static const NSConstantString *appKey = @"MyApp"; -/* { dg-final { scan-assembler ".section __OBJC, __cstring_object" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__OBJC, __cstring_object" } } */ /* LLVM LOCAL accept llvm syntax */ /* { dg-final { scan-assembler ".long\t__NSConstantStringClassReference\n\t.long\t.*\n\t.long\t5.*\n" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/image-info.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/image-info.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/image-info.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/image-info.m Mon Jul 13 16:04:36 2009 @@ -40,4 +40,4 @@ @end /* LLVM LOCAL accept llvm syntax */ -/* { dg-final { scan-assembler ".section __OBJC, __image_info.*\n\t.align.*\nL_OBJC_IMAGE_INFO.*:.*\n\t(.long\t0|.space\t4)\n\t.long\t1" } } */ +/* { dg-final { scan-assembler ".section.*__OBJC, __image_info.*\n\t.align.*\nL_OBJC_IMAGE_INFO.*:.*\n\t(.long\t0|.space\t4)\n\t.long\t1" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-1.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-1.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-1.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-1.m Mon Jul 13 16:04:36 2009 @@ -11,6 +11,6 @@ @implementation INTF @end /* LLVM LOCAL begin llvm syntax */ -/* { dg-final { scan-assembler ".section __OBJC,.*__image_info" } } */ +/* { dg-final { scan-assembler ".section.*__OBJC,.*__image_info" } } */ /* { dg-final { scan-assembler "L_OBJC_IMAGE_INFO:.*\n\t.space( |\t)8" } } */ /* LLVM LOCAL end */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-2.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-2.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-2.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc-gc-section-2.m Mon Jul 13 16:04:36 2009 @@ -10,6 +10,6 @@ @implementation INTF @end /* LLVM LOCAL begin accept llvm syntax */ -/* { dg-final { scan-assembler ".section __OBJC,.*__image_info" } } */ +/* { dg-final { scan-assembler ".section.*__OBJC,.*__image_info" } } */ /* { dg-final { scan-assembler "L_OBJC_IMAGE_INFO:.*\n\t(.long\t0|.space\t4)\n\t.long\t6" } } */ /* LLVM LOCAL end */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-newmetadata-sections.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-newmetadata-sections.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-newmetadata-sections.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/objc2-newmetadata-sections.m Mon Jul 13 16:04:36 2009 @@ -8,5 +8,7 @@ @interface INTF @end @implementation INTF @end -/* { dg-final { scan-assembler ".section __DATA, __objc_const" } } */ -/* { dg-final { scan-assembler ".section __DATA, __objc_data" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__DATA, __objc_const" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__DATA, __objc_data" } } */ Modified: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/utf16-x86-cfstring-1.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/utf16-x86-cfstring-1.m?rev=75501&r1=75500&r2=75501&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/utf16-x86-cfstring-1.m (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/utf16-x86-cfstring-1.m Mon Jul 13 16:04:36 2009 @@ -10,7 +10,8 @@ NSLog(@"\U00010400\U0001D12B"); return 0; } -/* { dg-final { scan-assembler ".section __TEXT,__ustring" } } */ +/* LLVM LOCAL accept llvm syntax */ +/* { dg-final { scan-assembler ".section.*__TEXT,__ustring" } } */ /* LLVM LOCAL begin same data, very different syntax */ /* { dg-final { scan-assembler "___utf16_string_1:.*\n\t(.byte\t-110\n\t.byte\t33\n\t.byte\t32\n\t.byte\t0|.asciz\t\"\\\\622! \\\\000|.asciz\t\"\\\\222! \\\\000)" } } */ /* { dg-final { scan-assembler "___utf16_string_2:.*\n\t(.byte\t1\n\t.byte\t-40\n\t.byte\t0\n\t.byte\t-36|.asciz\t\"\\\\001\\\\730\\\\000\\\\734)" } } */ From pietreka at gmail.com Mon Jul 13 10:14:38 2009 From: pietreka at gmail.com (Artur Pietrek) Date: Mon, 13 Jul 2009 17:14:38 +0200 Subject: [llvm-commits] [PATCH] MSIL backend: Missing break in switch statement Message-ID: Hi All,This is very small patch that just fixes one missing break in switch, causing printing one compare instruction as two (the second one wrong). Artur -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/8c461a33/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: missing_break.patch Type: text/x-patch Size: 416 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/8c461a33/attachment.bin From pietreka at gmail.com Mon Jul 13 10:17:22 2009 From: pietreka at gmail.com (Artur Pietrek) Date: Mon, 13 Jul 2009 17:17:22 +0200 Subject: [llvm-commits] [PATCH] MSIL backend: Int bit width printing modification Message-ID: Hi again, This patch modifies ints' bit width to those supportet by MSIL. Artur -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/cd7a6853/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: int_bitwidth.patch Type: text/x-patch Size: 833 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/cd7a6853/attachment.bin From pietreka at gmail.com Mon Jul 13 10:23:24 2009 From: pietreka at gmail.com (Artur Pietrek) Date: Mon, 13 Jul 2009 17:23:24 +0200 Subject: [llvm-commits] [PATCH] MSIL backend: Fix incorrect value after sign extension Message-ID: Hi all, This patch adds extra sign extension to the same bit width before int sign extension to another bit width. This is needed to get correct singed value. Artur -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/a4d5eace/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: correct_sign_extending.patch Type: text/x-patch Size: 1997 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/a4d5eace/attachment.bin From pietreka at gmail.com Mon Jul 13 10:29:29 2009 From: pietreka at gmail.com (Artur Pietrek) Date: Mon, 13 Jul 2009 17:29:29 +0200 Subject: [llvm-commits] [PATCH] MSIL backend: Sign extension of operands of signed comparison instructions Message-ID: Hi all, This patch adds sign extension of operands in sign comparison. This is needed to get correct result. Artur -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/7802ecd5/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: sign_extension_in_int_comparison.patch Type: text/x-patch Size: 2651 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/7802ecd5/attachment.bin From enderby at apple.com Mon Jul 13 16:03:15 2009 From: enderby at apple.com (Kevin Enderby) Date: Mon, 13 Jul 2009 21:03:15 -0000 Subject: [llvm-commits] [llvm] r75500 - in /llvm/trunk: include/llvm/MC/MCStreamer.h lib/MC/MCAsmStreamer.cpp test/MC/AsmParser/directive_subsections_via_symbols.s tools/llvm-mc/AsmParser.cpp tools/llvm-mc/AsmParser.h Message-ID: <200907132103.n6DL3FV0001244@zion.cs.uiuc.edu> Author: enderby Date: Mon Jul 13 16:03:15 2009 New Revision: 75500 URL: http://llvm.org/viewvc/llvm-project?rev=75500&view=rev Log: add llvm-mc support for parsing the .subsections_via_symbols directive. Added: llvm/trunk/test/MC/AsmParser/directive_subsections_via_symbols.s Modified: llvm/trunk/include/llvm/MC/MCStreamer.h llvm/trunk/lib/MC/MCAsmStreamer.cpp llvm/trunk/tools/llvm-mc/AsmParser.cpp llvm/trunk/tools/llvm-mc/AsmParser.h Modified: llvm/trunk/include/llvm/MC/MCStreamer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=75500&r1=75499&r2=75500&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCStreamer.h (original) +++ llvm/trunk/include/llvm/MC/MCStreamer.h Mon Jul 13 16:03:15 2009 @@ -89,6 +89,11 @@ // symbol section in the constructor and initialize it here? virtual void EmitLabel(MCSymbol *Symbol) = 0; + /// SubsectionsViaSymbols - Note in the output that the conventions used in + /// in the assembly file allows the bytes of a section to be divided up at + /// the boundaries of the symbols by a link editor for processing as atoms. + virtual void SubsectionsViaSymbols(void) = 0; + /// EmitAssignment - Emit an assignment of @param Value to @param Symbol. /// /// This corresponds to an assembler statement such as: Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=75500&r1=75499&r2=75500&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original) +++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Mon Jul 13 16:03:15 2009 @@ -38,6 +38,8 @@ virtual void EmitLabel(MCSymbol *Symbol); + virtual void SubsectionsViaSymbols(void); + virtual void EmitAssignment(MCSymbol *Symbol, const MCValue &Value, bool MakeAbsolute = false); @@ -117,6 +119,10 @@ Symbol->setExternal(false); } +void MCAsmStreamer::SubsectionsViaSymbols(void) { + OS << ".subsections_via_symbols\n"; +} + void MCAsmStreamer::EmitAssignment(MCSymbol *Symbol, const MCValue &Value, bool MakeAbsolute) { assert(!Symbol->getSection() && "Cannot assign to a label!"); Added: llvm/trunk/test/MC/AsmParser/directive_subsections_via_symbols.s URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/directive_subsections_via_symbols.s?rev=75500&view=auto ============================================================================== --- llvm/trunk/test/MC/AsmParser/directive_subsections_via_symbols.s (added) +++ llvm/trunk/test/MC/AsmParser/directive_subsections_via_symbols.s Mon Jul 13 16:03:15 2009 @@ -0,0 +1,6 @@ +# RUN: llvm-mc %s | FileCheck %s + +# CHECK: TEST0: +# CHECK: .subsections_via_symbols +TEST0: + .subsections_via_symbols Modified: llvm/trunk/tools/llvm-mc/AsmParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.cpp?rev=75500&r1=75499&r2=75500&view=diff ============================================================================== --- llvm/trunk/tools/llvm-mc/AsmParser.cpp (original) +++ llvm/trunk/tools/llvm-mc/AsmParser.cpp Mon Jul 13 16:03:15 2009 @@ -527,6 +527,9 @@ if (!strcmp(IDVal, ".zerofill")) return ParseDirectiveDarwinZerofill(); + if (!strcmp(IDVal, ".subsections_via_symbols")) + return ParseDirectiveDarwinSubsectionsViaSymbols(); + Warning(IDLoc, "ignoring directive for now"); EatToEndOfStatement(); return false; @@ -1052,3 +1055,16 @@ return false; } + +/// ParseDirectiveDarwinSubsectionsViaSymbols +/// ::= .subsections_via_symbols +bool AsmParser::ParseDirectiveDarwinSubsectionsViaSymbols() { + if (Lexer.isNot(asmtok::EndOfStatement)) + return TokError("unexpected token in '.subsections_via_symbols' directive"); + + Lexer.Lex(); + + Out.SubsectionsViaSymbols(); + + return false; +} Modified: llvm/trunk/tools/llvm-mc/AsmParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.h?rev=75500&r1=75499&r2=75500&view=diff ============================================================================== --- llvm/trunk/tools/llvm-mc/AsmParser.h (original) +++ llvm/trunk/tools/llvm-mc/AsmParser.h Mon Jul 13 16:03:15 2009 @@ -112,6 +112,9 @@ bool ParseDirectiveComm(bool IsLocal); // ".comm" and ".lcomm" bool ParseDirectiveDarwinZerofill(); // Darwin specific ".zerofill" + + // Darwin specific ".subsections_via_symbols" + bool ParseDirectiveDarwinSubsectionsViaSymbols(); }; } // end namespace llvm From dalej at apple.com Mon Jul 13 16:12:04 2009 From: dalej at apple.com (Dale Johannesen) Date: Mon, 13 Jul 2009 21:12:04 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r75502 - /llvm-gcc-4.2/trunk/gcc/testsuite/g++.dg/abi/key2.C Message-ID: <200907132112.n6DLC41j001538@zion.cs.uiuc.edu> Author: johannes Date: Mon Jul 13 16:12:04 2009 New Revision: 75502 URL: http://llvm.org/viewvc/llvm-project?rev=75502&view=rev Log: Adjust test to compensate for whitespace changes in assembly output. Modified: llvm-gcc-4.2/trunk/gcc/testsuite/g++.dg/abi/key2.C Modified: llvm-gcc-4.2/trunk/gcc/testsuite/g++.dg/abi/key2.C URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/g%2B%2B.dg/abi/key2.C?rev=75502&r1=75501&r2=75502&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/g++.dg/abi/key2.C (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/g++.dg/abi/key2.C Mon Jul 13 16:12:04 2009 @@ -3,8 +3,8 @@ // { dg-do compile { target *-*-darwin* } } // LLVM LOCAL begin rearrange tests to check current syntax -// { dg-final { scan-assembler " .section __DATA,__const_coal,coalesced\\n .globl __ZTV1f\\n .weak_definition __ZTV1f\\n" } } -// { dg-final { scan-assembler " .section __TEXT,__const_coal,coalesced\\n .globl __ZTS1f\\n .weak_definition __ZTS1f\\n" } } +// { dg-final { scan-assembler " .section.*__DATA,__const_coal,coalesced\\n .globl __ZTV1f\\n .weak_definition __ZTV1f\\n" } } +// { dg-final { scan-assembler " .section.*__TEXT,__const_coal,coalesced\\n .globl __ZTS1f\\n .weak_definition __ZTS1f\\n" } } // With llvm ZTI1f is in the right place, but the ordering is different // so the .section directive is not needed. Do the best we can. // (It belongs in the same place as ZTV1f.) From dpatel at apple.com Mon Jul 13 16:19:56 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 13 Jul 2009 21:19:56 -0000 Subject: [llvm-commits] [llvm] r75503 - in /llvm/trunk/lib/CodeGen/AsmPrinter: DwarfDebug.cpp DwarfDebug.h Message-ID: <200907132119.n6DLJu3e001831@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jul 13 16:19:56 2009 New Revision: 75503 URL: http://llvm.org/viewvc/llvm-project?rev=75503&view=rev Log: Use Mangler to remove leading '1' from linkage names. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=75503&r1=75502&r2=75503&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Jul 13 16:19:56 2009 @@ -225,7 +225,7 @@ AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(), ValuesSet(InitValuesSetSize), Values(), StringPool(), SectionMap(), SectionSourceLines(), didInitial(false), shouldEmit(false), - FunctionDbgScope(0), DebugTimer(0) { + FunctionDbgScope(0), DebugTimer(0), LLVMMangler(0) { if (TimePassesIsEnabled) DebugTimer = new Timer("Dwarf Debug Writer", getDwarfTimerGroup()); @@ -787,7 +787,7 @@ GV.getLinkageName(LinkageName); if (!LinkageName.empty()) AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - LinkageName); + LLVMMangler->makeNameProper(LinkageName)); AddType(DW_Unit, GVDie, GV.getType()); if (!GV.isLocalToUnit()) AddUInt(GVDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1); @@ -858,7 +858,7 @@ if (!LinkageName.empty()) AddString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - LinkageName); + LLVMMangler->makeNameProper(LinkageName)); AddSourceLine(SPDie, &SP); @@ -1278,6 +1278,16 @@ SmallVector SPs; CollectDebugInfoAnchors(*M, CUs, GVs, SPs); + LLVMMangler = new Mangler(*M, TAI->getGlobalPrefix()); + // add chars used in ObjC method names so method names aren't mangled + LLVMMangler->markCharAcceptable('['); + LLVMMangler->markCharAcceptable(']'); + LLVMMangler->markCharAcceptable('('); + LLVMMangler->markCharAcceptable(')'); + LLVMMangler->markCharAcceptable('-'); + LLVMMangler->markCharAcceptable('+'); + LLVMMangler->markCharAcceptable(' '); + // Create all the compile unit DIEs. for (SmallVector::iterator I = CUs.begin(), E = CUs.end(); I != E; ++I) @@ -1408,6 +1418,8 @@ if (TimePassesIsEnabled) DebugTimer->stopTimer(); + + delete LLVMMangler; } /// BeginFunction - Gather pre-function debug information. Assumes being Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=75503&r1=75502&r2=75503&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Mon Jul 13 16:19:56 2009 @@ -20,6 +20,7 @@ #include "llvm/CodeGen/MachineLocation.h" #include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Mangler.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/SmallSet.h" @@ -179,7 +180,9 @@ /// DebugTimer - Timer for the Dwarf debug writer. Timer *DebugTimer; - + + Mangler *LLVMMangler; + struct FunctionDebugFrameInfo { unsigned Number; std::vector Moves; From dag at cray.com Mon Jul 13 16:22:25 2009 From: dag at cray.com (David Greene) Date: Mon, 13 Jul 2009 16:22:25 -0500 Subject: [llvm-commits] =?iso-8859-1?q?=5Bllvm=5D_r75490_-_in_/llvm/trunk?= =?iso-8859-1?q?=3A_include/llvm/CodeGen/AsmPrinter=2Eh=09include/llvm/Tar?= =?iso-8859-1?q?get/TargetAsmInfo=2Eh_lib/CodeGen/AsmPrinter/AsmPrinter=2E?= =?iso-8859-1?q?cpp_lib/Target/TargetAsmInfo=2Ecpp_utils/TableGen/AsmWrite?= =?iso-8859-1?q?rEmitter=2Ecpp?= In-Reply-To: <20B337AE-9336-4368-84C1-5899B9F6EA32@apple.com> References: <200907132025.n6DKPnmb032397@zion.cs.uiuc.edu> <200907131540.36214.dag@cray.com> <20B337AE-9336-4368-84C1-5899B9F6EA32@apple.com> Message-ID: <200907131622.25505.dag@cray.com> On Monday 13 July 2009 15:51, Chris Lattner wrote: > > I designed it as a hook because we don't want to keep hacking TableGen > > every time we want to do something new and interesting with asm > > printing. > > Because hacking TableGen is really voodoo. > > Can you remove this piece? I *strongly* prefer "lazy design" rather > than "preemptive design", because sometimes when you finally get to > the place where you need this, you find out that there is a better way > to go. All right. -Dave From dpatel at apple.com Mon Jul 13 16:26:34 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 13 Jul 2009 21:26:34 -0000 Subject: [llvm-commits] [llvm] r75507 - in /llvm/trunk/lib/CodeGen/AsmPrinter: DwarfDebug.cpp DwarfDebug.h Message-ID: <200907132126.n6DLQYnT002069@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jul 13 16:26:33 2009 New Revision: 75507 URL: http://llvm.org/viewvc/llvm-project?rev=75507&view=rev Log: revert rev. 75503 for now. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=75507&r1=75506&r2=75507&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Jul 13 16:26:33 2009 @@ -225,7 +225,7 @@ AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(), ValuesSet(InitValuesSetSize), Values(), StringPool(), SectionMap(), SectionSourceLines(), didInitial(false), shouldEmit(false), - FunctionDbgScope(0), DebugTimer(0), LLVMMangler(0) { + FunctionDbgScope(0), DebugTimer(0) { if (TimePassesIsEnabled) DebugTimer = new Timer("Dwarf Debug Writer", getDwarfTimerGroup()); @@ -787,7 +787,7 @@ GV.getLinkageName(LinkageName); if (!LinkageName.empty()) AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - LLVMMangler->makeNameProper(LinkageName)); + LinkageName); AddType(DW_Unit, GVDie, GV.getType()); if (!GV.isLocalToUnit()) AddUInt(GVDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1); @@ -858,7 +858,7 @@ if (!LinkageName.empty()) AddString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - LLVMMangler->makeNameProper(LinkageName)); + LinkageName); AddSourceLine(SPDie, &SP); @@ -1278,16 +1278,6 @@ SmallVector SPs; CollectDebugInfoAnchors(*M, CUs, GVs, SPs); - LLVMMangler = new Mangler(*M, TAI->getGlobalPrefix()); - // add chars used in ObjC method names so method names aren't mangled - LLVMMangler->markCharAcceptable('['); - LLVMMangler->markCharAcceptable(']'); - LLVMMangler->markCharAcceptable('('); - LLVMMangler->markCharAcceptable(')'); - LLVMMangler->markCharAcceptable('-'); - LLVMMangler->markCharAcceptable('+'); - LLVMMangler->markCharAcceptable(' '); - // Create all the compile unit DIEs. for (SmallVector::iterator I = CUs.begin(), E = CUs.end(); I != E; ++I) @@ -1418,8 +1408,6 @@ if (TimePassesIsEnabled) DebugTimer->stopTimer(); - - delete LLVMMangler; } /// BeginFunction - Gather pre-function debug information. Assumes being Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=75507&r1=75506&r2=75507&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Mon Jul 13 16:26:33 2009 @@ -20,7 +20,6 @@ #include "llvm/CodeGen/MachineLocation.h" #include "llvm/Analysis/DebugInfo.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/Support/Mangler.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/SmallSet.h" @@ -180,9 +179,7 @@ /// DebugTimer - Timer for the Dwarf debug writer. Timer *DebugTimer; - - Mangler *LLVMMangler; - + struct FunctionDebugFrameInfo { unsigned Number; std::vector Moves; From resistor at mac.com Mon Jul 13 16:27:19 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 21:27:19 -0000 Subject: [llvm-commits] [llvm] r75508 - in /llvm/trunk: include/llvm/Constants.h lib/CodeGen/MachOWriter.cpp lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp lib/Target/Mips/MipsISelLowering.cpp lib/Target/TargetAsmInfo.cpp lib/VMCore/Constants.cpp tools/lto/LTOModule.cpp Message-ID: <200907132127.n6DLRKZt002107@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 16:27:19 2009 New Revision: 75508 URL: http://llvm.org/viewvc/llvm-project?rev=75508&view=rev Log: As Chris pointed out, this doesn't actually need an LLVMContext to operate. Modified: llvm/trunk/include/llvm/Constants.h llvm/trunk/lib/CodeGen/MachOWriter.cpp llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp llvm/trunk/lib/Target/TargetAsmInfo.cpp llvm/trunk/lib/VMCore/Constants.cpp llvm/trunk/tools/lto/LTOModule.cpp Modified: llvm/trunk/include/llvm/Constants.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constants.h (original) +++ llvm/trunk/include/llvm/Constants.h Mon Jul 13 16:27:19 2009 @@ -375,7 +375,7 @@ /// isString) and it ends in a null byte \0 and does not contains any other /// @endverbatim /// null bytes except its terminator. - bool isCString(LLVMContext &Context) const; + bool isCString() const; /// getAsString - If this array is isString(), then this method converts the /// array to an std::string and returns it. Otherwise, it asserts out. Modified: llvm/trunk/lib/CodeGen/MachOWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachOWriter.cpp?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachOWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/MachOWriter.cpp Mon Jul 13 16:27:19 2009 @@ -123,7 +123,7 @@ // getConstSection - Get constant section for Constant 'C' MachOSection *MachOWriter::getConstSection(Constant *C) { const ConstantArray *CVA = dyn_cast(C); - if (CVA && CVA->isCString(*Context)) + if (CVA && CVA->isCString()) return getSection("__TEXT", "__cstring", MachOSection::S_CSTRING_LITERALS); Modified: llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp Mon Jul 13 16:27:19 2009 @@ -541,7 +541,7 @@ // Fall Through case GlobalValue::PrivateLinkage: case GlobalValue::InternalLinkage: - if (CVA && CVA->isCString(GVar->getParent()->getContext())) + if (CVA && CVA->isCString()) printSizeAndType = false; break; case GlobalValue::GhostLinkage: Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp (original) +++ llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Mon Jul 13 16:27:19 2009 @@ -227,7 +227,7 @@ if (GVA->hasInitializer() && GV->hasLocalLinkage()) { Constant *C = GVA->getInitializer(); const ConstantArray *CVA = dyn_cast(C); - if (CVA && CVA->isCString(GV->getParent()->getContext())) + if (CVA && CVA->isCString()) return false; } Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Jul 13 16:27:19 2009 @@ -171,11 +171,11 @@ return (C->isNullValue() && !GV->isConstant() && !NoZerosInBSS); } -static bool isConstantString(LLVMContext &Context, const Constant *C) { +static bool isConstantString(const Constant *C) { // First check: is we have constant array of i8 terminated with zero const ConstantArray *CVA = dyn_cast(C); // Check, if initializer is a null-terminated string - if (CVA && CVA->isCString(Context)) + if (CVA && CVA->isCString()) return true; // Another possibility: [1 x i8] zeroinitializer @@ -230,7 +230,7 @@ } } else { // Check, if initializer is a null-terminated string - if (isConstantString(GV->getParent()->getContext(), C)) + if (isConstantString(C)) return SectionKind::RODataMergeStr; else return SectionKind::RODataMergeConst; Modified: llvm/trunk/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Constants.cpp (original) +++ llvm/trunk/lib/VMCore/Constants.cpp Mon Jul 13 16:27:19 2009 @@ -1416,19 +1416,19 @@ /// isCString - This method returns true if the array is a string (see /// isString) and it ends in a null byte \\0 and does not contains any other /// null bytes except its terminator. -bool ConstantArray::isCString(LLVMContext &Context) const { +bool ConstantArray::isCString() const { // Check the element type for i8... if (getType()->getElementType() != Type::Int8Ty) return false; - Constant *Zero = Context.getNullValue(getOperand(0)->getType()); + // Last element must be a null. - if (getOperand(getNumOperands()-1) != Zero) + if (!getOperand(getNumOperands()-1)->isNullValue()) return false; // Other elements must be non-null integers. for (unsigned i = 0, e = getNumOperands()-1; i != e; ++i) { if (!isa(getOperand(i))) return false; - if (getOperand(i) == Zero) + if (getOperand(i)->isNullValue()) return false; } return true; Modified: llvm/trunk/tools/lto/LTOModule.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lto/LTOModule.cpp?rev=75508&r1=75507&r2=75508&view=diff ============================================================================== --- llvm/trunk/tools/lto/LTOModule.cpp (original) +++ llvm/trunk/tools/lto/LTOModule.cpp Mon Jul 13 16:27:19 2009 @@ -189,7 +189,7 @@ if (GlobalVariable* gvn = dyn_cast(op)) { Constant* cn = gvn->getInitializer(); if (ConstantArray* ca = dyn_cast(cn)) { - if ( ca->isCString(getGlobalContext()) ) { + if ( ca->isCString() ) { name = ".objc_class_name_" + ca->getAsString(); return true; } From ofv at wanadoo.es Mon Jul 13 16:35:00 2009 From: ofv at wanadoo.es (Oscar Fuentes) Date: Mon, 13 Jul 2009 21:35:00 -0000 Subject: [llvm-commits] [llvm] r75510 - /llvm/trunk/cmake/modules/TableGen.cmake Message-ID: <200907132135.n6DLZ03h002360@zion.cs.uiuc.edu> Author: ofv Date: Mon Jul 13 16:35:00 2009 New Revision: 75510 URL: http://llvm.org/viewvc/llvm-project?rev=75510&view=rev Log: CMake: tablegen: Add .td files under the inlude/llvm directory hierarchy to the list of dependencies. Modified: llvm/trunk/cmake/modules/TableGen.cmake Modified: llvm/trunk/cmake/modules/TableGen.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/TableGen.cmake?rev=75510&r1=75509&r2=75510&view=diff ============================================================================== --- llvm/trunk/cmake/modules/TableGen.cmake (original) +++ llvm/trunk/cmake/modules/TableGen.cmake Mon Jul 13 16:35:00 2009 @@ -3,14 +3,15 @@ # Adds the name of the generated file to TABLEGEN_OUTPUT. macro(tablegen ofn) - file(GLOB all_tds "*.td") + file(GLOB local_tds "*.td") + file(GLOB_RECURSE global_tds "${LLVM_MAIN_SRC_DIR}/include/llvm/*.td") add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp COMMAND ${LLVM_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${LLVM_MAIN_SRC_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS} -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp - DEPENDS tblgen ${all_tds} + DEPENDS tblgen ${local_tds} ${global_tds} COMMENT "Building ${ofn}.tmp..." ) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn} From gohman at apple.com Mon Jul 13 16:35:55 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 21:35:55 -0000 Subject: [llvm-commits] [llvm] r75511 - in /llvm/trunk: include/llvm/Analysis/ScalarEvolution.h lib/Analysis/ScalarEvolution.cpp test/Transforms/IndVarSimplify/iv-sext.ll Message-ID: <200907132135.n6DLZuY0002406@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 16:35:55 2009 New Revision: 75511 URL: http://llvm.org/viewvc/llvm-project?rev=75511&view=rev Log: Reapply 75252, with a fix to avoid the infinite recursion case. The check for avoiding re-analyzing a widening cast needed to happen earlier, as getSCEV itself may result in a isLoopGuardedByCond query. Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h llvm/trunk/lib/Analysis/ScalarEvolution.cpp llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=75511&r1=75510&r2=75511&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Mon Jul 13 16:35:55 2009 @@ -26,6 +26,7 @@ #include "llvm/Support/DataTypes.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/Allocator.h" +#include "llvm/Support/ConstantRange.h" #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/DenseMap.h" #include @@ -330,12 +331,20 @@ /// found. BasicBlock* getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB); - /// isNecessaryCond - Test whether the given CondValue value is a condition - /// which is at least as strict as the one described by Pred, LHS, and RHS. + /// isNecessaryCond - Test whether the condition described by Pred, LHS, + /// and RHS is a necessary condition for the given Cond value to evaluate + /// to true. bool isNecessaryCond(Value *Cond, ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, bool Inverse); + /// isNecessaryCondOperands - Test whether the condition described by Pred, + /// LHS, and RHS is a necessary condition for the condition described by + /// Pred, FoundLHS, and FoundRHS to evaluate to true. + bool isNecessaryCondOperands(ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS, + const SCEV *FoundLHS, const SCEV *FoundRHS); + /// getConstantEvolutionLoopExitValue - If we know that the specified Phi is /// in the header of its containing loop, we know the loop executes a /// constant number of times, and the PHI node is just a recurrence @@ -495,10 +504,16 @@ /// isLoopGuardedByCond - Test whether entry to the loop is protected by /// a conditional between LHS and RHS. This is used to help avoid max - /// expressions in loop trip counts. + /// expressions in loop trip counts, and to eliminate casts. bool isLoopGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS); + /// isLoopBackedgeGuardedByCond - Test whether the backedge of the loop is + /// protected by a conditional between LHS and RHS. This is used to + /// to eliminate casts. + bool isLoopBackedgeGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS); + /// getBackedgeTakenCount - If the specified loop has a predictable /// backedge-taken count, return it, otherwise return a SCEVCouldNotCompute /// object. The backedge-taken count is the number of times the loop header @@ -534,13 +549,42 @@ /// bitwidth of S. uint32_t GetMinTrailingZeros(const SCEV *S); - /// GetMinLeadingZeros - Determine the minimum number of zero bits that S is - /// guaranteed to begin with (at every loop iteration). - uint32_t GetMinLeadingZeros(const SCEV *S); - - /// GetMinSignBits - Determine the minimum number of sign bits that S is - /// guaranteed to begin with. - uint32_t GetMinSignBits(const SCEV *S); + /// getUnsignedRange - Determine the unsigned range for a particular SCEV. + /// + ConstantRange getUnsignedRange(const SCEV *S); + + /// getSignedRange - Determine the signed range for a particular SCEV. + /// + ConstantRange getSignedRange(const SCEV *S); + + /// isKnownNegative - Test if the given expression is known to be negative. + /// + bool isKnownNegative(const SCEV *S); + + /// isKnownPositive - Test if the given expression is known to be positive. + /// + bool isKnownPositive(const SCEV *S); + + /// isKnownNonNegative - Test if the given expression is known to be + /// non-negative. + /// + bool isKnownNonNegative(const SCEV *S); + + /// isKnownNonPositive - Test if the given expression is known to be + /// non-positive. + /// + bool isKnownNonPositive(const SCEV *S); + + /// isKnownNonZero - Test if the given expression is known to be + /// non-zero. + /// + bool isKnownNonZero(const SCEV *S); + + /// isKnownNonZero - Test if the given expression is known to satisfy + /// the condition described by Pred, LHS, and RHS. + /// + bool isKnownPredicate(ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS); virtual bool runOnFunction(Function &F); virtual void releaseMemory(); Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75511&r1=75510&r2=75511&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 16:35:55 2009 @@ -787,6 +787,11 @@ // this: for (unsigned char X = 0; X < 100; ++X) { int Y = X; } if (const SCEVAddRecExpr *AR = dyn_cast(Op)) if (AR->isAffine()) { + const SCEV *Start = AR->getStart(); + const SCEV *Step = AR->getStepRecurrence(*this); + unsigned BitWidth = getTypeSizeInBits(AR->getType()); + const Loop *L = AR->getLoop(); + // Check whether the backedge-taken count is SCEVCouldNotCompute. // Note that this serves two purposes: It filters out loops that are // simply not analyzable, and it covers the case where this code is @@ -795,12 +800,10 @@ // in infinite recursion. In the later case, the analysis code will // cope with a conservative value, and it will take care to purge // that value once it has finished. - const SCEV *MaxBECount = getMaxBackedgeTakenCount(AR->getLoop()); + const SCEV *MaxBECount = getMaxBackedgeTakenCount(L); if (!isa(MaxBECount)) { // Manually compute the final value for AR, checking for // overflow. - const SCEV *Start = AR->getStart(); - const SCEV *Step = AR->getStepRecurrence(*this); // Check whether the backedge-taken count can be losslessly casted to // the addrec's type. The count is always unsigned. @@ -809,8 +812,7 @@ const SCEV *RecastedMaxBECount = getTruncateOrZeroExtend(CastedMaxBECount, MaxBECount->getType()); if (MaxBECount == RecastedMaxBECount) { - const Type *WideTy = - IntegerType::get(getTypeSizeInBits(Start->getType()) * 2); + const Type *WideTy = IntegerType::get(BitWidth * 2); // Check whether Start+Step*MaxBECount has no unsigned overflow. const SCEV *ZMul = getMulExpr(CastedMaxBECount, @@ -824,7 +826,7 @@ // Return the expression with the addrec on the outside. return getAddRecExpr(getZeroExtendExpr(Start, Ty), getZeroExtendExpr(Step, Ty), - AR->getLoop()); + L); // Similar to above, only this time treat the step value as signed. // This covers loops that count down. @@ -840,7 +842,35 @@ // Return the expression with the addrec on the outside. return getAddRecExpr(getZeroExtendExpr(Start, Ty), getSignExtendExpr(Step, Ty), - AR->getLoop()); + L); + } + + // If the backedge is guarded by a comparison with the pre-inc value + // the addrec is safe. Also, if the entry is guarded by a comparison + // with the start value and the backedge is guarded by a comparison + // with the post-inc value, the addrec is safe. + if (isKnownPositive(Step)) { + const SCEV *N = getConstant(APInt::getMinValue(BitWidth) - + getUnsignedRange(Step).getUnsignedMax()); + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_ULT, AR, N) || + (isLoopGuardedByCond(L, ICmpInst::ICMP_ULT, Start, N) && + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_ULT, + AR->getPostIncExpr(*this), N))) + // Return the expression with the addrec on the outside. + return getAddRecExpr(getZeroExtendExpr(Start, Ty), + getZeroExtendExpr(Step, Ty), + L); + } else if (isKnownNegative(Step)) { + const SCEV *N = getConstant(APInt::getMaxValue(BitWidth) - + getSignedRange(Step).getSignedMin()); + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_UGT, AR, N) && + (isLoopGuardedByCond(L, ICmpInst::ICMP_UGT, Start, N) || + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_UGT, + AR->getPostIncExpr(*this), N))) + // Return the expression with the addrec on the outside. + return getAddRecExpr(getZeroExtendExpr(Start, Ty), + getSignExtendExpr(Step, Ty), + L); } } } @@ -889,6 +919,11 @@ // this: for (signed char X = 0; X < 100; ++X) { int Y = X; } if (const SCEVAddRecExpr *AR = dyn_cast(Op)) if (AR->isAffine()) { + const SCEV *Start = AR->getStart(); + const SCEV *Step = AR->getStepRecurrence(*this); + unsigned BitWidth = getTypeSizeInBits(AR->getType()); + const Loop *L = AR->getLoop(); + // Check whether the backedge-taken count is SCEVCouldNotCompute. // Note that this serves two purposes: It filters out loops that are // simply not analyzable, and it covers the case where this code is @@ -897,12 +932,10 @@ // in infinite recursion. In the later case, the analysis code will // cope with a conservative value, and it will take care to purge // that value once it has finished. - const SCEV *MaxBECount = getMaxBackedgeTakenCount(AR->getLoop()); + const SCEV *MaxBECount = getMaxBackedgeTakenCount(L); if (!isa(MaxBECount)) { // Manually compute the final value for AR, checking for // overflow. - const SCEV *Start = AR->getStart(); - const SCEV *Step = AR->getStepRecurrence(*this); // Check whether the backedge-taken count can be losslessly casted to // the addrec's type. The count is always unsigned. @@ -911,8 +944,7 @@ const SCEV *RecastedMaxBECount = getTruncateOrZeroExtend(CastedMaxBECount, MaxBECount->getType()); if (MaxBECount == RecastedMaxBECount) { - const Type *WideTy = - IntegerType::get(getTypeSizeInBits(Start->getType()) * 2); + const Type *WideTy = IntegerType::get(BitWidth * 2); // Check whether Start+Step*MaxBECount has no signed overflow. const SCEV *SMul = getMulExpr(CastedMaxBECount, @@ -926,7 +958,35 @@ // Return the expression with the addrec on the outside. return getAddRecExpr(getSignExtendExpr(Start, Ty), getSignExtendExpr(Step, Ty), - AR->getLoop()); + L); + } + + // If the backedge is guarded by a comparison with the pre-inc value + // the addrec is safe. Also, if the entry is guarded by a comparison + // with the start value and the backedge is guarded by a comparison + // with the post-inc value, the addrec is safe. + if (isKnownPositive(Step)) { + const SCEV *N = getConstant(APInt::getSignedMinValue(BitWidth) - + getSignedRange(Step).getSignedMax()); + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SLT, AR, N) || + (isLoopGuardedByCond(L, ICmpInst::ICMP_SLT, Start, N) && + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SLT, + AR->getPostIncExpr(*this), N))) + // Return the expression with the addrec on the outside. + return getAddRecExpr(getSignExtendExpr(Start, Ty), + getSignExtendExpr(Step, Ty), + L); + } else if (isKnownNegative(Step)) { + const SCEV *N = getConstant(APInt::getSignedMaxValue(BitWidth) - + getSignedRange(Step).getSignedMin()); + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SGT, AR, N) || + (isLoopGuardedByCond(L, ICmpInst::ICMP_SGT, Start, N) && + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SGT, + AR->getPostIncExpr(*this), N))) + // Return the expression with the addrec on the outside. + return getAddRecExpr(getSignExtendExpr(Start, Ty), + getSignExtendExpr(Step, Ty), + L); } } } @@ -2368,19 +2428,16 @@ const StructLayout &SL = *TD->getStructLayout(STy); unsigned FieldNo = cast(Index)->getZExtValue(); uint64_t Offset = SL.getElementOffset(FieldNo); - TotalOffset = getAddExpr(TotalOffset, - getIntegerSCEV(Offset, IntPtrTy)); + TotalOffset = getAddExpr(TotalOffset, getIntegerSCEV(Offset, IntPtrTy)); } else { // For an array, add the element offset, explicitly scaled. const SCEV *LocalOffset = getSCEV(Index); if (!isa(LocalOffset->getType())) // Getelementptr indicies are signed. - LocalOffset = getTruncateOrSignExtend(LocalOffset, - IntPtrTy); + LocalOffset = getTruncateOrSignExtend(LocalOffset, IntPtrTy); LocalOffset = getMulExpr(LocalOffset, - getIntegerSCEV(TD->getTypeAllocSize(*GTI), - IntPtrTy)); + getIntegerSCEV(TD->getTypeAllocSize(*GTI), IntPtrTy)); TotalOffset = getAddExpr(TotalOffset, LocalOffset); } } @@ -2468,18 +2525,95 @@ return 0; } -uint32_t -ScalarEvolution::GetMinLeadingZeros(const SCEV *S) { - // TODO: Handle other SCEV expression types here. +/// getUnsignedRange - Determine the unsigned range for a particular SCEV. +/// +ConstantRange +ScalarEvolution::getUnsignedRange(const SCEV *S) { if (const SCEVConstant *C = dyn_cast(S)) - return C->getValue()->getValue().countLeadingZeros(); + return ConstantRange(C->getValue()->getValue()); + + if (const SCEVAddExpr *Add = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(Add->getOperand(0)); + for (unsigned i = 1, e = Add->getNumOperands(); i != e; ++i) + X = X.add(getUnsignedRange(Add->getOperand(i))); + return X; + } + + if (const SCEVMulExpr *Mul = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(Mul->getOperand(0)); + for (unsigned i = 1, e = Mul->getNumOperands(); i != e; ++i) + X = X.multiply(getUnsignedRange(Mul->getOperand(i))); + return X; + } + + if (const SCEVSMaxExpr *SMax = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(SMax->getOperand(0)); + for (unsigned i = 1, e = SMax->getNumOperands(); i != e; ++i) + X = X.smax(getUnsignedRange(SMax->getOperand(i))); + return X; + } + + if (const SCEVUMaxExpr *UMax = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(UMax->getOperand(0)); + for (unsigned i = 1, e = UMax->getNumOperands(); i != e; ++i) + X = X.umax(getUnsignedRange(UMax->getOperand(i))); + return X; + } + + if (const SCEVUDivExpr *UDiv = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(UDiv->getLHS()); + ConstantRange Y = getUnsignedRange(UDiv->getRHS()); + return X.udiv(Y); + } + + if (const SCEVZeroExtendExpr *ZExt = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(ZExt->getOperand()); + return X.zeroExtend(cast(ZExt->getType())->getBitWidth()); + } + + if (const SCEVSignExtendExpr *SExt = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(SExt->getOperand()); + return X.signExtend(cast(SExt->getType())->getBitWidth()); + } + + if (const SCEVTruncateExpr *Trunc = dyn_cast(S)) { + ConstantRange X = getUnsignedRange(Trunc->getOperand()); + return X.truncate(cast(Trunc->getType())->getBitWidth()); + } + + ConstantRange FullSet(getTypeSizeInBits(S->getType()), true); - if (const SCEVZeroExtendExpr *C = dyn_cast(S)) { - // A zero-extension cast adds zero bits. - return GetMinLeadingZeros(C->getOperand()) + - (getTypeSizeInBits(C->getType()) - - getTypeSizeInBits(C->getOperand()->getType())); + if (const SCEVAddRecExpr *AddRec = dyn_cast(S)) { + const SCEV *T = getBackedgeTakenCount(AddRec->getLoop()); + const SCEVConstant *Trip = dyn_cast(T); + if (!Trip) return FullSet; + + // TODO: non-affine addrec + if (AddRec->isAffine()) { + const Type *Ty = AddRec->getType(); + const SCEV *MaxBECount = getMaxBackedgeTakenCount(AddRec->getLoop()); + if (getTypeSizeInBits(MaxBECount->getType()) <= getTypeSizeInBits(Ty)) { + MaxBECount = getNoopOrZeroExtend(MaxBECount, Ty); + + const SCEV *Start = AddRec->getStart(); + const SCEV *End = AddRec->evaluateAtIteration(MaxBECount, *this); + + // Check for overflow. + if (!isKnownPredicate(ICmpInst::ICMP_ULE, Start, End)) + return FullSet; + + ConstantRange StartRange = getUnsignedRange(Start); + ConstantRange EndRange = getUnsignedRange(End); + APInt Min = APIntOps::umin(StartRange.getUnsignedMin(), + EndRange.getUnsignedMin()); + APInt Max = APIntOps::umax(StartRange.getUnsignedMax(), + EndRange.getUnsignedMax()); + if (Min.isMinValue() && Max.isMaxValue()) + return ConstantRange(Min.getBitWidth(), /*isFullSet=*/true); + return ConstantRange(Min, Max+1); + } + } } if (const SCEVUnknown *U = dyn_cast(S)) { @@ -2488,67 +2622,119 @@ APInt Mask = APInt::getAllOnesValue(BitWidth); APInt Zeros(BitWidth, 0), Ones(BitWidth, 0); ComputeMaskedBits(U->getValue(), Mask, Zeros, Ones, TD); - return Zeros.countLeadingOnes(); + return ConstantRange(Ones, ~Zeros); } - return 1; + return FullSet; } -uint32_t -ScalarEvolution::GetMinSignBits(const SCEV *S) { - // TODO: Handle other SCEV expression types here. +/// getSignedRange - Determine the signed range for a particular SCEV. +/// +ConstantRange +ScalarEvolution::getSignedRange(const SCEV *S) { + + if (const SCEVConstant *C = dyn_cast(S)) + return ConstantRange(C->getValue()->getValue()); - if (const SCEVConstant *C = dyn_cast(S)) { - const APInt &A = C->getValue()->getValue(); - return A.isNegative() ? A.countLeadingOnes() : - A.countLeadingZeros(); + if (const SCEVAddExpr *Add = dyn_cast(S)) { + ConstantRange X = getSignedRange(Add->getOperand(0)); + for (unsigned i = 1, e = Add->getNumOperands(); i != e; ++i) + X = X.add(getSignedRange(Add->getOperand(i))); + return X; } - if (const SCEVSignExtendExpr *C = dyn_cast(S)) { - // A sign-extension cast adds sign bits. - return GetMinSignBits(C->getOperand()) + - (getTypeSizeInBits(C->getType()) - - getTypeSizeInBits(C->getOperand()->getType())); + if (const SCEVMulExpr *Mul = dyn_cast(S)) { + ConstantRange X = getSignedRange(Mul->getOperand(0)); + for (unsigned i = 1, e = Mul->getNumOperands(); i != e; ++i) + X = X.multiply(getSignedRange(Mul->getOperand(i))); + return X; } - if (const SCEVAddExpr *A = dyn_cast(S)) { - unsigned BitWidth = getTypeSizeInBits(A->getType()); + if (const SCEVSMaxExpr *SMax = dyn_cast(S)) { + ConstantRange X = getSignedRange(SMax->getOperand(0)); + for (unsigned i = 1, e = SMax->getNumOperands(); i != e; ++i) + X = X.smax(getSignedRange(SMax->getOperand(i))); + return X; + } - // Special case decrementing a value (ADD X, -1): - if (const SCEVConstant *CRHS = dyn_cast(A->getOperand(0))) - if (CRHS->isAllOnesValue()) { - SmallVector OtherOps(A->op_begin() + 1, A->op_end()); - const SCEV *OtherOpsAdd = getAddExpr(OtherOps); - unsigned LZ = GetMinLeadingZeros(OtherOpsAdd); - - // If the input is known to be 0 or 1, the output is 0/-1, which is all - // sign bits set. - if (LZ == BitWidth - 1) - return BitWidth; - - // If we are subtracting one from a positive number, there is no carry - // out of the result. - if (LZ > 0) - return GetMinSignBits(OtherOpsAdd); - } - - // Add can have at most one carry bit. Thus we know that the output - // is, at worst, one more bit than the inputs. - unsigned Min = BitWidth; - for (unsigned i = 0, e = A->getNumOperands(); i != e; ++i) { - unsigned N = GetMinSignBits(A->getOperand(i)); - Min = std::min(Min, N) - 1; - if (Min == 0) return 1; + if (const SCEVUMaxExpr *UMax = dyn_cast(S)) { + ConstantRange X = getSignedRange(UMax->getOperand(0)); + for (unsigned i = 1, e = UMax->getNumOperands(); i != e; ++i) + X = X.umax(getSignedRange(UMax->getOperand(i))); + return X; + } + + if (const SCEVUDivExpr *UDiv = dyn_cast(S)) { + ConstantRange X = getSignedRange(UDiv->getLHS()); + ConstantRange Y = getSignedRange(UDiv->getRHS()); + return X.udiv(Y); + } + + if (const SCEVZeroExtendExpr *ZExt = dyn_cast(S)) { + ConstantRange X = getSignedRange(ZExt->getOperand()); + return X.zeroExtend(cast(ZExt->getType())->getBitWidth()); + } + + if (const SCEVSignExtendExpr *SExt = dyn_cast(S)) { + ConstantRange X = getSignedRange(SExt->getOperand()); + return X.signExtend(cast(SExt->getType())->getBitWidth()); + } + + if (const SCEVTruncateExpr *Trunc = dyn_cast(S)) { + ConstantRange X = getSignedRange(Trunc->getOperand()); + return X.truncate(cast(Trunc->getType())->getBitWidth()); + } + + ConstantRange FullSet(getTypeSizeInBits(S->getType()), true); + + if (const SCEVAddRecExpr *AddRec = dyn_cast(S)) { + const SCEV *T = getBackedgeTakenCount(AddRec->getLoop()); + const SCEVConstant *Trip = dyn_cast(T); + if (!Trip) return FullSet; + + // TODO: non-affine addrec + if (AddRec->isAffine()) { + const Type *Ty = AddRec->getType(); + const SCEV *MaxBECount = getMaxBackedgeTakenCount(AddRec->getLoop()); + if (getTypeSizeInBits(MaxBECount->getType()) <= getTypeSizeInBits(Ty)) { + MaxBECount = getNoopOrZeroExtend(MaxBECount, Ty); + + const SCEV *Start = AddRec->getStart(); + const SCEV *Step = AddRec->getStepRecurrence(*this); + const SCEV *End = AddRec->evaluateAtIteration(MaxBECount, *this); + + // Check for overflow. + if (!(isKnownPositive(Step) && + isKnownPredicate(ICmpInst::ICMP_SLT, Start, End)) && + !(isKnownNegative(Step) && + isKnownPredicate(ICmpInst::ICMP_SGT, Start, End))) + return FullSet; + + ConstantRange StartRange = getSignedRange(Start); + ConstantRange EndRange = getSignedRange(End); + APInt Min = APIntOps::smin(StartRange.getSignedMin(), + EndRange.getSignedMin()); + APInt Max = APIntOps::smax(StartRange.getSignedMax(), + EndRange.getSignedMax()); + if (Min.isMinSignedValue() && Max.isMaxSignedValue()) + return ConstantRange(Min.getBitWidth(), /*isFullSet=*/true); + return ConstantRange(Min, Max+1); + } } - return 1; } if (const SCEVUnknown *U = dyn_cast(S)) { // For a SCEVUnknown, ask ValueTracking. - return ComputeNumSignBits(U->getValue(), TD); + unsigned BitWidth = getTypeSizeInBits(U->getType()); + unsigned NS = ComputeNumSignBits(U->getValue(), TD); + if (NS == 1) + return FullSet; + return + ConstantRange(APInt::getSignedMinValue(BitWidth).ashr(NS - 1), + APInt::getSignedMaxValue(BitWidth).ashr(NS - 1)+1); } - return 1; + return FullSet; } /// createSCEV - We know that there is no SCEV for the specified value. @@ -3628,7 +3814,7 @@ if (!isSCEVable(Op->getType())) return V; - const SCEV *OpV = getSCEVAtScope(getSCEV(Op), L); + const SCEV* OpV = getSCEVAtScope(Op, L); if (const SCEVConstant *SC = dyn_cast(OpV)) { Constant *C = SC->getValue(); if (C->getType() != Op->getType()) @@ -4029,12 +4215,176 @@ return false; } -/// isLoopGuardedByCond - Test whether entry to the loop is protected by -/// a conditional between LHS and RHS. This is used to help avoid max -/// expressions in loop trip counts. -bool ScalarEvolution::isLoopGuardedByCond(const Loop *L, - ICmpInst::Predicate Pred, - const SCEV *LHS, const SCEV *RHS) { +bool ScalarEvolution::isKnownNegative(const SCEV *S) { + return getSignedRange(S).getSignedMax().isNegative(); +} + +bool ScalarEvolution::isKnownPositive(const SCEV *S) { + return getSignedRange(S).getSignedMin().isStrictlyPositive(); +} + +bool ScalarEvolution::isKnownNonNegative(const SCEV *S) { + return !getSignedRange(S).getSignedMin().isNegative(); +} + +bool ScalarEvolution::isKnownNonPositive(const SCEV *S) { + return !getSignedRange(S).getSignedMax().isStrictlyPositive(); +} + +bool ScalarEvolution::isKnownNonZero(const SCEV *S) { + return isKnownNegative(S) || isKnownPositive(S); +} + +bool ScalarEvolution::isKnownPredicate(ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS) { + + if (HasSameValue(LHS, RHS)) + return ICmpInst::isTrueWhenEqual(Pred); + + switch (Pred) { + default: + assert(0 && "Unexpected ICmpInst::Predicate value!"); + break; + case ICmpInst::ICMP_SGT: + Pred = ICmpInst::ICMP_SLT; + std::swap(LHS, RHS); + case ICmpInst::ICMP_SLT: { + ConstantRange LHSRange = getSignedRange(LHS); + ConstantRange RHSRange = getSignedRange(RHS); + if (LHSRange.getSignedMax().slt(RHSRange.getSignedMin())) + return true; + if (LHSRange.getSignedMin().sge(RHSRange.getSignedMax())) + return false; + + const SCEV *Diff = getMinusSCEV(LHS, RHS); + ConstantRange DiffRange = getUnsignedRange(Diff); + if (isKnownNegative(Diff)) { + if (DiffRange.getUnsignedMax().ult(LHSRange.getUnsignedMin())) + return true; + if (DiffRange.getUnsignedMin().uge(LHSRange.getUnsignedMax())) + return false; + } else if (isKnownPositive(Diff)) { + if (LHSRange.getUnsignedMax().ult(DiffRange.getUnsignedMin())) + return true; + if (LHSRange.getUnsignedMin().uge(DiffRange.getUnsignedMax())) + return false; + } + break; + } + case ICmpInst::ICMP_SGE: + Pred = ICmpInst::ICMP_SLE; + std::swap(LHS, RHS); + case ICmpInst::ICMP_SLE: { + ConstantRange LHSRange = getSignedRange(LHS); + ConstantRange RHSRange = getSignedRange(RHS); + if (LHSRange.getSignedMax().sle(RHSRange.getSignedMin())) + return true; + if (LHSRange.getSignedMin().sgt(RHSRange.getSignedMax())) + return false; + + const SCEV *Diff = getMinusSCEV(LHS, RHS); + ConstantRange DiffRange = getUnsignedRange(Diff); + if (isKnownNonPositive(Diff)) { + if (DiffRange.getUnsignedMax().ule(LHSRange.getUnsignedMin())) + return true; + if (DiffRange.getUnsignedMin().ugt(LHSRange.getUnsignedMax())) + return false; + } else if (isKnownNonNegative(Diff)) { + if (LHSRange.getUnsignedMax().ule(DiffRange.getUnsignedMin())) + return true; + if (LHSRange.getUnsignedMin().ugt(DiffRange.getUnsignedMax())) + return false; + } + break; + } + case ICmpInst::ICMP_UGT: + Pred = ICmpInst::ICMP_ULT; + std::swap(LHS, RHS); + case ICmpInst::ICMP_ULT: { + ConstantRange LHSRange = getUnsignedRange(LHS); + ConstantRange RHSRange = getUnsignedRange(RHS); + if (LHSRange.getUnsignedMax().ult(RHSRange.getUnsignedMin())) + return true; + if (LHSRange.getUnsignedMin().uge(RHSRange.getUnsignedMax())) + return false; + + const SCEV *Diff = getMinusSCEV(LHS, RHS); + ConstantRange DiffRange = getUnsignedRange(Diff); + if (LHSRange.getUnsignedMax().ult(DiffRange.getUnsignedMin())) + return true; + if (LHSRange.getUnsignedMin().uge(DiffRange.getUnsignedMax())) + return false; + break; + } + case ICmpInst::ICMP_UGE: + Pred = ICmpInst::ICMP_ULE; + std::swap(LHS, RHS); + case ICmpInst::ICMP_ULE: { + ConstantRange LHSRange = getUnsignedRange(LHS); + ConstantRange RHSRange = getUnsignedRange(RHS); + if (LHSRange.getUnsignedMax().ule(RHSRange.getUnsignedMin())) + return true; + if (LHSRange.getUnsignedMin().ugt(RHSRange.getUnsignedMax())) + return false; + + const SCEV *Diff = getMinusSCEV(LHS, RHS); + ConstantRange DiffRange = getUnsignedRange(Diff); + if (LHSRange.getUnsignedMax().ule(DiffRange.getUnsignedMin())) + return true; + if (LHSRange.getUnsignedMin().ugt(DiffRange.getUnsignedMax())) + return false; + break; + } + case ICmpInst::ICMP_NE: { + if (getUnsignedRange(LHS).intersectWith(getUnsignedRange(RHS)).isEmptySet()) + return true; + if (getSignedRange(LHS).intersectWith(getSignedRange(RHS)).isEmptySet()) + return true; + + const SCEV *Diff = getMinusSCEV(LHS, RHS); + if (isKnownNonZero(Diff)) + return true; + break; + } + case ICmpInst::ICMP_EQ: + break; + } + return false; +} + +/// isLoopBackedgeGuardedByCond - Test whether the backedge of the loop is +/// protected by a conditional between LHS and RHS. This is used to +/// to eliminate casts. +bool +ScalarEvolution::isLoopBackedgeGuardedByCond(const Loop *L, + ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS) { + // Interpret a null as meaning no loop, where there is obviously no guard + // (interprocedural conditions notwithstanding). + if (!L) return true; + + BasicBlock *Latch = L->getLoopLatch(); + if (!Latch) + return false; + + BranchInst *LoopContinuePredicate = + dyn_cast(Latch->getTerminator()); + if (!LoopContinuePredicate || + LoopContinuePredicate->isUnconditional()) + return false; + + return + isNecessaryCond(LoopContinuePredicate->getCondition(), Pred, LHS, RHS, + LoopContinuePredicate->getSuccessor(0) != L->getHeader()); +} + +/// isLoopGuardedByCond - Test whether entry to the loop is protected +/// by a conditional between LHS and RHS. This is used to help avoid max +/// expressions in loop trip counts, and to eliminate casts. +bool +ScalarEvolution::isLoopGuardedByCond(const Loop *L, + ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS) { // Interpret a null as meaning no loop, where there is obviously no guard // (interprocedural conditions notwithstanding). if (!L) return false; @@ -4063,8 +4413,9 @@ return false; } -/// isNecessaryCond - Test whether the given CondValue value is a condition -/// which is at least as strict as the one described by Pred, LHS, and RHS. +/// isNecessaryCond - Test whether the condition described by Pred, LHS, +/// and RHS is a necessary condition for the given Cond value to evaluate +/// to true. bool ScalarEvolution::isNecessaryCond(Value *CondValue, ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, @@ -4089,30 +4440,35 @@ // see if it is the comparison we are looking for. Value *PreCondLHS = ICI->getOperand(0); Value *PreCondRHS = ICI->getOperand(1); - ICmpInst::Predicate Cond; + ICmpInst::Predicate FoundPred; if (Inverse) - Cond = ICI->getInversePredicate(); + FoundPred = ICI->getInversePredicate(); else - Cond = ICI->getPredicate(); + FoundPred = ICI->getPredicate(); - if (Cond == Pred) + if (FoundPred == Pred) ; // An exact match. - else if (!ICmpInst::isTrueWhenEqual(Cond) && Pred == ICmpInst::ICMP_NE) - ; // The actual condition is beyond sufficient. - else + else if (!ICmpInst::isTrueWhenEqual(FoundPred) && Pred == ICmpInst::ICMP_NE) { + // The actual condition is beyond sufficient. + FoundPred = ICmpInst::ICMP_NE; + // NE is symmetric but the original comparison may not be. Swap + // the operands if necessary so that they match below. + if (isa(LHS)) + std::swap(PreCondLHS, PreCondRHS); + } else // Check a few special cases. - switch (Cond) { + switch (FoundPred) { case ICmpInst::ICMP_UGT: if (Pred == ICmpInst::ICMP_ULT) { std::swap(PreCondLHS, PreCondRHS); - Cond = ICmpInst::ICMP_ULT; + FoundPred = ICmpInst::ICMP_ULT; break; } return false; case ICmpInst::ICMP_SGT: if (Pred == ICmpInst::ICMP_SLT) { std::swap(PreCondLHS, PreCondRHS); - Cond = ICmpInst::ICMP_SLT; + FoundPred = ICmpInst::ICMP_SLT; break; } return false; @@ -4121,8 +4477,8 @@ // so check for this case by checking if the NE is comparing against // a minimum or maximum constant. if (!ICmpInst::isTrueWhenEqual(Pred)) - if (ConstantInt *CI = dyn_cast(PreCondRHS)) { - const APInt &A = CI->getValue(); + if (const SCEVConstant *C = dyn_cast(RHS)) { + const APInt &A = C->getValue()->getValue(); switch (Pred) { case ICmpInst::ICMP_SLT: if (A.isMaxSignedValue()) break; @@ -4139,7 +4495,7 @@ default: return false; } - Cond = ICmpInst::ICMP_NE; + FoundPred = Pred; // NE is symmetric but the original comparison may not be. Swap // the operands if necessary so that they match below. if (isa(LHS)) @@ -4152,14 +4508,73 @@ return false; } - if (!PreCondLHS->getType()->isInteger()) return false; + assert(Pred == FoundPred && "Conditions were not reconciled!"); + + // Bail if the ICmp's operands' types are wider than the needed type + // before attempting to call getSCEV on them. This avoids infinite + // recursion, since the analysis of widening casts can require loop + // exit condition information for overflow checking, which would + // lead back here. + if (getTypeSizeInBits(LHS->getType()) < + getTypeSizeInBits(PreCondLHS->getType())) + return false; + + const SCEV *FoundLHS = getSCEV(PreCondLHS); + const SCEV *FoundRHS = getSCEV(PreCondRHS); + + // Balance the types. The case where FoundLHS' type is wider than + // LHS' type is checked for above. + if (getTypeSizeInBits(LHS->getType()) > + getTypeSizeInBits(FoundLHS->getType())) { + if (CmpInst::isSigned(Pred)) { + FoundLHS = getSignExtendExpr(FoundLHS, LHS->getType()); + FoundRHS = getSignExtendExpr(FoundRHS, LHS->getType()); + } else { + FoundLHS = getZeroExtendExpr(FoundLHS, LHS->getType()); + FoundRHS = getZeroExtendExpr(FoundRHS, LHS->getType()); + } + } + + return isNecessaryCondOperands(Pred, LHS, RHS, + FoundLHS, FoundRHS) || + // ~x < ~y --> x > y + isNecessaryCondOperands(Pred, LHS, RHS, + getNotSCEV(FoundRHS), getNotSCEV(FoundLHS)); +} + +/// isNecessaryCondOperands - Test whether the condition described by Pred, +/// LHS, and RHS is a necessary condition for the condition described by +/// Pred, FoundLHS, and FoundRHS to evaluate to true. +bool +ScalarEvolution::isNecessaryCondOperands(ICmpInst::Predicate Pred, + const SCEV *LHS, const SCEV *RHS, + const SCEV *FoundLHS, + const SCEV *FoundRHS) { + switch (Pred) { + default: break; + case ICmpInst::ICMP_SLT: + if (isKnownPredicate(ICmpInst::ICMP_SLE, LHS, FoundLHS) && + isKnownPredicate(ICmpInst::ICMP_SGE, RHS, FoundRHS)) + return true; + break; + case ICmpInst::ICMP_SGT: + if (isKnownPredicate(ICmpInst::ICMP_SGE, LHS, FoundLHS) && + isKnownPredicate(ICmpInst::ICMP_SLE, RHS, FoundRHS)) + return true; + break; + case ICmpInst::ICMP_ULT: + if (isKnownPredicate(ICmpInst::ICMP_ULE, LHS, FoundLHS) && + isKnownPredicate(ICmpInst::ICMP_UGE, RHS, FoundRHS)) + return true; + break; + case ICmpInst::ICMP_UGT: + if (isKnownPredicate(ICmpInst::ICMP_UGE, LHS, FoundLHS) && + isKnownPredicate(ICmpInst::ICMP_ULE, RHS, FoundRHS)) + return true; + break; + } - const SCEV *PreCondLHSSCEV = getSCEV(PreCondLHS); - const SCEV *PreCondRHSSCEV = getSCEV(PreCondRHS); - return (HasSameValue(LHS, PreCondLHSSCEV) && - HasSameValue(RHS, PreCondRHSSCEV)) || - (HasSameValue(LHS, getNotSCEV(PreCondRHSSCEV)) && - HasSameValue(RHS, getNotSCEV(PreCondLHSSCEV))); + return false; } /// getBECount - Subtract the end and start values and divide by the step, @@ -4180,9 +4595,9 @@ // Check Add for unsigned overflow. // TODO: More sophisticated things could be done here. const Type *WideTy = Context->getIntegerType(getTypeSizeInBits(Ty) + 1); - const SCEV *OperandExtendedAdd = - getAddExpr(getZeroExtendExpr(Diff, WideTy), - getZeroExtendExpr(RoundUp, WideTy)); + const SCEV *EDiff = getZeroExtendExpr(Diff, WideTy); + const SCEV *ERoundUp = getZeroExtendExpr(RoundUp, WideTy); + const SCEV *OperandExtendedAdd = getAddExpr(EDiff, ERoundUp); if (getZeroExtendExpr(Add, WideTy) != OperandExtendedAdd) return getCouldNotCompute(); @@ -4244,9 +4659,9 @@ const SCEV *Start = AddRec->getOperand(0); // Determine the minimum constant start value. - const SCEV *MinStart = isa(Start) ? Start : - getConstant(isSigned ? APInt::getSignedMinValue(BitWidth) : - APInt::getMinValue(BitWidth)); + const SCEV *MinStart = getConstant(isSigned ? + getSignedRange(Start).getSignedMin() : + getUnsignedRange(Start).getUnsignedMin()); // If we know that the condition is true in order to enter the loop, // then we know that it will run exactly (m-n)/s times. Otherwise, we @@ -4254,18 +4669,16 @@ // the division must round up. const SCEV *End = RHS; if (!isLoopGuardedByCond(L, - isSigned ? ICmpInst::ICMP_SLT : ICmpInst::ICMP_ULT, + isSigned ? ICmpInst::ICMP_SLT : + ICmpInst::ICMP_ULT, getMinusSCEV(Start, Step), RHS)) End = isSigned ? getSMaxExpr(RHS, Start) : getUMaxExpr(RHS, Start); // Determine the maximum constant end value. - const SCEV *MaxEnd = - isa(End) ? End : - getConstant(isSigned ? APInt::getSignedMaxValue(BitWidth) - .ashr(GetMinSignBits(End) - 1) : - APInt::getMaxValue(BitWidth) - .lshr(GetMinLeadingZeros(End))); + const SCEV *MaxEnd = getConstant(isSigned ? + getSignedRange(End).getSignedMax() : + getUnsignedRange(End).getUnsignedMax()); // Finally, we subtract these two values and divide, rounding up, to get // the number of times the backedge is executed. Modified: llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll?rev=75511&r1=75510&r2=75511&view=diff ============================================================================== --- llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll (original) +++ llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll Mon Jul 13 16:35:55 2009 @@ -1,7 +1,6 @@ ; RUN: llvm-as < %s | opt -indvars | llvm-dis > %t ; RUN: grep {= sext} %t | count 4 ; RUN: grep {phi i64} %t | count 2 -; XFAIL: * ; Indvars should be able to promote the hiPart induction variable in the ; inner loop to i64. From sabre at nondot.org Mon Jul 13 16:41:08 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 21:41:08 -0000 Subject: [llvm-commits] [llvm] r75512 - in /llvm/trunk/lib/Target/X86/AsmPrinter: X86ATTAsmPrinter.cpp X86ATTAsmPrinter.h Message-ID: <200907132141.n6DLf8ls002575@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 16:41:08 2009 New Revision: 75512 URL: http://llvm.org/viewvc/llvm-project?rev=75512&view=rev Log: refactor symbol printing so the whole "mem" thing is handled in fewer places. Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75512&r1=75511&r2=75512&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 13 16:41:08 2009 @@ -372,56 +372,26 @@ } } -void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, - const char *Modifier) { - const MachineOperand &MO = MI->getOperand(OpNo); - switch (MO.getType()) { - default: LLVM_UNREACHABLE( "unknown operand type!"); - case MachineOperand::MO_Register: { - assert(TargetRegisterInfo::isPhysicalRegister(MO.getReg()) && - "Virtual registers should not make it this far!"); - O << '%'; - unsigned Reg = MO.getReg(); - if (Modifier && strncmp(Modifier, "subreg", strlen("subreg")) == 0) { - MVT VT = (strcmp(Modifier+6,"64") == 0) ? - MVT::i64 : ((strcmp(Modifier+6, "32") == 0) ? MVT::i32 : - ((strcmp(Modifier+6,"16") == 0) ? MVT::i16 : MVT::i8)); - Reg = getX86SubSuperRegister(Reg, VT); - } - O << TRI->getAsmName(Reg); - return; - } - case MachineOperand::MO_Immediate: - if (!Modifier || strcmp(Modifier, "mem")) - O << '$'; - O << MO.getImm(); - return; +void X86ATTAsmPrinter::printSymbolOperand(const MachineOperand &MO) { + switch (MO.getType()) { + default: LLVM_UNREACHABLE("unknown symbol type!"); case MachineOperand::MO_JumpTableIndex: { - bool isMemOp = Modifier && !strcmp(Modifier, "mem"); - if (!isMemOp) O << '$'; O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_' << MO.getIndex(); break; } case MachineOperand::MO_ConstantPoolIndex: { - bool isMemOp = Modifier && !strcmp(Modifier, "mem"); - if (!isMemOp) O << '$'; O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_' << MO.getIndex(); - printOffset(MO.getOffset()); break; } case MachineOperand::MO_GlobalAddress: { - bool isMemOp = Modifier && !strcmp(Modifier, "mem"); - if (!isMemOp) - O << '$'; - const GlobalValue *GV = MO.getGlobal(); std::string Name = Mang->getValueName(GV); decorateName(Name, GV); - + bool needCloseParen = false; if (Name[0] == '$') { // The name begins with a dollar-sign. In order to avoid having it look @@ -429,7 +399,7 @@ O << '('; needCloseParen = true; } - + // Handle dllimport linkage. if (MO.getTargetFlags() == X86II::MO_DLLIMPORT) { O << "__imp_" << Name; @@ -447,7 +417,7 @@ } else { O << Name; } - + if (needCloseParen) O << ')'; @@ -463,9 +433,6 @@ /// by _GLOBAL_OFFSET_TABLE_ on X86-32. All others are call operands, which /// are pcrel_imm's. assert(!Subtarget->is64Bit()); - // These are never used as memory operands. - assert(Modifier == 0 || strcmp(Modifier, "mem")); - O << '$'; O << TAI->getGlobalPrefix(); O << MO.getSymbolName(); break; @@ -503,6 +470,44 @@ } } + +void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, + const char *Modifier) { + const MachineOperand &MO = MI->getOperand(OpNo); + switch (MO.getType()) { + default: LLVM_UNREACHABLE("unknown operand type!"); + case MachineOperand::MO_Register: { + assert(TargetRegisterInfo::isPhysicalRegister(MO.getReg()) && + "Virtual registers should not make it this far!"); + O << '%'; + unsigned Reg = MO.getReg(); + if (Modifier && strncmp(Modifier, "subreg", strlen("subreg")) == 0) { + MVT VT = (strcmp(Modifier+6,"64") == 0) ? + MVT::i64 : ((strcmp(Modifier+6, "32") == 0) ? MVT::i32 : + ((strcmp(Modifier+6,"16") == 0) ? MVT::i16 : MVT::i8)); + Reg = getX86SubSuperRegister(Reg, VT); + } + O << TRI->getAsmName(Reg); + return; + } + + case MachineOperand::MO_Immediate: + O << '$' << MO.getImm(); + return; + + case MachineOperand::MO_JumpTableIndex: + case MachineOperand::MO_ConstantPoolIndex: + case MachineOperand::MO_GlobalAddress: + case MachineOperand::MO_ExternalSymbol: { + bool isMemOp = Modifier && !strcmp(Modifier, "mem"); + if (!isMemOp) O << '$'; + + printSymbolOperand(MO); + break; + } + } +} + void X86ATTAsmPrinter::printSSECC(const MachineInstr *MI, unsigned Op) { unsigned char value = MI->getOperand(Op).getImm(); assert(value <= 7 && "Invalid ssecc argument!"); @@ -659,7 +664,10 @@ switch (ExtraCode[0]) { default: return true; // Unknown modifier. case 'c': // Don't print "$" before a global var name or constant. - printOperand(MI, OpNo, "mem"); + if (MI->getOperand(OpNo).isImm()) + O << MI->getOperand(OpNo).getImm(); + else + printOperand(MI, OpNo, "mem"); return false; case 'A': // Print '*' before a register (it must be a register) Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h?rev=75512&r1=75511&r2=75512&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h Mon Jul 13 16:41:08 2009 @@ -73,6 +73,7 @@ // New MCInst printing stuff. bool printInstruction(const MCInst *MI); + void printSymbolOperand(const MachineOperand &MO); void printOperand(const MCInst *MI, unsigned OpNo, const char *Modifier = 0); void printMemReference(const MCInst *MI, unsigned Op); From david_goodwin at apple.com Mon Jul 13 16:43:08 2009 From: david_goodwin at apple.com (David Goodwin) Date: Mon, 13 Jul 2009 21:43:08 -0000 Subject: [llvm-commits] [llvm] r75513 - /llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Message-ID: <200907132143.n6DLh9Jb002648@zion.cs.uiuc.edu> Author: david_goodwin Date: Mon Jul 13 16:43:08 2009 New Revision: 75513 URL: http://llvm.org/viewvc/llvm-project?rev=75513&view=rev Log: Fix FP elimination code to work for Thumb-2 addrmode AddrModeT2_so. This fixes SingleSource/Benchmarks/Stanford/Queens (among others). Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp?rev=75513&r1=75512&r2=75513&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Mon Jul 13 16:43:08 2009 @@ -1121,18 +1121,22 @@ break; } case ARMII::AddrModeT2_i12: { - ImmIdx = i+2; + ImmIdx = i+1; InstrOffs = MI.getOperand(ImmIdx).getImm(); NumBits = 12; break; } - case ARMII::AddrModeT2_so: case ARMII::AddrModeT2_i8: { - ImmIdx = i+2; + ImmIdx = i+1; InstrOffs = MI.getOperand(ImmIdx).getImm(); NumBits = 8; break; } + case ARMII::AddrModeT2_so: { + ImmIdx = i+2; + InstrOffs = MI.getOperand(ImmIdx).getImm(); + break; + } default: LLVM_UNREACHABLE("Unsupported addressing mode!"); break; From eli.friedman at gmail.com Mon Jul 13 16:45:57 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 21:45:57 -0000 Subject: [llvm-commits] [llvm] r75514 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200907132145.n6DLjwtW002767@zion.cs.uiuc.edu> Author: efriedma Date: Mon Jul 13 16:45:57 2009 New Revision: 75514 URL: http://llvm.org/viewvc/llvm-project?rev=75514&view=rev Log: Misc simplifications to InstCombiner::commonIntCastTransforms. Most of the changes are allowed by not calling this function for bitcasts. The Instruction::AShr case is dead because SimplifyDemandedInstructionBits handles that case. Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75514&r1=75513&r2=75514&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 16:45:57 2009 @@ -8288,11 +8288,10 @@ // Attempt to propagate the cast into the instruction for int->int casts. int NumCastsRemoved = 0; - if (!isa(CI) && - // Only do this if the dest type is a simple type, don't convert the - // expression tree to something weird like i93 unless the source is also - // strange. - (isSafeIntegerType(DestTy->getScalarType()) || + // Only do this if the dest type is a simple type, don't convert the + // expression tree to something weird like i93 unless the source is also + // strange. + if ((isSafeIntegerType(DestTy->getScalarType()) || !isSafeIntegerType(SrcI->getType()->getScalarType())) && CanEvaluateInDifferentType(SrcI, DestTy, CI.getOpcode(), NumCastsRemoved)) { @@ -8366,7 +8365,6 @@ switch (CI.getOpcode()) { default: LLVM_UNREACHABLE("Unknown cast type!"); case Instruction::Trunc: - case Instruction::BitCast: // Just replace this cast with the result. return ReplaceInstUsesWith(CI, Res); case Instruction::ZExt: { @@ -8409,16 +8407,12 @@ case Instruction::Or: case Instruction::Xor: // If we are discarding information, rewrite. - if (DestBitSize <= SrcBitSize && DestBitSize != 1) { - // Don't insert two casts if they cannot be eliminated. We allow - // two casts to be inserted if the sizes are the same. This could - // only be converting signedness, which is a noop. - if (DestBitSize == SrcBitSize || - !ValueRequiresCast(CI.getOpcode(), Op1, DestTy,TD) || + if (DestBitSize < SrcBitSize && DestBitSize != 1) { + // Don't insert two casts unless at least one can be eliminated. + if (!ValueRequiresCast(CI.getOpcode(), Op1, DestTy, TD) || !ValueRequiresCast(CI.getOpcode(), Op0, DestTy, TD)) { - Instruction::CastOps opcode = CI.getOpcode(); - Value *Op0c = InsertCastBefore(opcode, Op0, DestTy, *SrcI); - Value *Op1c = InsertCastBefore(opcode, Op1, DestTy, *SrcI); + Value *Op0c = InsertCastBefore(Instruction::Trunc, Op0, DestTy, *SrcI); + Value *Op1c = InsertCastBefore(Instruction::Trunc, Op1, DestTy, *SrcI); return BinaryOperator::Create( cast(SrcI)->getOpcode(), Op0c, Op1c); } @@ -8434,55 +8428,18 @@ Context->getConstantInt(CI.getType(), 1)); } break; - case Instruction::SDiv: - case Instruction::UDiv: - case Instruction::SRem: - case Instruction::URem: - // If we are just changing the sign, rewrite. - if (DestBitSize == SrcBitSize) { - // Don't insert two casts if they cannot be eliminated. We allow - // two casts to be inserted if the sizes are the same. This could - // only be converting signedness, which is a noop. - if (!ValueRequiresCast(CI.getOpcode(), Op1, DestTy, TD) || - !ValueRequiresCast(CI.getOpcode(), Op0, DestTy, TD)) { - Value *Op0c = InsertCastBefore(Instruction::BitCast, - Op0, DestTy, *SrcI); - Value *Op1c = InsertCastBefore(Instruction::BitCast, - Op1, DestTy, *SrcI); - return BinaryOperator::Create( - cast(SrcI)->getOpcode(), Op0c, Op1c); - } - } - break; - case Instruction::Shl: - // Allow changing the sign of the source operand. Do not allow - // changing the size of the shift, UNLESS the shift amount is a - // constant. We must not change variable sized shifts to a smaller - // size, because it is undefined to shift more bits out than exist - // in the value. - if (DestBitSize == SrcBitSize || - (DestBitSize < SrcBitSize && isa(Op1))) { - Instruction::CastOps opcode = (DestBitSize == SrcBitSize ? - Instruction::BitCast : Instruction::Trunc); - Value *Op0c = InsertCastBefore(opcode, Op0, DestTy, *SrcI); - Value *Op1c = InsertCastBefore(opcode, Op1, DestTy, *SrcI); + case Instruction::Shl: { + // Canonicalize trunc inside shl, if we can. + ConstantInt *CI = dyn_cast(Op1); + if (CI && DestBitSize < SrcBitSize && + CI->getLimitedValue(DestBitSize) < DestBitSize) { + Value *Op0c = InsertCastBefore(Instruction::Trunc, Op0, DestTy, *SrcI); + Value *Op1c = InsertCastBefore(Instruction::Trunc, Op1, DestTy, *SrcI); return BinaryOperator::CreateShl(Op0c, Op1c); } break; - case Instruction::AShr: - // If this is a signed shr, and if all bits shifted in are about to be - // truncated off, turn it into an unsigned shr to allow greater - // simplifications. - if (DestBitSize < SrcBitSize && - isa(Op1)) { - uint32_t ShiftAmt = cast(Op1)->getLimitedValue(SrcBitSize); - if (SrcBitSize > ShiftAmt && SrcBitSize-ShiftAmt >= DestBitSize) { - // Insert the new logical shift right. - return BinaryOperator::CreateLShr(Op0, Op1); - } - } - break; + } } return 0; } From dpatel at apple.com Mon Jul 13 16:48:27 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 13 Jul 2009 21:48:27 -0000 Subject: [llvm-commits] [llvm] r75515 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h lib/CodeGen/AsmPrinter/DwarfDebug.cpp Message-ID: <200907132148.n6DLmR11002864@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jul 13 16:48:26 2009 New Revision: 75515 URL: http://llvm.org/viewvc/llvm-project?rev=75515&view=rev Log: Use AsmPrinter's Mangler to remove leading '1' from linkage names. Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=75515&r1=75514&r2=75515&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original) +++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Mon Jul 13 16:48:26 2009 @@ -242,7 +242,7 @@ /// special global used by LLVM. If so, emit it and return true, otherwise /// do nothing and return false. bool EmitSpecialLLVMGlobal(const GlobalVariable *GV); - + public: //===------------------------------------------------------------------===// /// LEB 128 number encoding. @@ -333,6 +333,10 @@ /// debug tables. void printDeclare(const MachineInstr *MI) const; + /// getMangler - Return Mangler used by the AsmPrinter. This is used by + /// DWARF debug info generator. + Mangler *getMangler() { return Mang; } + /// postInstructionAction - Handling printing of items after the /// instruction iteself has been printed (e.g. comments) void postInstructionAction(const MachineInstr &MI) const { Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=75515&r1=75514&r2=75515&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Jul 13 16:48:26 2009 @@ -15,6 +15,7 @@ #include "llvm/Module.h" #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/Support/Timer.h" +#include "llvm/Support/Mangler.h" #include "llvm/System/Path.h" #include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetRegisterInfo.h" @@ -785,9 +786,11 @@ AddString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name); std::string LinkageName; GV.getLinkageName(LinkageName); - if (!LinkageName.empty()) + if (!LinkageName.empty()) { + Mangler *Mg = Asm->getMangler(); AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - LinkageName); + Mg ? Mg->makeNameProper(LinkageName) : LinkageName); + } AddType(DW_Unit, GVDie, GV.getType()); if (!GV.isLocalToUnit()) AddUInt(GVDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1); @@ -856,9 +859,11 @@ std::string LinkageName; SP.getLinkageName(LinkageName); - if (!LinkageName.empty()) + if (!LinkageName.empty()) { + Mangler *Mg = Asm->getMangler(); AddString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - LinkageName); + Mg ? Mg->makeNameProper(LinkageName) : LinkageName); + } AddSourceLine(SPDie, &SP); From sabre at nondot.org Mon Jul 13 16:48:34 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 21:48:34 -0000 Subject: [llvm-commits] [llvm] r75516 - /llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Message-ID: <200907132148.n6DLmYT5002879@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 16:48:33 2009 New Revision: 75516 URL: http://llvm.org/viewvc/llvm-project?rev=75516&view=rev Log: refactor operand printing to remove hte last of the "mem" modifier hack. The only remaining modifier is "subreg". Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75516&r1=75515&r2=75516&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 13 16:48:33 2009 @@ -499,9 +499,7 @@ case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_GlobalAddress: case MachineOperand::MO_ExternalSymbol: { - bool isMemOp = Modifier && !strcmp(Modifier, "mem"); - if (!isMemOp) O << '$'; - + O << '$'; printSymbolOperand(MO); break; } @@ -545,7 +543,7 @@ } else { assert(DispSpec.isGlobal() || DispSpec.isCPI() || DispSpec.isJTI() || DispSpec.isSymbol()); - printOperand(MI, Op+3, "mem"); + printSymbolOperand(MI->getOperand(Op+3)); } if (HasParenPart) { @@ -661,17 +659,21 @@ if (ExtraCode && ExtraCode[0]) { if (ExtraCode[1] != 0) return true; // Unknown modifier. + const MachineOperand &MO = MI->getOperand(OpNo); + switch (ExtraCode[0]) { default: return true; // Unknown modifier. case 'c': // Don't print "$" before a global var name or constant. - if (MI->getOperand(OpNo).isImm()) - O << MI->getOperand(OpNo).getImm(); + if (MO.isImm()) + O << MO.getImm(); + else if (MO.isGlobal() || MO.isCPI() || MO.isJTI() || MO.isSymbol()) + printSymbolOperand(MO); else - printOperand(MI, OpNo, "mem"); + printOperand(MI, OpNo); return false; case 'A': // Print '*' before a register (it must be a register) - if (MI->getOperand(OpNo).isReg()) { + if (MO.isReg()) { O << '*'; printOperand(MI, OpNo); return false; @@ -683,8 +685,8 @@ case 'w': // Print HImode register case 'k': // Print SImode register case 'q': // Print DImode register - if (MI->getOperand(OpNo).isReg()) - return printAsmMRegister(MI->getOperand(OpNo), ExtraCode[0]); + if (MO.isReg()) + return printAsmMRegister(MO, ExtraCode[0]); printOperand(MI, OpNo); return false; @@ -692,17 +694,15 @@ print_pcrel_imm(MI, OpNo); return false; - case 'n': { // Negate the immediate or print a '-' before the operand. + case 'n': // Negate the immediate or print a '-' before the operand. // Note: this is a temporary solution. It should be handled target // independently as part of the 'MC' work. - const MachineOperand &MO = MI->getOperand(OpNo); if (MO.isImm()) { O << -MO.getImm(); return false; } O << '-'; } - } } printOperand(MI, OpNo); From gohman at apple.com Mon Jul 13 16:51:15 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 21:51:15 -0000 Subject: [llvm-commits] [llvm] r75519 - in /llvm/trunk: include/llvm/Analysis/LoopInfo.h include/llvm/CodeGen/MachineLoopInfo.h include/llvm/Transforms/Utils/Cloning.h lib/Analysis/IVUsers.cpp lib/CodeGen/MachineLoopInfo.cpp lib/Transforms/Scalar/LoopStrengthReduce.cpp Message-ID: <200907132151.n6DLpGp8003007@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 16:51:15 2009 New Revision: 75519 URL: http://llvm.org/viewvc/llvm-project?rev=75519&view=rev Log: Make Loop and MachineLoop be subclasses of LoopBase, rather than typedefs, using the Curiously Recurring Template Pattern with LoopBase. This will help further refactoring, and future functionality for Loop. Also, Headers can now foward-declare Loop, instead of pulling in LoopInfo.h or doing tricks. Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h llvm/trunk/include/llvm/Transforms/Utils/Cloning.h llvm/trunk/lib/Analysis/IVUsers.cpp llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=75519&r1=75518&r2=75519&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/LoopInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/LoopInfo.h Mon Jul 13 16:51:15 2009 @@ -54,26 +54,27 @@ class DominatorTree; class LoopInfo; -template class LoopInfoBase; -template class LoopBase; - -typedef LoopBase Loop; +class Loop; +template class LoopInfoBase; +template class LoopBase; //===----------------------------------------------------------------------===// /// LoopBase class - Instances of this class are used to represent loops that /// are detected in the flow graph /// -template +template class LoopBase { - LoopBase *ParentLoop; + LoopT *ParentLoop; // SubLoops - Loops contained entirely within this one. - std::vector*> SubLoops; + std::vector SubLoops; // Blocks - The list of blocks in this loop. First entry is the header node. std::vector Blocks; - LoopBase(const LoopBase &); // DO NOT IMPLEMENT - const LoopBase&operator=(const LoopBase &);// DO NOT IMPLEMENT + // DO NOT IMPLEMENT + LoopBase(const LoopBase &); + // DO NOT IMPLEMENT + const LoopBase&operator=(const LoopBase &); public: /// Loop ctor - This creates an empty loop. LoopBase() : ParentLoop(0) {} @@ -87,13 +88,13 @@ /// blocks, where depth 0 is used for blocks not inside any loops. unsigned getLoopDepth() const { unsigned D = 1; - for (const LoopBase *CurLoop = ParentLoop; CurLoop; + for (const LoopT *CurLoop = ParentLoop; CurLoop; CurLoop = CurLoop->ParentLoop) ++D; return D; } BlockT *getHeader() const { return Blocks.front(); } - LoopBase *getParentLoop() const { return ParentLoop; } + LoopT *getParentLoop() const { return ParentLoop; } /// contains - Return true if the specified basic block is in this loop /// @@ -103,8 +104,8 @@ /// iterator/begin/end - Return the loops contained entirely within this loop. /// - const std::vector*> &getSubLoops() const { return SubLoops; } - typedef typename std::vector*>::const_iterator iterator; + const std::vector &getSubLoops() const { return SubLoops; } + typedef typename std::vector::const_iterator iterator; iterator begin() const { return SubLoops.begin(); } iterator end() const { return SubLoops.end(); } bool empty() const { return SubLoops.empty(); } @@ -538,39 +539,39 @@ /// to the specified LoopInfo object as being in the current basic block. It /// is not valid to replace the loop header with this method. /// - void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase &LI); + void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase &LI); /// replaceChildLoopWith - This is used when splitting loops up. It replaces /// the OldChild entry in our children list with NewChild, and updates the /// parent pointer of OldChild to be null and the NewChild to be this loop. /// This updates the loop depth of the new child. - void replaceChildLoopWith(LoopBase *OldChild, - LoopBase *NewChild) { + void replaceChildLoopWith(LoopT *OldChild, + LoopT *NewChild) { assert(OldChild->ParentLoop == this && "This loop is already broken!"); assert(NewChild->ParentLoop == 0 && "NewChild already has a parent!"); - typename std::vector*>::iterator I = + typename std::vector::iterator I = std::find(SubLoops.begin(), SubLoops.end(), OldChild); assert(I != SubLoops.end() && "OldChild not in loop!"); *I = NewChild; OldChild->ParentLoop = 0; - NewChild->ParentLoop = this; + NewChild->ParentLoop = static_cast(this); } /// addChildLoop - Add the specified loop to be a child of this loop. This /// updates the loop depth of the new child. /// - void addChildLoop(LoopBase *NewChild) { + void addChildLoop(LoopT *NewChild) { assert(NewChild->ParentLoop == 0 && "NewChild already has a parent!"); - NewChild->ParentLoop = this; + NewChild->ParentLoop = static_cast(this); SubLoops.push_back(NewChild); } /// removeChildLoop - This removes the specified child from being a subloop of /// this loop. The loop is not deleted, as it will presumably be inserted /// into another loop. - LoopBase *removeChildLoop(iterator I) { + LoopT *removeChildLoop(iterator I) { assert(I != SubLoops.end() && "Cannot remove end iterator!"); - LoopBase *Child = *I; + LoopT *Child = *I; assert(Child->ParentLoop == this && "Child is not a child of this loop!"); SubLoops.erase(SubLoops.begin()+(I-begin())); Child->ParentLoop = 0; @@ -643,25 +644,32 @@ print(cerr); } -private: - friend class LoopInfoBase; +protected: + friend class LoopInfoBase; explicit LoopBase(BlockT *BB) : ParentLoop(0) { Blocks.push_back(BB); } }; +class Loop : public LoopBase { +public: + Loop() {} +private: + friend class LoopInfoBase; + explicit Loop(BasicBlock *BB) : LoopBase(BB) {} +}; //===----------------------------------------------------------------------===// /// LoopInfo - This class builds and contains all of the top level loop /// structures in the specified function. /// -template +template class LoopInfoBase { // BBMap - Mapping of basic blocks to the inner most loop they occur in - std::map*> BBMap; - std::vector*> TopLevelLoops; - friend class LoopBase; + std::map BBMap; + std::vector TopLevelLoops; + friend class LoopBase; void operator=(const LoopInfoBase &); // do not implement LoopInfoBase(const LoopInfo &); // do not implement @@ -670,7 +678,7 @@ ~LoopInfoBase() { releaseMemory(); } void releaseMemory() { - for (typename std::vector* >::iterator I = + for (typename std::vector::iterator I = TopLevelLoops.begin(), E = TopLevelLoops.end(); I != E; ++I) delete *I; // Delete all of the loops... @@ -681,7 +689,7 @@ /// iterator/begin/end - The interface to the top-level loops in the current /// function. /// - typedef typename std::vector*>::const_iterator iterator; + typedef typename std::vector::const_iterator iterator; iterator begin() const { return TopLevelLoops.begin(); } iterator end() const { return TopLevelLoops.end(); } bool empty() const { return TopLevelLoops.empty(); } @@ -689,15 +697,15 @@ /// getLoopFor - Return the inner most loop that BB lives in. If a basic /// block is in no loop (for example the entry node), null is returned. /// - LoopBase *getLoopFor(const BlockT *BB) const { - typename std::map*>::const_iterator I= + LoopT *getLoopFor(const BlockT *BB) const { + typename std::map::const_iterator I= BBMap.find(const_cast(BB)); return I != BBMap.end() ? I->second : 0; } /// operator[] - same as getLoopFor... /// - const LoopBase *operator[](const BlockT *BB) const { + const LoopT *operator[](const BlockT *BB) const { return getLoopFor(BB); } @@ -705,22 +713,22 @@ /// depth of 0 means the block is not inside any loop. /// unsigned getLoopDepth(const BlockT *BB) const { - const LoopBase *L = getLoopFor(BB); + const LoopT *L = getLoopFor(BB); return L ? L->getLoopDepth() : 0; } // isLoopHeader - True if the block is a loop header node bool isLoopHeader(BlockT *BB) const { - const LoopBase *L = getLoopFor(BB); + const LoopT *L = getLoopFor(BB); return L && L->getHeader() == BB; } /// removeLoop - This removes the specified top-level loop from this loop info /// object. The loop is not deleted, as it will presumably be inserted into /// another loop. - LoopBase *removeLoop(iterator I) { + LoopT *removeLoop(iterator I) { assert(I != end() && "Cannot remove end iterator!"); - LoopBase *L = *I; + LoopT *L = *I; assert(L->getParentLoop() == 0 && "Not a top-level loop!"); TopLevelLoops.erase(TopLevelLoops.begin() + (I-begin())); return L; @@ -729,17 +737,17 @@ /// changeLoopFor - Change the top-level loop that contains BB to the /// specified loop. This should be used by transformations that restructure /// the loop hierarchy tree. - void changeLoopFor(BlockT *BB, LoopBase *L) { - LoopBase *&OldLoop = BBMap[BB]; + void changeLoopFor(BlockT *BB, LoopT *L) { + LoopT *&OldLoop = BBMap[BB]; assert(OldLoop && "Block not in a loop yet!"); OldLoop = L; } /// changeTopLevelLoop - Replace the specified loop in the top-level loops /// list with the indicated loop. - void changeTopLevelLoop(LoopBase *OldLoop, - LoopBase *NewLoop) { - typename std::vector*>::iterator I = + void changeTopLevelLoop(LoopT *OldLoop, + LoopT *NewLoop) { + typename std::vector::iterator I = std::find(TopLevelLoops.begin(), TopLevelLoops.end(), OldLoop); assert(I != TopLevelLoops.end() && "Old loop not at top level!"); *I = NewLoop; @@ -749,7 +757,7 @@ /// addTopLevelLoop - This adds the specified loop to the collection of /// top-level loops. - void addTopLevelLoop(LoopBase *New) { + void addTopLevelLoop(LoopT *New) { assert(New->getParentLoop() == 0 && "Loop already in subloop!"); TopLevelLoops.push_back(New); } @@ -758,9 +766,9 @@ /// including all of the Loop objects it is nested in and our mapping from /// BasicBlocks to loops. void removeBlock(BlockT *BB) { - typename std::map*>::iterator I = BBMap.find(BB); + typename std::map::iterator I = BBMap.find(BB); if (I != BBMap.end()) { - for (LoopBase *L = I->second; L; L = L->getParentLoop()) + for (LoopT *L = I->second; L; L = L->getParentLoop()) L->removeBlockFromLoop(BB); BBMap.erase(I); @@ -769,8 +777,8 @@ // Internals - static bool isNotAlreadyContainedIn(const LoopBase *SubLoop, - const LoopBase *ParentLoop) { + static bool isNotAlreadyContainedIn(const LoopT *SubLoop, + const LoopT *ParentLoop) { if (SubLoop == 0) return true; if (SubLoop == ParentLoop) return false; return isNotAlreadyContainedIn(SubLoop->getParentLoop(), ParentLoop); @@ -781,11 +789,11 @@ for (df_iterator NI = df_begin(RootNode), NE = df_end(RootNode); NI != NE; ++NI) - if (LoopBase *L = ConsiderForLoop(*NI, DT)) + if (LoopT *L = ConsiderForLoop(*NI, DT)) TopLevelLoops.push_back(L); } - LoopBase *ConsiderForLoop(BlockT *BB, DominatorTreeBase &DT) { + LoopT *ConsiderForLoop(BlockT *BB, DominatorTreeBase &DT) { if (BBMap.find(BB) != BBMap.end()) return 0;// Haven't processed this node? std::vector TodoStack; @@ -802,7 +810,7 @@ if (TodoStack.empty()) return 0; // No backedges to this block... // Create a new loop to represent this basic block... - LoopBase *L = new LoopBase(BB); + LoopT *L = new LoopT(BB); BBMap[BB] = L; BlockT *EntryBlock = BB->getParent()->begin(); @@ -819,13 +827,13 @@ // occurs, this child loop gets added to a part of the current loop, // making it a sibling to the current loop. We have to reparent this // loop. - if (LoopBase *SubLoop = - const_cast*>(getLoopFor(X))) + if (LoopT *SubLoop = + const_cast(getLoopFor(X))) if (SubLoop->getHeader() == X && isNotAlreadyContainedIn(SubLoop, L)){ // Remove the subloop from it's current parent... assert(SubLoop->ParentLoop && SubLoop->ParentLoop != L); - LoopBase *SLP = SubLoop->ParentLoop; // SubLoopParent - typename std::vector*>::iterator I = + LoopT *SLP = SubLoop->ParentLoop; // SubLoopParent + typename std::vector::iterator I = std::find(SLP->SubLoops.begin(), SLP->SubLoops.end(), SubLoop); assert(I != SLP->SubLoops.end() &&"SubLoop not a child of parent?"); SLP->SubLoops.erase(I); // Remove from parent... @@ -849,7 +857,7 @@ // If there are any loops nested within this loop, create them now! for (typename std::vector::iterator I = L->Blocks.begin(), E = L->Blocks.end(); I != E; ++I) - if (LoopBase *NewLoop = ConsiderForLoop(*I, DT)) { + if (LoopT *NewLoop = ConsiderForLoop(*I, DT)) { L->SubLoops.push_back(NewLoop); NewLoop->ParentLoop = L; } @@ -859,8 +867,7 @@ // for (typename std::vector::iterator I = L->Blocks.begin(), E = L->Blocks.end(); I != E; ++I) { - typename std::map*>::iterator BBMI = - BBMap.find(*I); + typename std::map::iterator BBMI = BBMap.find(*I); if (BBMI == BBMap.end()) // Not in map yet... BBMap.insert(BBMI, std::make_pair(*I, L)); // Must be at this level } @@ -870,13 +877,12 @@ // can accidentally pull loops our of their parents, so we must make sure to // organize the loop nests correctly now. { - std::map*> ContainingLoops; + std::map ContainingLoops; for (unsigned i = 0; i != L->SubLoops.size(); ++i) { - LoopBase *Child = L->SubLoops[i]; + LoopT *Child = L->SubLoops[i]; assert(Child->getParentLoop() == L && "Not proper child loop?"); - if (LoopBase *ContainingLoop = - ContainingLoops[Child->getHeader()]) { + if (LoopT *ContainingLoop = ContainingLoops[Child->getHeader()]) { // If there is already a loop which contains this loop, move this loop // into the containing loop. MoveSiblingLoopInto(Child, ContainingLoop); @@ -886,11 +892,11 @@ // if any of the contained blocks are loop headers for subloops we // have already processed. for (unsigned b = 0, e = Child->Blocks.size(); b != e; ++b) { - LoopBase *&BlockLoop = ContainingLoops[Child->Blocks[b]]; + LoopT *&BlockLoop = ContainingLoops[Child->Blocks[b]]; if (BlockLoop == 0) { // Child block not processed yet... BlockLoop = Child; } else if (BlockLoop != Child) { - LoopBase *SubLoop = BlockLoop; + LoopT *SubLoop = BlockLoop; // Reparent all of the blocks which used to belong to BlockLoops for (unsigned j = 0, e = SubLoop->Blocks.size(); j != e; ++j) ContainingLoops[SubLoop->Blocks[j]] = Child; @@ -911,14 +917,14 @@ /// MoveSiblingLoopInto - This method moves the NewChild loop to live inside /// of the NewParent Loop, instead of being a sibling of it. - void MoveSiblingLoopInto(LoopBase *NewChild, - LoopBase *NewParent) { - LoopBase *OldParent = NewChild->getParentLoop(); + void MoveSiblingLoopInto(LoopT *NewChild, + LoopT *NewParent) { + LoopT *OldParent = NewChild->getParentLoop(); assert(OldParent && OldParent == NewParent->getParentLoop() && NewChild != NewParent && "Not sibling loops!"); // Remove NewChild from being a child of OldParent - typename std::vector*>::iterator I = + typename std::vector::iterator I = std::find(OldParent->SubLoops.begin(), OldParent->SubLoops.end(), NewChild); assert(I != OldParent->SubLoops.end() && "Parent fields incorrect??"); @@ -931,7 +937,7 @@ /// InsertLoopInto - This inserts loop L into the specified parent loop. If /// the parent loop contains a loop which should contain L, the loop gets /// inserted into L instead. - void InsertLoopInto(LoopBase *L, LoopBase *Parent) { + void InsertLoopInto(LoopT *L, LoopT *Parent) { BlockT *LHeader = L->getHeader(); assert(Parent->contains(LHeader) && "This loop should not be inserted here!"); @@ -955,7 +961,7 @@ for (unsigned i = 0; i < TopLevelLoops.size(); ++i) TopLevelLoops[i]->print(OS); #if 0 - for (std::map::const_iterator I = BBMap.begin(), + for (std::map::const_iterator I = BBMap.begin(), E = BBMap.end(); I != E; ++I) OS << "BB '" << I->first->getName() << "' level = " << I->second->getLoopDepth() << "\n"; @@ -964,8 +970,8 @@ }; class LoopInfo : public FunctionPass { - LoopInfoBase LI; - friend class LoopBase; + LoopInfoBase LI; + friend class LoopBase; void operator=(const LoopInfo &); // do not implement LoopInfo(const LoopInfo &); // do not implement @@ -974,12 +980,12 @@ LoopInfo() : FunctionPass(&ID) {} - LoopInfoBase& getBase() { return LI; } + LoopInfoBase& getBase() { return LI; } /// iterator/begin/end - The interface to the top-level loops in the current /// function. /// - typedef LoopInfoBase::iterator iterator; + typedef LoopInfoBase::iterator iterator; inline iterator begin() const { return LI.begin(); } inline iterator end() const { return LI.end(); } bool empty() const { return LI.empty(); } @@ -1051,6 +1057,13 @@ void removeBlock(BasicBlock *BB) { LI.removeBlock(BB); } + + static bool isNotAlreadyContainedIn(const Loop *SubLoop, + const Loop *ParentLoop) { + return + LoopInfoBase::isNotAlreadyContainedIn(SubLoop, + ParentLoop); + } }; @@ -1081,19 +1094,21 @@ } }; -template -void LoopBase::addBasicBlockToLoop(BlockT *NewBB, - LoopInfoBase &LIB) { +template +void +LoopBase::addBasicBlockToLoop(BlockT *NewBB, + LoopInfoBase &LIB) { assert((Blocks.empty() || LIB[getHeader()] == this) && "Incorrect LI specified for this loop!"); assert(NewBB && "Cannot add a null basic block to the loop!"); assert(LIB[NewBB] == 0 && "BasicBlock already in the loop!"); + LoopT *L = static_cast(this); + // Add the loop mapping to the LoopInfo object... - LIB.BBMap[NewBB] = this; + LIB.BBMap[NewBB] = L; // Add the basic block to this loop and all parent loops... - LoopBase *L = this; while (L) { L->Blocks.push_back(NewBB); L = L->getParentLoop(); Modified: llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h?rev=75519&r1=75518&r2=75519&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h Mon Jul 13 16:51:15 2009 @@ -35,48 +35,62 @@ namespace llvm { +class MachineLoop; + // Provide overrides for Loop methods that don't make sense for machine loops. template<> inline -PHINode *LoopBase::getCanonicalInductionVariable() const { +PHINode * +LoopBase::getCanonicalInductionVariable() const { assert(0 && "getCanonicalInductionVariable not supported for machine loops!"); return 0; } template<> inline Instruction* -LoopBase::getCanonicalInductionVariableIncrement() const { +LoopBase::getCanonicalInductionVariableIncrement() const { assert(0 && "getCanonicalInductionVariableIncrement not supported for machine loops!"); return 0; } template<> -inline bool LoopBase::isLoopInvariant(Value *V) const { +inline bool +LoopBase::isLoopInvariant(Value *V) const { assert(0 && "isLoopInvariant not supported for machine loops!"); return false; } template<> -inline Value *LoopBase::getTripCount() const { +inline Value * +LoopBase::getTripCount() const { assert(0 && "getTripCount not supported for machine loops!"); return 0; } template<> -inline bool LoopBase::isLCSSAForm() const { +inline bool +LoopBase::isLCSSAForm() const { assert(0 && "isLCSSAForm not supported for machine loops"); return false; } -typedef LoopBase MachineLoop; +class MachineLoop : public LoopBase { +public: + MachineLoop(); +private: + friend class LoopInfoBase; + explicit MachineLoop(MachineBasicBlock *MBB) + : LoopBase(MBB) {} +}; class MachineLoopInfo : public MachineFunctionPass { - LoopInfoBase LI; - friend class LoopBase; + LoopInfoBase LI; + friend class LoopBase; void operator=(const MachineLoopInfo &); // do not implement MachineLoopInfo(const MachineLoopInfo &); // do not implement - LoopInfoBase& getBase() { return LI; } + LoopInfoBase& getBase() { return LI; } public: static char ID; // Pass identification, replacement for typeid @@ -86,7 +100,7 @@ /// iterator/begin/end - The interface to the top-level loops in the current /// function. /// - typedef LoopInfoBase::iterator iterator; + typedef LoopInfoBase::iterator iterator; inline iterator begin() const { return LI.begin(); } inline iterator end() const { return LI.end(); } bool empty() const { return LI.empty(); } Modified: llvm/trunk/include/llvm/Transforms/Utils/Cloning.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Cloning.h?rev=75519&r1=75518&r2=75519&view=diff ============================================================================== --- llvm/trunk/include/llvm/Transforms/Utils/Cloning.h (original) +++ llvm/trunk/include/llvm/Transforms/Utils/Cloning.h Mon Jul 13 16:51:15 2009 @@ -36,10 +36,9 @@ class Trace; class CallGraph; class TargetData; +class Loop; class LoopInfo; class LLVMContext; -template class LoopBase; -typedef LoopBase Loop; /// CloneModule - Return an exact copy of the specified module /// Modified: llvm/trunk/lib/Analysis/IVUsers.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IVUsers.cpp?rev=75519&r1=75518&r2=75519&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/IVUsers.cpp (original) +++ llvm/trunk/lib/Analysis/IVUsers.cpp Mon Jul 13 16:51:15 2009 @@ -54,7 +54,7 @@ if (newLoop == L) return false; // if newLoop is an outer loop of L, this is OK. - if (!LoopInfoBase::isNotAlreadyContainedIn(L, newLoop)) + if (!LoopInfo::isNotAlreadyContainedIn(L, newLoop)) return false; } return true; Modified: llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp?rev=75519&r1=75518&r2=75519&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineLoopInfo.cpp Mon Jul 13 16:51:15 2009 @@ -19,8 +19,12 @@ #include "llvm/CodeGen/Passes.h" using namespace llvm; -TEMPLATE_INSTANTIATION(class LoopBase); -TEMPLATE_INSTANTIATION(class LoopInfoBase); +#define MLB class LoopBase +TEMPLATE_INSTANTIATION(MLB); +#undef MLB +#define MLIB class LoopInfoBase +TEMPLATE_INSTANTIATION(MLIB); +#undef MLIB char MachineLoopInfo::ID = 0; static RegisterPass Modified: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=75519&r1=75518&r2=75519&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Mon Jul 13 16:51:15 2009 @@ -248,7 +248,7 @@ if (newLoop == L) return false; // if newLoop is an outer loop of L, this is OK. - if (!LoopInfoBase::isNotAlreadyContainedIn(L, newLoop)) + if (!LoopInfo::isNotAlreadyContainedIn(L, newLoop)) return false; } return true; From sabre at nondot.org Mon Jul 13 16:53:20 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 21:53:20 -0000 Subject: [llvm-commits] [llvm] r75520 - /llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Message-ID: <200907132153.n6DLrKZU003070@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 16:53:19 2009 New Revision: 75520 URL: http://llvm.org/viewvc/llvm-project?rev=75520&view=rev Log: move a method and add a comment, no functionality change. Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75520&r1=75519&r2=75520&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 13 16:53:19 2009 @@ -287,92 +287,9 @@ return false; } -/// print_pcrel_imm - This is used to print an immediate value that ends up -/// being encoded as a pc-relative value. These print slightly differently, for -/// example, a $ is not emitted. -void X86ATTAsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo) { - const MachineOperand &MO = MI->getOperand(OpNo); - switch (MO.getType()) { - default: LLVM_UNREACHABLE( "Unknown pcrel immediate operand"); - case MachineOperand::MO_Immediate: - O << MO.getImm(); - return; - case MachineOperand::MO_MachineBasicBlock: - printBasicBlockLabel(MO.getMBB(), false, false, VerboseAsm); - return; - - case MachineOperand::MO_GlobalAddress: { - const GlobalValue *GV = MO.getGlobal(); - std::string Name = Mang->getValueName(GV); - decorateName(Name, GV); - - bool needCloseParen = false; - if (Name[0] == '$') { - // The name begins with a dollar-sign. In order to avoid having it look - // like an integer immediate to the assembler, enclose it in parens. - O << '('; - needCloseParen = true; - } - - // Handle dllimport linkage. - if (MO.getTargetFlags() == X86II::MO_DLLIMPORT) - O << "__imp_" << Name; - else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { - FnStubs.insert(Name); - printSuffixedName(Name, "$stub"); - } else { - O << Name; - } - - if (needCloseParen) - O << ')'; - - // Assemble call via PLT for externally visible symbols. - if (MO.getTargetFlags() == X86II::MO_PLT) - O << "@PLT"; - - printOffset(MO.getOffset()); - - return; - } - - case MachineOperand::MO_ExternalSymbol: { - bool needCloseParen = false; - std::string Name(TAI->getGlobalPrefix()); - Name += MO.getSymbolName(); - - if (Name[0] == '$') { - // The name begins with a dollar-sign. In order to avoid having it look - // like an integer immediate to the assembler, enclose it in parens. - O << '('; - needCloseParen = true; - } - - if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { - FnStubs.insert(Name); - printSuffixedName(Name, "$stub"); - } else { - O << Name; - } - - if (MO.getTargetFlags() == X86II::MO_GOT_ABSOLUTE_ADDRESS) { - O << " + [.-"; - PrintPICBaseSymbol(); - O << ']'; - } - - if (MO.getTargetFlags() == X86II::MO_PLT) - O << "@PLT"; - - if (needCloseParen) - O << ')'; - - return; - } - } -} - - +/// printSymbolOperand - Print a raw symbol reference operand. This handles +/// jump tables, constant pools, global address and external symbols, all of +/// which print to a label with various suffixes for relocation types etc. void X86ATTAsmPrinter::printSymbolOperand(const MachineOperand &MO) { switch (MO.getType()) { default: LLVM_UNREACHABLE("unknown symbol type!"); @@ -470,6 +387,92 @@ } } +/// print_pcrel_imm - This is used to print an immediate value that ends up +/// being encoded as a pc-relative value. These print slightly differently, for +/// example, a $ is not emitted. +void X86ATTAsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo) { + const MachineOperand &MO = MI->getOperand(OpNo); + switch (MO.getType()) { + default: LLVM_UNREACHABLE( "Unknown pcrel immediate operand"); + case MachineOperand::MO_Immediate: + O << MO.getImm(); + return; + case MachineOperand::MO_MachineBasicBlock: + printBasicBlockLabel(MO.getMBB(), false, false, VerboseAsm); + return; + + case MachineOperand::MO_GlobalAddress: { + const GlobalValue *GV = MO.getGlobal(); + std::string Name = Mang->getValueName(GV); + decorateName(Name, GV); + + bool needCloseParen = false; + if (Name[0] == '$') { + // The name begins with a dollar-sign. In order to avoid having it look + // like an integer immediate to the assembler, enclose it in parens. + O << '('; + needCloseParen = true; + } + + // Handle dllimport linkage. + if (MO.getTargetFlags() == X86II::MO_DLLIMPORT) + O << "__imp_" << Name; + else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { + FnStubs.insert(Name); + printSuffixedName(Name, "$stub"); + } else { + O << Name; + } + + if (needCloseParen) + O << ')'; + + // Assemble call via PLT for externally visible symbols. + if (MO.getTargetFlags() == X86II::MO_PLT) + O << "@PLT"; + + printOffset(MO.getOffset()); + + return; + } + + case MachineOperand::MO_ExternalSymbol: { + bool needCloseParen = false; + std::string Name(TAI->getGlobalPrefix()); + Name += MO.getSymbolName(); + + if (Name[0] == '$') { + // The name begins with a dollar-sign. In order to avoid having it look + // like an integer immediate to the assembler, enclose it in parens. + O << '('; + needCloseParen = true; + } + + if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { + FnStubs.insert(Name); + printSuffixedName(Name, "$stub"); + } else { + O << Name; + } + + if (MO.getTargetFlags() == X86II::MO_GOT_ABSOLUTE_ADDRESS) { + O << " + [.-"; + PrintPICBaseSymbol(); + O << ']'; + } + + if (MO.getTargetFlags() == X86II::MO_PLT) + O << "@PLT"; + + if (needCloseParen) + O << ')'; + + return; + } + } +} + + void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, const char *Modifier) { From clattner at apple.com Mon Jul 13 16:56:53 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 14:56:53 -0700 Subject: [llvm-commits] [llvm] r75515 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h lib/CodeGen/AsmPrinter/DwarfDebug.cpp In-Reply-To: <200907132148.n6DLmR11002864@zion.cs.uiuc.edu> References: <200907132148.n6DLmR11002864@zion.cs.uiuc.edu> Message-ID: On Jul 13, 2009, at 2:48 PM, Devang Patel wrote: > URL: http://llvm.org/viewvc/llvm-project?rev=75515&view=rev > Log: > Use AsmPrinter's Mangler to remove leading '1' from linkage names. Thanks Devang, this should work. > > + /// getMangler - Return Mangler used by the AsmPrinter. This is > used by > + /// DWARF debug info generator. No need to say who uses this. This will just get out of date. > @@ -785,9 +786,11 @@ > AddString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name); > std::string LinkageName; > GV.getLinkageName(LinkageName); > - if (!LinkageName.empty()) > + if (!LinkageName.empty()) { > + Mangler *Mg = Asm->getMangler(); > AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, > dwarf::DW_FORM_string, > - LinkageName); > + Mg ? Mg->makeNameProper(LinkageName) : LinkageName); Can the mangler ever be null? If not, please remove the two checks. -Chris > + } > AddType(DW_Unit, GVDie, GV.getType()); > if (!GV.isLocalToUnit()) > AddUInt(GVDie, dwarf::DW_AT_external, dwarf::DW_FORM_flag, 1); > @@ -856,9 +859,11 @@ > std::string LinkageName; > SP.getLinkageName(LinkageName); > > - if (!LinkageName.empty()) > + if (!LinkageName.empty()) { > + Mangler *Mg = Asm->getMangler(); > AddString(SPDie, dwarf::DW_AT_MIPS_linkage_name, > dwarf::DW_FORM_string, > - LinkageName); > + Mg ? Mg->makeNameProper(LinkageName) : LinkageName); > + } > > AddSourceLine(SPDie, &SP); > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From ofv at wanadoo.es Mon Jul 13 16:58:45 2009 From: ofv at wanadoo.es (Oscar Fuentes) Date: Mon, 13 Jul 2009 21:58:45 -0000 Subject: [llvm-commits] [llvm] r75522 - /llvm/trunk/CMakeLists.txt Message-ID: <200907132158.n6DLwkZN003239@zion.cs.uiuc.edu> Author: ofv Date: Mon Jul 13 16:58:44 2009 New Revision: 75522 URL: http://llvm.org/viewvc/llvm-project?rev=75522&view=rev Log: CMake: Refuses to work for out-of-source builds when tablegenned files are found mixed with the sources. Fixes PR 4522. Modified: llvm/trunk/CMakeLists.txt Modified: llvm/trunk/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=75522&r1=75521&r2=75522&view=diff ============================================================================== --- llvm/trunk/CMakeLists.txt (original) +++ llvm/trunk/CMakeLists.txt Mon Jul 13 16:58:44 2009 @@ -28,6 +28,24 @@ set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples) set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" ) +if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) + file(GLOB_RECURSE + tablegenned_files_on_include_dir + "${LLVM_MAIN_SRC_DIR}/include/llvm/*.gen") + file(GLOB_RECURSE + tablegenned_files_on_lib_dir + "${LLVM_MAIN_SRC_DIR}/lib/Target/*.inc") + if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir) + message(FATAL_ERROR "Apparently there is a previous in-source build, +probably as the result of running `configure' and `make' on +${LLVM_MAIN_SRC_DIR}. +This may cause problems. The suspicious files are: +${tablegenned_files_on_lib_dir} +${tablegenned_files_on_include_dir} +Please clean the source directory.") + endif() +endif() + set(LLVM_ALL_TARGETS Alpha ARM From gohman at apple.com Mon Jul 13 17:02:44 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:02:44 -0000 Subject: [llvm-commits] [llvm] r75523 - in /llvm/trunk: include/llvm/Analysis/LoopInfo.h include/llvm/CodeGen/MachineLoopInfo.h lib/Analysis/LoopInfo.cpp lib/CodeGen/ScheduleDAGInstrs.cpp Message-ID: <200907132202.n6DM2ibm003370@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:02:44 2009 New Revision: 75523 URL: http://llvm.org/viewvc/llvm-project?rev=75523&view=rev Log: Move isLCSSAForm, isLoopInvariant, getCanonicalInductionVariable, and related functions out of LoopBase and into Loop, since they are specific to BasicBlock-based loops. This also allows the code to be moved out-of-line. Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h llvm/trunk/lib/Analysis/LoopInfo.cpp llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=75523&r1=75522&r2=75523&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/LoopInfo.h (original) +++ llvm/trunk/include/llvm/Analysis/LoopInfo.h Mon Jul 13 17:02:44 2009 @@ -31,11 +31,8 @@ #define LLVM_ANALYSIS_LOOP_INFO_H #include "llvm/Pass.h" -#include "llvm/Constants.h" -#include "llvm/Instructions.h" #include "llvm/ADT/DepthFirstIterator.h" #include "llvm/ADT/GraphTraits.h" -#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Analysis/Dominators.h" #include "llvm/Support/CFG.h" @@ -147,14 +144,6 @@ return NumBackEdges; } - /// isLoopInvariant - Return true if the specified value is loop invariant - /// - inline bool isLoopInvariant(Value *V) const { - if (Instruction *I = dyn_cast(V)) - return !contains(I->getParent()); - return true; // All non-instructions are loop invariant - } - //===--------------------------------------------------------------------===// // APIs for simple analysis of the loop. // @@ -356,178 +345,6 @@ return Latch; } - - /// getCanonicalInductionVariable - Check to see if the loop has a canonical - /// induction variable: an integer recurrence that starts at 0 and increments - /// by one each time through the loop. If so, return the phi node that - /// corresponds to it. - /// - /// The IndVarSimplify pass transforms loops to have a canonical induction - /// variable. - /// - inline PHINode *getCanonicalInductionVariable() const { - BlockT *H = getHeader(); - - BlockT *Incoming = 0, *Backedge = 0; - typedef GraphTraits > InvBlockTraits; - typename InvBlockTraits::ChildIteratorType PI = - InvBlockTraits::child_begin(H); - assert(PI != InvBlockTraits::child_end(H) && - "Loop must have at least one backedge!"); - Backedge = *PI++; - if (PI == InvBlockTraits::child_end(H)) return 0; // dead loop - Incoming = *PI++; - if (PI != InvBlockTraits::child_end(H)) return 0; // multiple backedges? - - if (contains(Incoming)) { - if (contains(Backedge)) - return 0; - std::swap(Incoming, Backedge); - } else if (!contains(Backedge)) - return 0; - - // Loop over all of the PHI nodes, looking for a canonical indvar. - for (typename BlockT::iterator I = H->begin(); isa(I); ++I) { - PHINode *PN = cast(I); - if (ConstantInt *CI = - dyn_cast(PN->getIncomingValueForBlock(Incoming))) - if (CI->isNullValue()) - if (Instruction *Inc = - dyn_cast(PN->getIncomingValueForBlock(Backedge))) - if (Inc->getOpcode() == Instruction::Add && - Inc->getOperand(0) == PN) - if (ConstantInt *CI = dyn_cast(Inc->getOperand(1))) - if (CI->equalsInt(1)) - return PN; - } - return 0; - } - - /// getCanonicalInductionVariableIncrement - Return the LLVM value that holds - /// the canonical induction variable value for the "next" iteration of the - /// loop. This always succeeds if getCanonicalInductionVariable succeeds. - /// - inline Instruction *getCanonicalInductionVariableIncrement() const { - if (PHINode *PN = getCanonicalInductionVariable()) { - bool P1InLoop = contains(PN->getIncomingBlock(1)); - return cast(PN->getIncomingValue(P1InLoop)); - } - return 0; - } - - /// getTripCount - Return a loop-invariant LLVM value indicating the number of - /// times the loop will be executed. Note that this means that the backedge - /// of the loop executes N-1 times. If the trip-count cannot be determined, - /// this returns null. - /// - /// The IndVarSimplify pass transforms loops to have a form that this - /// function easily understands. - /// - inline Value *getTripCount() const { - // Canonical loops will end with a 'cmp ne I, V', where I is the incremented - // canonical induction variable and V is the trip count of the loop. - Instruction *Inc = getCanonicalInductionVariableIncrement(); - if (Inc == 0) return 0; - PHINode *IV = cast(Inc->getOperand(0)); - - BlockT *BackedgeBlock = - IV->getIncomingBlock(contains(IV->getIncomingBlock(1))); - - if (BranchInst *BI = dyn_cast(BackedgeBlock->getTerminator())) - if (BI->isConditional()) { - if (ICmpInst *ICI = dyn_cast(BI->getCondition())) { - if (ICI->getOperand(0) == Inc) { - if (BI->getSuccessor(0) == getHeader()) { - if (ICI->getPredicate() == ICmpInst::ICMP_NE) - return ICI->getOperand(1); - } else if (ICI->getPredicate() == ICmpInst::ICMP_EQ) { - return ICI->getOperand(1); - } - } - } - } - - return 0; - } - - /// getSmallConstantTripCount - Returns the trip count of this loop as a - /// normal unsigned value, if possible. Returns 0 if the trip count is unknown - /// of not constant. Will also return 0 if the trip count is very large - /// (>= 2^32) - inline unsigned getSmallConstantTripCount() const { - Value* TripCount = this->getTripCount(); - if (TripCount) { - if (ConstantInt *TripCountC = dyn_cast(TripCount)) { - // Guard against huge trip counts. - if (TripCountC->getValue().getActiveBits() <= 32) { - return (unsigned)TripCountC->getZExtValue(); - } - } - } - return 0; - } - - /// getSmallConstantTripMultiple - Returns the largest constant divisor of the - /// trip count of this loop as a normal unsigned value, if possible. This - /// means that the actual trip count is always a multiple of the returned - /// value (don't forget the trip count could very well be zero as well!). - /// - /// Returns 1 if the trip count is unknown or not guaranteed to be the - /// multiple of a constant (which is also the case if the trip count is simply - /// constant, use getSmallConstantTripCount for that case), Will also return 1 - /// if the trip count is very large (>= 2^32). - inline unsigned getSmallConstantTripMultiple() const { - Value* TripCount = this->getTripCount(); - // This will hold the ConstantInt result, if any - ConstantInt *Result = NULL; - if (TripCount) { - // See if the trip count is constant itself - Result = dyn_cast(TripCount); - // if not, see if it is a multiplication - if (!Result) - if (BinaryOperator *BO = dyn_cast(TripCount)) { - switch (BO->getOpcode()) { - case BinaryOperator::Mul: - Result = dyn_cast(BO->getOperand(1)); - break; - default: - break; - } - } - } - // Guard against huge trip counts. - if (Result && Result->getValue().getActiveBits() <= 32) { - return (unsigned)Result->getZExtValue(); - } else { - return 1; - } - } - - /// isLCSSAForm - Return true if the Loop is in LCSSA form - inline bool isLCSSAForm() const { - // Sort the blocks vector so that we can use binary search to do quick - // lookups. - SmallPtrSet LoopBBs(block_begin(), block_end()); - - for (block_iterator BI = block_begin(), E = block_end(); BI != E; ++BI) { - BlockT *BB = *BI; - for (typename BlockT::iterator I = BB->begin(), E = BB->end(); I != E;++I) - for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; - ++UI) { - BlockT *UserBB = cast(*UI)->getParent(); - if (PHINode *P = dyn_cast(*UI)) { - UserBB = P->getIncomingBlock(UI); - } - - // Check the current block, as a fast-path. Most values are used in - // the same block they are defined in. - if (UserBB != BB && !LoopBBs.count(UserBB)) - return false; - } - } - - return true; - } //===--------------------------------------------------------------------===// // APIs for updating loop information after changing the CFG @@ -654,6 +471,57 @@ class Loop : public LoopBase { public: Loop() {} + + /// isLoopInvariant - Return true if the specified value is loop invariant + /// + bool isLoopInvariant(Value *V) const; + + /// getCanonicalInductionVariable - Check to see if the loop has a canonical + /// induction variable: an integer recurrence that starts at 0 and increments + /// by one each time through the loop. If so, return the phi node that + /// corresponds to it. + /// + /// The IndVarSimplify pass transforms loops to have a canonical induction + /// variable. + /// + PHINode *getCanonicalInductionVariable() const; + + /// getCanonicalInductionVariableIncrement - Return the LLVM value that holds + /// the canonical induction variable value for the "next" iteration of the + /// loop. This always succeeds if getCanonicalInductionVariable succeeds. + /// + Instruction *getCanonicalInductionVariableIncrement() const; + + /// getTripCount - Return a loop-invariant LLVM value indicating the number of + /// times the loop will be executed. Note that this means that the backedge + /// of the loop executes N-1 times. If the trip-count cannot be determined, + /// this returns null. + /// + /// The IndVarSimplify pass transforms loops to have a form that this + /// function easily understands. + /// + Value *getTripCount() const; + + /// getSmallConstantTripCount - Returns the trip count of this loop as a + /// normal unsigned value, if possible. Returns 0 if the trip count is unknown + /// of not constant. Will also return 0 if the trip count is very large + /// (>= 2^32) + unsigned getSmallConstantTripCount() const; + + /// getSmallConstantTripMultiple - Returns the largest constant divisor of the + /// trip count of this loop as a normal unsigned value, if possible. This + /// means that the actual trip count is always a multiple of the returned + /// value (don't forget the trip count could very well be zero as well!). + /// + /// Returns 1 if the trip count is unknown or not guaranteed to be the + /// multiple of a constant (which is also the case if the trip count is simply + /// constant, use getSmallConstantTripCount for that case), Will also return 1 + /// if the trip count is very large (>= 2^32). + unsigned getSmallConstantTripMultiple() const; + + /// isLCSSAForm - Return true if the Loop is in LCSSA form + bool isLCSSAForm() const; + private: friend class LoopInfoBase; explicit Loop(BasicBlock *BB) : LoopBase(BB) {} Modified: llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h?rev=75523&r1=75522&r2=75523&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineLoopInfo.h Mon Jul 13 17:02:44 2009 @@ -35,45 +35,6 @@ namespace llvm { -class MachineLoop; - -// Provide overrides for Loop methods that don't make sense for machine loops. -template<> inline -PHINode * -LoopBase::getCanonicalInductionVariable() const { - assert(0 && "getCanonicalInductionVariable not supported for machine loops!"); - return 0; -} - -template<> inline Instruction* -LoopBase::getCanonicalInductionVariableIncrement() const { - assert(0 && - "getCanonicalInductionVariableIncrement not supported for machine loops!"); - return 0; -} - -template<> -inline bool -LoopBase::isLoopInvariant(Value *V) const { - assert(0 && "isLoopInvariant not supported for machine loops!"); - return false; -} - -template<> -inline Value * -LoopBase::getTripCount() const { - assert(0 && "getTripCount not supported for machine loops!"); - return 0; -} - -template<> -inline bool -LoopBase::isLCSSAForm() const { - assert(0 && "isLCSSAForm not supported for machine loops"); - return false; -} - class MachineLoop : public LoopBase { public: MachineLoop(); Modified: llvm/trunk/lib/Analysis/LoopInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopInfo.cpp?rev=75523&r1=75522&r2=75523&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/LoopInfo.cpp (original) +++ llvm/trunk/lib/Analysis/LoopInfo.cpp Mon Jul 13 17:02:44 2009 @@ -34,6 +34,184 @@ // Loop implementation // +/// isLoopInvariant - Return true if the specified value is loop invariant +/// +bool Loop::isLoopInvariant(Value *V) const { + if (Instruction *I = dyn_cast(V)) + return !contains(I->getParent()); + return true; // All non-instructions are loop invariant +} + +/// getCanonicalInductionVariable - Check to see if the loop has a canonical +/// induction variable: an integer recurrence that starts at 0 and increments +/// by one each time through the loop. If so, return the phi node that +/// corresponds to it. +/// +/// The IndVarSimplify pass transforms loops to have a canonical induction +/// variable. +/// +PHINode *Loop::getCanonicalInductionVariable() const { + BasicBlock *H = getHeader(); + + BasicBlock *Incoming = 0, *Backedge = 0; + typedef GraphTraits > InvBlockTraits; + InvBlockTraits::ChildIteratorType PI = InvBlockTraits::child_begin(H); + assert(PI != InvBlockTraits::child_end(H) && + "Loop must have at least one backedge!"); + Backedge = *PI++; + if (PI == InvBlockTraits::child_end(H)) return 0; // dead loop + Incoming = *PI++; + if (PI != InvBlockTraits::child_end(H)) return 0; // multiple backedges? + + if (contains(Incoming)) { + if (contains(Backedge)) + return 0; + std::swap(Incoming, Backedge); + } else if (!contains(Backedge)) + return 0; + + // Loop over all of the PHI nodes, looking for a canonical indvar. + for (BasicBlock::iterator I = H->begin(); isa(I); ++I) { + PHINode *PN = cast(I); + if (ConstantInt *CI = + dyn_cast(PN->getIncomingValueForBlock(Incoming))) + if (CI->isNullValue()) + if (Instruction *Inc = + dyn_cast(PN->getIncomingValueForBlock(Backedge))) + if (Inc->getOpcode() == Instruction::Add && + Inc->getOperand(0) == PN) + if (ConstantInt *CI = dyn_cast(Inc->getOperand(1))) + if (CI->equalsInt(1)) + return PN; + } + return 0; +} + +/// getCanonicalInductionVariableIncrement - Return the LLVM value that holds +/// the canonical induction variable value for the "next" iteration of the +/// loop. This always succeeds if getCanonicalInductionVariable succeeds. +/// +Instruction *Loop::getCanonicalInductionVariableIncrement() const { + if (PHINode *PN = getCanonicalInductionVariable()) { + bool P1InLoop = contains(PN->getIncomingBlock(1)); + return cast(PN->getIncomingValue(P1InLoop)); + } + return 0; +} + +/// getTripCount - Return a loop-invariant LLVM value indicating the number of +/// times the loop will be executed. Note that this means that the backedge +/// of the loop executes N-1 times. If the trip-count cannot be determined, +/// this returns null. +/// +/// The IndVarSimplify pass transforms loops to have a form that this +/// function easily understands. +/// +Value *Loop::getTripCount() const { + // Canonical loops will end with a 'cmp ne I, V', where I is the incremented + // canonical induction variable and V is the trip count of the loop. + Instruction *Inc = getCanonicalInductionVariableIncrement(); + if (Inc == 0) return 0; + PHINode *IV = cast(Inc->getOperand(0)); + + BasicBlock *BackedgeBlock = + IV->getIncomingBlock(contains(IV->getIncomingBlock(1))); + + if (BranchInst *BI = dyn_cast(BackedgeBlock->getTerminator())) + if (BI->isConditional()) { + if (ICmpInst *ICI = dyn_cast(BI->getCondition())) { + if (ICI->getOperand(0) == Inc) { + if (BI->getSuccessor(0) == getHeader()) { + if (ICI->getPredicate() == ICmpInst::ICMP_NE) + return ICI->getOperand(1); + } else if (ICI->getPredicate() == ICmpInst::ICMP_EQ) { + return ICI->getOperand(1); + } + } + } + } + + return 0; +} + +/// getSmallConstantTripCount - Returns the trip count of this loop as a +/// normal unsigned value, if possible. Returns 0 if the trip count is unknown +/// of not constant. Will also return 0 if the trip count is very large +/// (>= 2^32) +unsigned Loop::getSmallConstantTripCount() const { + Value* TripCount = this->getTripCount(); + if (TripCount) { + if (ConstantInt *TripCountC = dyn_cast(TripCount)) { + // Guard against huge trip counts. + if (TripCountC->getValue().getActiveBits() <= 32) { + return (unsigned)TripCountC->getZExtValue(); + } + } + } + return 0; +} + +/// getSmallConstantTripMultiple - Returns the largest constant divisor of the +/// trip count of this loop as a normal unsigned value, if possible. This +/// means that the actual trip count is always a multiple of the returned +/// value (don't forget the trip count could very well be zero as well!). +/// +/// Returns 1 if the trip count is unknown or not guaranteed to be the +/// multiple of a constant (which is also the case if the trip count is simply +/// constant, use getSmallConstantTripCount for that case), Will also return 1 +/// if the trip count is very large (>= 2^32). +unsigned Loop::getSmallConstantTripMultiple() const { + Value* TripCount = this->getTripCount(); + // This will hold the ConstantInt result, if any + ConstantInt *Result = NULL; + if (TripCount) { + // See if the trip count is constant itself + Result = dyn_cast(TripCount); + // if not, see if it is a multiplication + if (!Result) + if (BinaryOperator *BO = dyn_cast(TripCount)) { + switch (BO->getOpcode()) { + case BinaryOperator::Mul: + Result = dyn_cast(BO->getOperand(1)); + break; + default: + break; + } + } + } + // Guard against huge trip counts. + if (Result && Result->getValue().getActiveBits() <= 32) { + return (unsigned)Result->getZExtValue(); + } else { + return 1; + } +} + +/// isLCSSAForm - Return true if the Loop is in LCSSA form +bool Loop::isLCSSAForm() const { + // Sort the blocks vector so that we can use binary search to do quick + // lookups. + SmallPtrSet LoopBBs(block_begin(), block_end()); + + for (block_iterator BI = block_begin(), E = block_end(); BI != E; ++BI) { + BasicBlock *BB = *BI; + for (BasicBlock ::iterator I = BB->begin(), E = BB->end(); I != E;++I) + for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; + ++UI) { + BasicBlock *UserBB = cast(*UI)->getParent(); + if (PHINode *P = dyn_cast(*UI)) { + UserBB = P->getIncomingBlock(UI); + } + + // Check the current block, as a fast-path. Most values are used in + // the same block they are defined in. + if (UserBB != BB && !LoopBBs.count(UserBB)) + return false; + } + } + + return true; +} //===----------------------------------------------------------------------===// // LoopInfo implementation // Modified: llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp?rev=75523&r1=75522&r2=75523&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp (original) +++ llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp Mon Jul 13 17:02:44 2009 @@ -14,6 +14,7 @@ #define DEBUG_TYPE "sched-instrs" #include "ScheduleDAGInstrs.h" +#include "llvm/Constants.h" #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineRegisterInfo.h" From gohman at apple.com Mon Jul 13 17:04:06 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:04:06 -0000 Subject: [llvm-commits] [llvm] r75524 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp Message-ID: <200907132204.n6DM47sl003431@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:04:06 2009 New Revision: 75524 URL: http://llvm.org/viewvc/llvm-project?rev=75524&view=rev Log: Fix an 80-column violation. Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75524&r1=75523&r2=75524&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 17:04:06 2009 @@ -3091,10 +3091,10 @@ if (It != Scalars.end()) { // SCEVUnknown for a PHI either means that it has an unrecognized // structure, or it's a PHI that's in the progress of being computed - // by createNodeForPHI. In the former case, additional loop trip count - // information isn't going to change anything. In the later case, - // createNodeForPHI will perform the necessary updates on its own when - // it gets to that point. + // by createNodeForPHI. In the former case, additional loop trip + // count information isn't going to change anything. In the later + // case, createNodeForPHI will perform the necessary updates on its + // own when it gets to that point. if (!isa(I) || !isa(It->second)) Scalars.erase(It); ValuesAtScopes.erase(I); From gohman at apple.com Mon Jul 13 17:05:33 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:05:33 -0000 Subject: [llvm-commits] [llvm] r75525 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp Message-ID: <200907132205.n6DM5Xiu003490@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:05:32 2009 New Revision: 75525 URL: http://llvm.org/viewvc/llvm-project?rev=75525&view=rev Log: Whitespace cleanups. Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75525&r1=75524&r2=75525&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 17:05:32 2009 @@ -704,7 +704,7 @@ //===----------------------------------------------------------------------===// const SCEV *ScalarEvolution::getTruncateExpr(const SCEV *Op, - const Type *Ty) { + const Type *Ty) { assert(getTypeSizeInBits(Op->getType()) > getTypeSizeInBits(Ty) && "This is not a truncating conversion!"); assert(isSCEVable(Ty) && @@ -753,7 +753,7 @@ } const SCEV *ScalarEvolution::getZeroExtendExpr(const SCEV *Op, - const Type *Ty) { + const Type *Ty) { assert(getTypeSizeInBits(Op->getType()) < getTypeSizeInBits(Ty) && "This is not an extending conversion!"); assert(isSCEVable(Ty) && @@ -885,7 +885,7 @@ } const SCEV *ScalarEvolution::getSignExtendExpr(const SCEV *Op, - const Type *Ty) { + const Type *Ty) { assert(getTypeSizeInBits(Op->getType()) < getTypeSizeInBits(Ty) && "This is not an extending conversion!"); assert(isSCEVable(Ty) && @@ -4581,8 +4581,8 @@ /// rounding up, to get the number of times the backedge is executed. Return /// CouldNotCompute if an intermediate computation overflows. const SCEV *ScalarEvolution::getBECount(const SCEV *Start, - const SCEV *End, - const SCEV *Step) { + const SCEV *End, + const SCEV *Step) { const Type *Ty = Start->getType(); const SCEV *NegOne = getIntegerSCEV(-1, Ty); const SCEV *Diff = getMinusSCEV(End, Start); From nlewycky at google.com Mon Jul 13 17:06:08 2009 From: nlewycky at google.com (Nick Lewycky) Date: Mon, 13 Jul 2009 15:06:08 -0700 Subject: [llvm-commits] [llvm] r75511 - in /llvm/trunk: include/llvm/Analysis/ScalarEvolution.h lib/Analysis/ScalarEvolution.cpp test/Transforms/IndVarSimplify/iv-sext.ll In-Reply-To: <200907132135.n6DLZuY0002406@zion.cs.uiuc.edu> References: <200907132135.n6DLZuY0002406@zion.cs.uiuc.edu> Message-ID: Hi Dan, Great to see this patch back in. Could you also add a testcase for the infinite loop? Nick 2009/7/13 Dan Gohman > Author: djg > Date: Mon Jul 13 16:35:55 2009 > New Revision: 75511 > > URL: http://llvm.org/viewvc/llvm-project?rev=75511&view=rev > Log: > Reapply 75252, with a fix to avoid the infinite recursion case. The > check for avoiding re-analyzing a widening cast needed to happen > earlier, as getSCEV itself may result in a isLoopGuardedByCond query. > > Modified: > llvm/trunk/include/llvm/Analysis/ScalarEvolution.h > llvm/trunk/lib/Analysis/ScalarEvolution.cpp > llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll > > Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=75511&r1=75510&r2=75511&view=diff > > > ============================================================================== > --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) > +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Mon Jul 13 16:35:55 > 2009 > @@ -26,6 +26,7 @@ > #include "llvm/Support/DataTypes.h" > #include "llvm/Support/ValueHandle.h" > #include "llvm/Support/Allocator.h" > +#include "llvm/Support/ConstantRange.h" > #include "llvm/ADT/FoldingSet.h" > #include "llvm/ADT/DenseMap.h" > #include > @@ -330,12 +331,20 @@ > /// found. > BasicBlock* getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB); > > - /// isNecessaryCond - Test whether the given CondValue value is a > condition > - /// which is at least as strict as the one described by Pred, LHS, and > RHS. > + /// isNecessaryCond - Test whether the condition described by Pred, > LHS, > + /// and RHS is a necessary condition for the given Cond value to > evaluate > + /// to true. > bool isNecessaryCond(Value *Cond, ICmpInst::Predicate Pred, > const SCEV *LHS, const SCEV *RHS, > bool Inverse); > > + /// isNecessaryCondOperands - Test whether the condition described by > Pred, > + /// LHS, and RHS is a necessary condition for the condition described > by > + /// Pred, FoundLHS, and FoundRHS to evaluate to true. > + bool isNecessaryCondOperands(ICmpInst::Predicate Pred, > + const SCEV *LHS, const SCEV *RHS, > + const SCEV *FoundLHS, const SCEV > *FoundRHS); > + > /// getConstantEvolutionLoopExitValue - If we know that the specified > Phi is > /// in the header of its containing loop, we know the loop executes a > /// constant number of times, and the PHI node is just a recurrence > @@ -495,10 +504,16 @@ > > /// isLoopGuardedByCond - Test whether entry to the loop is protected > by > /// a conditional between LHS and RHS. This is used to help avoid max > - /// expressions in loop trip counts. > + /// expressions in loop trip counts, and to eliminate casts. > bool isLoopGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, > const SCEV *LHS, const SCEV *RHS); > > + /// isLoopBackedgeGuardedByCond - Test whether the backedge of the > loop is > + /// protected by a conditional between LHS and RHS. This is used to > + /// to eliminate casts. > + bool isLoopBackedgeGuardedByCond(const Loop *L, ICmpInst::Predicate > Pred, > + const SCEV *LHS, const SCEV *RHS); > + > /// getBackedgeTakenCount - If the specified loop has a predictable > /// backedge-taken count, return it, otherwise return a > SCEVCouldNotCompute > /// object. The backedge-taken count is the number of times the loop > header > @@ -534,13 +549,42 @@ > /// bitwidth of S. > uint32_t GetMinTrailingZeros(const SCEV *S); > > - /// GetMinLeadingZeros - Determine the minimum number of zero bits > that S is > - /// guaranteed to begin with (at every loop iteration). > - uint32_t GetMinLeadingZeros(const SCEV *S); > - > - /// GetMinSignBits - Determine the minimum number of sign bits that S > is > - /// guaranteed to begin with. > - uint32_t GetMinSignBits(const SCEV *S); > + /// getUnsignedRange - Determine the unsigned range for a particular > SCEV. > + /// > + ConstantRange getUnsignedRange(const SCEV *S); > + > + /// getSignedRange - Determine the signed range for a particular SCEV. > + /// > + ConstantRange getSignedRange(const SCEV *S); > + > + /// isKnownNegative - Test if the given expression is known to be > negative. > + /// > + bool isKnownNegative(const SCEV *S); > + > + /// isKnownPositive - Test if the given expression is known to be > positive. > + /// > + bool isKnownPositive(const SCEV *S); > + > + /// isKnownNonNegative - Test if the given expression is known to be > + /// non-negative. > + /// > + bool isKnownNonNegative(const SCEV *S); > + > + /// isKnownNonPositive - Test if the given expression is known to be > + /// non-positive. > + /// > + bool isKnownNonPositive(const SCEV *S); > + > + /// isKnownNonZero - Test if the given expression is known to be > + /// non-zero. > + /// > + bool isKnownNonZero(const SCEV *S); > + > + /// isKnownNonZero - Test if the given expression is known to satisfy > + /// the condition described by Pred, LHS, and RHS. > + /// > + bool isKnownPredicate(ICmpInst::Predicate Pred, > + const SCEV *LHS, const SCEV *RHS); > > virtual bool runOnFunction(Function &F); > virtual void releaseMemory(); > > Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75511&r1=75510&r2=75511&view=diff > > > ============================================================================== > --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) > +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 16:35:55 2009 > @@ -787,6 +787,11 @@ > // this: for (unsigned char X = 0; X < 100; ++X) { int Y = X; } > if (const SCEVAddRecExpr *AR = dyn_cast(Op)) > if (AR->isAffine()) { > + const SCEV *Start = AR->getStart(); > + const SCEV *Step = AR->getStepRecurrence(*this); > + unsigned BitWidth = getTypeSizeInBits(AR->getType()); > + const Loop *L = AR->getLoop(); > + > // Check whether the backedge-taken count is SCEVCouldNotCompute. > // Note that this serves two purposes: It filters out loops that are > // simply not analyzable, and it covers the case where this code is > @@ -795,12 +800,10 @@ > // in infinite recursion. In the later case, the analysis code will > // cope with a conservative value, and it will take care to purge > // that value once it has finished. > - const SCEV *MaxBECount = getMaxBackedgeTakenCount(AR->getLoop()); > + const SCEV *MaxBECount = getMaxBackedgeTakenCount(L); > if (!isa(MaxBECount)) { > // Manually compute the final value for AR, checking for > // overflow. > - const SCEV *Start = AR->getStart(); > - const SCEV *Step = AR->getStepRecurrence(*this); > > // Check whether the backedge-taken count can be losslessly casted > to > // the addrec's type. The count is always unsigned. > @@ -809,8 +812,7 @@ > const SCEV *RecastedMaxBECount = > getTruncateOrZeroExtend(CastedMaxBECount, MaxBECount->getType()); > if (MaxBECount == RecastedMaxBECount) { > - const Type *WideTy = > - IntegerType::get(getTypeSizeInBits(Start->getType()) * 2); > + const Type *WideTy = IntegerType::get(BitWidth * 2); > // Check whether Start+Step*MaxBECount has no unsigned overflow. > const SCEV *ZMul = > getMulExpr(CastedMaxBECount, > @@ -824,7 +826,7 @@ > // Return the expression with the addrec on the outside. > return getAddRecExpr(getZeroExtendExpr(Start, Ty), > getZeroExtendExpr(Step, Ty), > - AR->getLoop()); > + L); > > // Similar to above, only this time treat the step value as > signed. > // This covers loops that count down. > @@ -840,7 +842,35 @@ > // Return the expression with the addrec on the outside. > return getAddRecExpr(getZeroExtendExpr(Start, Ty), > getSignExtendExpr(Step, Ty), > - AR->getLoop()); > + L); > + } > + > + // If the backedge is guarded by a comparison with the pre-inc > value > + // the addrec is safe. Also, if the entry is guarded by a > comparison > + // with the start value and the backedge is guarded by a > comparison > + // with the post-inc value, the addrec is safe. > + if (isKnownPositive(Step)) { > + const SCEV *N = getConstant(APInt::getMinValue(BitWidth) - > + > getUnsignedRange(Step).getUnsignedMax()); > + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_ULT, AR, N) || > + (isLoopGuardedByCond(L, ICmpInst::ICMP_ULT, Start, N) && > + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_ULT, > + AR->getPostIncExpr(*this), N))) > + // Return the expression with the addrec on the outside. > + return getAddRecExpr(getZeroExtendExpr(Start, Ty), > + getZeroExtendExpr(Step, Ty), > + L); > + } else if (isKnownNegative(Step)) { > + const SCEV *N = getConstant(APInt::getMaxValue(BitWidth) - > + > getSignedRange(Step).getSignedMin()); > + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_UGT, AR, N) && > + (isLoopGuardedByCond(L, ICmpInst::ICMP_UGT, Start, N) || > + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_UGT, > + AR->getPostIncExpr(*this), N))) > + // Return the expression with the addrec on the outside. > + return getAddRecExpr(getZeroExtendExpr(Start, Ty), > + getSignExtendExpr(Step, Ty), > + L); > } > } > } > @@ -889,6 +919,11 @@ > // this: for (signed char X = 0; X < 100; ++X) { int Y = X; } > if (const SCEVAddRecExpr *AR = dyn_cast(Op)) > if (AR->isAffine()) { > + const SCEV *Start = AR->getStart(); > + const SCEV *Step = AR->getStepRecurrence(*this); > + unsigned BitWidth = getTypeSizeInBits(AR->getType()); > + const Loop *L = AR->getLoop(); > + > // Check whether the backedge-taken count is SCEVCouldNotCompute. > // Note that this serves two purposes: It filters out loops that are > // simply not analyzable, and it covers the case where this code is > @@ -897,12 +932,10 @@ > // in infinite recursion. In the later case, the analysis code will > // cope with a conservative value, and it will take care to purge > // that value once it has finished. > - const SCEV *MaxBECount = getMaxBackedgeTakenCount(AR->getLoop()); > + const SCEV *MaxBECount = getMaxBackedgeTakenCount(L); > if (!isa(MaxBECount)) { > // Manually compute the final value for AR, checking for > // overflow. > - const SCEV *Start = AR->getStart(); > - const SCEV *Step = AR->getStepRecurrence(*this); > > // Check whether the backedge-taken count can be losslessly casted > to > // the addrec's type. The count is always unsigned. > @@ -911,8 +944,7 @@ > const SCEV *RecastedMaxBECount = > getTruncateOrZeroExtend(CastedMaxBECount, MaxBECount->getType()); > if (MaxBECount == RecastedMaxBECount) { > - const Type *WideTy = > - IntegerType::get(getTypeSizeInBits(Start->getType()) * 2); > + const Type *WideTy = IntegerType::get(BitWidth * 2); > // Check whether Start+Step*MaxBECount has no signed overflow. > const SCEV *SMul = > getMulExpr(CastedMaxBECount, > @@ -926,7 +958,35 @@ > // Return the expression with the addrec on the outside. > return getAddRecExpr(getSignExtendExpr(Start, Ty), > getSignExtendExpr(Step, Ty), > - AR->getLoop()); > + L); > + } > + > + // If the backedge is guarded by a comparison with the pre-inc > value > + // the addrec is safe. Also, if the entry is guarded by a > comparison > + // with the start value and the backedge is guarded by a > comparison > + // with the post-inc value, the addrec is safe. > + if (isKnownPositive(Step)) { > + const SCEV *N = getConstant(APInt::getSignedMinValue(BitWidth) - > + > getSignedRange(Step).getSignedMax()); > + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SLT, AR, N) || > + (isLoopGuardedByCond(L, ICmpInst::ICMP_SLT, Start, N) && > + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SLT, > + AR->getPostIncExpr(*this), N))) > + // Return the expression with the addrec on the outside. > + return getAddRecExpr(getSignExtendExpr(Start, Ty), > + getSignExtendExpr(Step, Ty), > + L); > + } else if (isKnownNegative(Step)) { > + const SCEV *N = getConstant(APInt::getSignedMaxValue(BitWidth) - > + > getSignedRange(Step).getSignedMin()); > + if (isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SGT, AR, N) || > + (isLoopGuardedByCond(L, ICmpInst::ICMP_SGT, Start, N) && > + isLoopBackedgeGuardedByCond(L, ICmpInst::ICMP_SGT, > + AR->getPostIncExpr(*this), N))) > + // Return the expression with the addrec on the outside. > + return getAddRecExpr(getSignExtendExpr(Start, Ty), > + getSignExtendExpr(Step, Ty), > + L); > } > } > } > @@ -2368,19 +2428,16 @@ > const StructLayout &SL = *TD->getStructLayout(STy); > unsigned FieldNo = cast(Index)->getZExtValue(); > uint64_t Offset = SL.getElementOffset(FieldNo); > - TotalOffset = getAddExpr(TotalOffset, > - getIntegerSCEV(Offset, IntPtrTy)); > + TotalOffset = getAddExpr(TotalOffset, getIntegerSCEV(Offset, > IntPtrTy)); > } else { > // For an array, add the element offset, explicitly scaled. > const SCEV *LocalOffset = getSCEV(Index); > if (!isa(LocalOffset->getType())) > // Getelementptr indicies are signed. > - LocalOffset = getTruncateOrSignExtend(LocalOffset, > - IntPtrTy); > + LocalOffset = getTruncateOrSignExtend(LocalOffset, IntPtrTy); > LocalOffset = > getMulExpr(LocalOffset, > - getIntegerSCEV(TD->getTypeAllocSize(*GTI), > - IntPtrTy)); > + getIntegerSCEV(TD->getTypeAllocSize(*GTI), IntPtrTy)); > TotalOffset = getAddExpr(TotalOffset, LocalOffset); > } > } > @@ -2468,18 +2525,95 @@ > return 0; > } > > -uint32_t > -ScalarEvolution::GetMinLeadingZeros(const SCEV *S) { > - // TODO: Handle other SCEV expression types here. > +/// getUnsignedRange - Determine the unsigned range for a particular SCEV. > +/// > +ConstantRange > +ScalarEvolution::getUnsignedRange(const SCEV *S) { > > if (const SCEVConstant *C = dyn_cast(S)) > - return C->getValue()->getValue().countLeadingZeros(); > + return ConstantRange(C->getValue()->getValue()); > + > + if (const SCEVAddExpr *Add = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(Add->getOperand(0)); > + for (unsigned i = 1, e = Add->getNumOperands(); i != e; ++i) > + X = X.add(getUnsignedRange(Add->getOperand(i))); > + return X; > + } > + > + if (const SCEVMulExpr *Mul = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(Mul->getOperand(0)); > + for (unsigned i = 1, e = Mul->getNumOperands(); i != e; ++i) > + X = X.multiply(getUnsignedRange(Mul->getOperand(i))); > + return X; > + } > + > + if (const SCEVSMaxExpr *SMax = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(SMax->getOperand(0)); > + for (unsigned i = 1, e = SMax->getNumOperands(); i != e; ++i) > + X = X.smax(getUnsignedRange(SMax->getOperand(i))); > + return X; > + } > + > + if (const SCEVUMaxExpr *UMax = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(UMax->getOperand(0)); > + for (unsigned i = 1, e = UMax->getNumOperands(); i != e; ++i) > + X = X.umax(getUnsignedRange(UMax->getOperand(i))); > + return X; > + } > + > + if (const SCEVUDivExpr *UDiv = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(UDiv->getLHS()); > + ConstantRange Y = getUnsignedRange(UDiv->getRHS()); > + return X.udiv(Y); > + } > + > + if (const SCEVZeroExtendExpr *ZExt = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(ZExt->getOperand()); > + return > X.zeroExtend(cast(ZExt->getType())->getBitWidth()); > + } > + > + if (const SCEVSignExtendExpr *SExt = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(SExt->getOperand()); > + return > X.signExtend(cast(SExt->getType())->getBitWidth()); > + } > + > + if (const SCEVTruncateExpr *Trunc = dyn_cast(S)) { > + ConstantRange X = getUnsignedRange(Trunc->getOperand()); > + return X.truncate(cast(Trunc->getType())->getBitWidth()); > + } > + > + ConstantRange FullSet(getTypeSizeInBits(S->getType()), true); > > - if (const SCEVZeroExtendExpr *C = dyn_cast(S)) { > - // A zero-extension cast adds zero bits. > - return GetMinLeadingZeros(C->getOperand()) + > - (getTypeSizeInBits(C->getType()) - > - getTypeSizeInBits(C->getOperand()->getType())); > + if (const SCEVAddRecExpr *AddRec = dyn_cast(S)) { > + const SCEV *T = getBackedgeTakenCount(AddRec->getLoop()); > + const SCEVConstant *Trip = dyn_cast(T); > + if (!Trip) return FullSet; > + > + // TODO: non-affine addrec > + if (AddRec->isAffine()) { > + const Type *Ty = AddRec->getType(); > + const SCEV *MaxBECount = > getMaxBackedgeTakenCount(AddRec->getLoop()); > + if (getTypeSizeInBits(MaxBECount->getType()) <= > getTypeSizeInBits(Ty)) { > + MaxBECount = getNoopOrZeroExtend(MaxBECount, Ty); > + > + const SCEV *Start = AddRec->getStart(); > + const SCEV *End = AddRec->evaluateAtIteration(MaxBECount, *this); > + > + // Check for overflow. > + if (!isKnownPredicate(ICmpInst::ICMP_ULE, Start, End)) > + return FullSet; > + > + ConstantRange StartRange = getUnsignedRange(Start); > + ConstantRange EndRange = getUnsignedRange(End); > + APInt Min = APIntOps::umin(StartRange.getUnsignedMin(), > + EndRange.getUnsignedMin()); > + APInt Max = APIntOps::umax(StartRange.getUnsignedMax(), > + EndRange.getUnsignedMax()); > + if (Min.isMinValue() && Max.isMaxValue()) > + return ConstantRange(Min.getBitWidth(), /*isFullSet=*/true); > + return ConstantRange(Min, Max+1); > + } > + } > } > > if (const SCEVUnknown *U = dyn_cast(S)) { > @@ -2488,67 +2622,119 @@ > APInt Mask = APInt::getAllOnesValue(BitWidth); > APInt Zeros(BitWidth, 0), Ones(BitWidth, 0); > ComputeMaskedBits(U->getValue(), Mask, Zeros, Ones, TD); > - return Zeros.countLeadingOnes(); > + return ConstantRange(Ones, ~Zeros); > } > > - return 1; > + return FullSet; > } > > -uint32_t > -ScalarEvolution::GetMinSignBits(const SCEV *S) { > - // TODO: Handle other SCEV expression types here. > +/// getSignedRange - Determine the signed range for a particular SCEV. > +/// > +ConstantRange > +ScalarEvolution::getSignedRange(const SCEV *S) { > + > + if (const SCEVConstant *C = dyn_cast(S)) > + return ConstantRange(C->getValue()->getValue()); > > - if (const SCEVConstant *C = dyn_cast(S)) { > - const APInt &A = C->getValue()->getValue(); > - return A.isNegative() ? A.countLeadingOnes() : > - A.countLeadingZeros(); > + if (const SCEVAddExpr *Add = dyn_cast(S)) { > + ConstantRange X = getSignedRange(Add->getOperand(0)); > + for (unsigned i = 1, e = Add->getNumOperands(); i != e; ++i) > + X = X.add(getSignedRange(Add->getOperand(i))); > + return X; > } > > - if (const SCEVSignExtendExpr *C = dyn_cast(S)) { > - // A sign-extension cast adds sign bits. > - return GetMinSignBits(C->getOperand()) + > - (getTypeSizeInBits(C->getType()) - > - getTypeSizeInBits(C->getOperand()->getType())); > + if (const SCEVMulExpr *Mul = dyn_cast(S)) { > + ConstantRange X = getSignedRange(Mul->getOperand(0)); > + for (unsigned i = 1, e = Mul->getNumOperands(); i != e; ++i) > + X = X.multiply(getSignedRange(Mul->getOperand(i))); > + return X; > } > > - if (const SCEVAddExpr *A = dyn_cast(S)) { > - unsigned BitWidth = getTypeSizeInBits(A->getType()); > + if (const SCEVSMaxExpr *SMax = dyn_cast(S)) { > + ConstantRange X = getSignedRange(SMax->getOperand(0)); > + for (unsigned i = 1, e = SMax->getNumOperands(); i != e; ++i) > + X = X.smax(getSignedRange(SMax->getOperand(i))); > + return X; > + } > > - // Special case decrementing a value (ADD X, -1): > - if (const SCEVConstant *CRHS = > dyn_cast(A->getOperand(0))) > - if (CRHS->isAllOnesValue()) { > - SmallVector OtherOps(A->op_begin() + 1, > A->op_end()); > - const SCEV *OtherOpsAdd = getAddExpr(OtherOps); > - unsigned LZ = GetMinLeadingZeros(OtherOpsAdd); > - > - // If the input is known to be 0 or 1, the output is 0/-1, which > is all > - // sign bits set. > - if (LZ == BitWidth - 1) > - return BitWidth; > - > - // If we are subtracting one from a positive number, there is no > carry > - // out of the result. > - if (LZ > 0) > - return GetMinSignBits(OtherOpsAdd); > - } > - > - // Add can have at most one carry bit. Thus we know that the output > - // is, at worst, one more bit than the inputs. > - unsigned Min = BitWidth; > - for (unsigned i = 0, e = A->getNumOperands(); i != e; ++i) { > - unsigned N = GetMinSignBits(A->getOperand(i)); > - Min = std::min(Min, N) - 1; > - if (Min == 0) return 1; > + if (const SCEVUMaxExpr *UMax = dyn_cast(S)) { > + ConstantRange X = getSignedRange(UMax->getOperand(0)); > + for (unsigned i = 1, e = UMax->getNumOperands(); i != e; ++i) > + X = X.umax(getSignedRange(UMax->getOperand(i))); > + return X; > + } > + > + if (const SCEVUDivExpr *UDiv = dyn_cast(S)) { > + ConstantRange X = getSignedRange(UDiv->getLHS()); > + ConstantRange Y = getSignedRange(UDiv->getRHS()); > + return X.udiv(Y); > + } > + > + if (const SCEVZeroExtendExpr *ZExt = dyn_cast(S)) { > + ConstantRange X = getSignedRange(ZExt->getOperand()); > + return > X.zeroExtend(cast(ZExt->getType())->getBitWidth()); > + } > + > + if (const SCEVSignExtendExpr *SExt = dyn_cast(S)) { > + ConstantRange X = getSignedRange(SExt->getOperand()); > + return > X.signExtend(cast(SExt->getType())->getBitWidth()); > + } > + > + if (const SCEVTruncateExpr *Trunc = dyn_cast(S)) { > + ConstantRange X = getSignedRange(Trunc->getOperand()); > + return X.truncate(cast(Trunc->getType())->getBitWidth()); > + } > + > + ConstantRange FullSet(getTypeSizeInBits(S->getType()), true); > + > + if (const SCEVAddRecExpr *AddRec = dyn_cast(S)) { > + const SCEV *T = getBackedgeTakenCount(AddRec->getLoop()); > + const SCEVConstant *Trip = dyn_cast(T); > + if (!Trip) return FullSet; > + > + // TODO: non-affine addrec > + if (AddRec->isAffine()) { > + const Type *Ty = AddRec->getType(); > + const SCEV *MaxBECount = > getMaxBackedgeTakenCount(AddRec->getLoop()); > + if (getTypeSizeInBits(MaxBECount->getType()) <= > getTypeSizeInBits(Ty)) { > + MaxBECount = getNoopOrZeroExtend(MaxBECount, Ty); > + > + const SCEV *Start = AddRec->getStart(); > + const SCEV *Step = AddRec->getStepRecurrence(*this); > + const SCEV *End = AddRec->evaluateAtIteration(MaxBECount, *this); > + > + // Check for overflow. > + if (!(isKnownPositive(Step) && > + isKnownPredicate(ICmpInst::ICMP_SLT, Start, End)) && > + !(isKnownNegative(Step) && > + isKnownPredicate(ICmpInst::ICMP_SGT, Start, End))) > + return FullSet; > + > + ConstantRange StartRange = getSignedRange(Start); > + ConstantRange EndRange = getSignedRange(End); > + APInt Min = APIntOps::smin(StartRange.getSignedMin(), > + EndRange.getSignedMin()); > + APInt Max = APIntOps::smax(StartRange.getSignedMax(), > + EndRange.getSignedMax()); > + if (Min.isMinSignedValue() && Max.isMaxSignedValue()) > + return ConstantRange(Min.getBitWidth(), /*isFullSet=*/true); > + return ConstantRange(Min, Max+1); > + } > } > - return 1; > } > > if (const SCEVUnknown *U = dyn_cast(S)) { > // For a SCEVUnknown, ask ValueTracking. > - return ComputeNumSignBits(U->getValue(), TD); > + unsigned BitWidth = getTypeSizeInBits(U->getType()); > + unsigned NS = ComputeNumSignBits(U->getValue(), TD); > + if (NS == 1) > + return FullSet; > + return > + ConstantRange(APInt::getSignedMinValue(BitWidth).ashr(NS - 1), > + APInt::getSignedMaxValue(BitWidth).ashr(NS - 1)+1); > } > > - return 1; > + return FullSet; > } > > /// createSCEV - We know that there is no SCEV for the specified value. > @@ -3628,7 +3814,7 @@ > if (!isSCEVable(Op->getType())) > return V; > > - const SCEV *OpV = getSCEVAtScope(getSCEV(Op), L); > + const SCEV* OpV = getSCEVAtScope(Op, L); > if (const SCEVConstant *SC = dyn_cast(OpV)) { > Constant *C = SC->getValue(); > if (C->getType() != Op->getType()) > @@ -4029,12 +4215,176 @@ > return false; > } > > -/// isLoopGuardedByCond - Test whether entry to the loop is protected by > -/// a conditional between LHS and RHS. This is used to help avoid max > -/// expressions in loop trip counts. > -bool ScalarEvolution::isLoopGuardedByCond(const Loop *L, > - ICmpInst::Predicate Pred, > - const SCEV *LHS, const SCEV > *RHS) { > +bool ScalarEvolution::isKnownNegative(const SCEV *S) { > + return getSignedRange(S).getSignedMax().isNegative(); > +} > + > +bool ScalarEvolution::isKnownPositive(const SCEV *S) { > + return getSignedRange(S).getSignedMin().isStrictlyPositive(); > +} > + > +bool ScalarEvolution::isKnownNonNegative(const SCEV *S) { > + return !getSignedRange(S).getSignedMin().isNegative(); > +} > + > +bool ScalarEvolution::isKnownNonPositive(const SCEV *S) { > + return !getSignedRange(S).getSignedMax().isStrictlyPositive(); > +} > + > +bool ScalarEvolution::isKnownNonZero(const SCEV *S) { > + return isKnownNegative(S) || isKnownPositive(S); > +} > + > +bool ScalarEvolution::isKnownPredicate(ICmpInst::Predicate Pred, > + const SCEV *LHS, const SCEV *RHS) { > + > + if (HasSameValue(LHS, RHS)) > + return ICmpInst::isTrueWhenEqual(Pred); > + > + switch (Pred) { > + default: > + assert(0 && "Unexpected ICmpInst::Predicate value!"); > + break; > + case ICmpInst::ICMP_SGT: > + Pred = ICmpInst::ICMP_SLT; > + std::swap(LHS, RHS); > + case ICmpInst::ICMP_SLT: { > + ConstantRange LHSRange = getSignedRange(LHS); > + ConstantRange RHSRange = getSignedRange(RHS); > + if (LHSRange.getSignedMax().slt(RHSRange.getSignedMin())) > + return true; > + if (LHSRange.getSignedMin().sge(RHSRange.getSignedMax())) > + return false; > + > + const SCEV *Diff = getMinusSCEV(LHS, RHS); > + ConstantRange DiffRange = getUnsignedRange(Diff); > + if (isKnownNegative(Diff)) { > + if (DiffRange.getUnsignedMax().ult(LHSRange.getUnsignedMin())) > + return true; > + if (DiffRange.getUnsignedMin().uge(LHSRange.getUnsignedMax())) > + return false; > + } else if (isKnownPositive(Diff)) { > + if (LHSRange.getUnsignedMax().ult(DiffRange.getUnsignedMin())) > + return true; > + if (LHSRange.getUnsignedMin().uge(DiffRange.getUnsignedMax())) > + return false; > + } > + break; > + } > + case ICmpInst::ICMP_SGE: > + Pred = ICmpInst::ICMP_SLE; > + std::swap(LHS, RHS); > + case ICmpInst::ICMP_SLE: { > + ConstantRange LHSRange = getSignedRange(LHS); > + ConstantRange RHSRange = getSignedRange(RHS); > + if (LHSRange.getSignedMax().sle(RHSRange.getSignedMin())) > + return true; > + if (LHSRange.getSignedMin().sgt(RHSRange.getSignedMax())) > + return false; > + > + const SCEV *Diff = getMinusSCEV(LHS, RHS); > + ConstantRange DiffRange = getUnsignedRange(Diff); > + if (isKnownNonPositive(Diff)) { > + if (DiffRange.getUnsignedMax().ule(LHSRange.getUnsignedMin())) > + return true; > + if (DiffRange.getUnsignedMin().ugt(LHSRange.getUnsignedMax())) > + return false; > + } else if (isKnownNonNegative(Diff)) { > + if (LHSRange.getUnsignedMax().ule(DiffRange.getUnsignedMin())) > + return true; > + if (LHSRange.getUnsignedMin().ugt(DiffRange.getUnsignedMax())) > + return false; > + } > + break; > + } > + case ICmpInst::ICMP_UGT: > + Pred = ICmpInst::ICMP_ULT; > + std::swap(LHS, RHS); > + case ICmpInst::ICMP_ULT: { > + ConstantRange LHSRange = getUnsignedRange(LHS); > + ConstantRange RHSRange = getUnsignedRange(RHS); > + if (LHSRange.getUnsignedMax().ult(RHSRange.getUnsignedMin())) > + return true; > + if (LHSRange.getUnsignedMin().uge(RHSRange.getUnsignedMax())) > + return false; > + > + const SCEV *Diff = getMinusSCEV(LHS, RHS); > + ConstantRange DiffRange = getUnsignedRange(Diff); > + if (LHSRange.getUnsignedMax().ult(DiffRange.getUnsignedMin())) > + return true; > + if (LHSRange.getUnsignedMin().uge(DiffRange.getUnsignedMax())) > + return false; > + break; > + } > + case ICmpInst::ICMP_UGE: > + Pred = ICmpInst::ICMP_ULE; > + std::swap(LHS, RHS); > + case ICmpInst::ICMP_ULE: { > + ConstantRange LHSRange = getUnsignedRange(LHS); > + ConstantRange RHSRange = getUnsignedRange(RHS); > + if (LHSRange.getUnsignedMax().ule(RHSRange.getUnsignedMin())) > + return true; > + if (LHSRange.getUnsignedMin().ugt(RHSRange.getUnsignedMax())) > + return false; > + > + const SCEV *Diff = getMinusSCEV(LHS, RHS); > + ConstantRange DiffRange = getUnsignedRange(Diff); > + if (LHSRange.getUnsignedMax().ule(DiffRange.getUnsignedMin())) > + return true; > + if (LHSRange.getUnsignedMin().ugt(DiffRange.getUnsignedMax())) > + return false; > + break; > + } > + case ICmpInst::ICMP_NE: { > + if > (getUnsignedRange(LHS).intersectWith(getUnsignedRange(RHS)).isEmptySet()) > + return true; > + if > (getSignedRange(LHS).intersectWith(getSignedRange(RHS)).isEmptySet()) > + return true; > + > + const SCEV *Diff = getMinusSCEV(LHS, RHS); > + if (isKnownNonZero(Diff)) > + return true; > + break; > + } > + case ICmpInst::ICMP_EQ: > + break; > + } > + return false; > +} > + > +/// isLoopBackedgeGuardedByCond - Test whether the backedge of the loop is > +/// protected by a conditional between LHS and RHS. This is used to > +/// to eliminate casts. > +bool > +ScalarEvolution::isLoopBackedgeGuardedByCond(const Loop *L, > + ICmpInst::Predicate Pred, > + const SCEV *LHS, const SCEV > *RHS) { > + // Interpret a null as meaning no loop, where there is obviously no > guard > + // (interprocedural conditions notwithstanding). > + if (!L) return true; > + > + BasicBlock *Latch = L->getLoopLatch(); > + if (!Latch) > + return false; > + > + BranchInst *LoopContinuePredicate = > + dyn_cast(Latch->getTerminator()); > + if (!LoopContinuePredicate || > + LoopContinuePredicate->isUnconditional()) > + return false; > + > + return > + isNecessaryCond(LoopContinuePredicate->getCondition(), Pred, LHS, RHS, > + LoopContinuePredicate->getSuccessor(0) != > L->getHeader()); > +} > + > +/// isLoopGuardedByCond - Test whether entry to the loop is protected > +/// by a conditional between LHS and RHS. This is used to help avoid max > +/// expressions in loop trip counts, and to eliminate casts. > +bool > +ScalarEvolution::isLoopGuardedByCond(const Loop *L, > + ICmpInst::Predicate Pred, > + const SCEV *LHS, const SCEV *RHS) { > // Interpret a null as meaning no loop, where there is obviously no guard > // (interprocedural conditions notwithstanding). > if (!L) return false; > @@ -4063,8 +4413,9 @@ > return false; > } > > -/// isNecessaryCond - Test whether the given CondValue value is a > condition > -/// which is at least as strict as the one described by Pred, LHS, and > RHS. > +/// isNecessaryCond - Test whether the condition described by Pred, LHS, > +/// and RHS is a necessary condition for the given Cond value to evaluate > +/// to true. > bool ScalarEvolution::isNecessaryCond(Value *CondValue, > ICmpInst::Predicate Pred, > const SCEV *LHS, const SCEV *RHS, > @@ -4089,30 +4440,35 @@ > // see if it is the comparison we are looking for. > Value *PreCondLHS = ICI->getOperand(0); > Value *PreCondRHS = ICI->getOperand(1); > - ICmpInst::Predicate Cond; > + ICmpInst::Predicate FoundPred; > if (Inverse) > - Cond = ICI->getInversePredicate(); > + FoundPred = ICI->getInversePredicate(); > else > - Cond = ICI->getPredicate(); > + FoundPred = ICI->getPredicate(); > > - if (Cond == Pred) > + if (FoundPred == Pred) > ; // An exact match. > - else if (!ICmpInst::isTrueWhenEqual(Cond) && Pred == ICmpInst::ICMP_NE) > - ; // The actual condition is beyond sufficient. > - else > + else if (!ICmpInst::isTrueWhenEqual(FoundPred) && Pred == > ICmpInst::ICMP_NE) { > + // The actual condition is beyond sufficient. > + FoundPred = ICmpInst::ICMP_NE; > + // NE is symmetric but the original comparison may not be. Swap > + // the operands if necessary so that they match below. > + if (isa(LHS)) > + std::swap(PreCondLHS, PreCondRHS); > + } else > // Check a few special cases. > - switch (Cond) { > + switch (FoundPred) { > case ICmpInst::ICMP_UGT: > if (Pred == ICmpInst::ICMP_ULT) { > std::swap(PreCondLHS, PreCondRHS); > - Cond = ICmpInst::ICMP_ULT; > + FoundPred = ICmpInst::ICMP_ULT; > break; > } > return false; > case ICmpInst::ICMP_SGT: > if (Pred == ICmpInst::ICMP_SLT) { > std::swap(PreCondLHS, PreCondRHS); > - Cond = ICmpInst::ICMP_SLT; > + FoundPred = ICmpInst::ICMP_SLT; > break; > } > return false; > @@ -4121,8 +4477,8 @@ > // so check for this case by checking if the NE is comparing against > // a minimum or maximum constant. > if (!ICmpInst::isTrueWhenEqual(Pred)) > - if (ConstantInt *CI = dyn_cast(PreCondRHS)) { > - const APInt &A = CI->getValue(); > + if (const SCEVConstant *C = dyn_cast(RHS)) { > + const APInt &A = C->getValue()->getValue(); > switch (Pred) { > case ICmpInst::ICMP_SLT: > if (A.isMaxSignedValue()) break; > @@ -4139,7 +4495,7 @@ > default: > return false; > } > - Cond = ICmpInst::ICMP_NE; > + FoundPred = Pred; > // NE is symmetric but the original comparison may not be. Swap > // the operands if necessary so that they match below. > if (isa(LHS)) > @@ -4152,14 +4508,73 @@ > return false; > } > > - if (!PreCondLHS->getType()->isInteger()) return false; > + assert(Pred == FoundPred && "Conditions were not reconciled!"); > + > + // Bail if the ICmp's operands' types are wider than the needed type > + // before attempting to call getSCEV on them. This avoids infinite > + // recursion, since the analysis of widening casts can require loop > + // exit condition information for overflow checking, which would > + // lead back here. > + if (getTypeSizeInBits(LHS->getType()) < > + getTypeSizeInBits(PreCondLHS->getType())) > + return false; > + > + const SCEV *FoundLHS = getSCEV(PreCondLHS); > + const SCEV *FoundRHS = getSCEV(PreCondRHS); > + > + // Balance the types. The case where FoundLHS' type is wider than > + // LHS' type is checked for above. > + if (getTypeSizeInBits(LHS->getType()) > > + getTypeSizeInBits(FoundLHS->getType())) { > + if (CmpInst::isSigned(Pred)) { > + FoundLHS = getSignExtendExpr(FoundLHS, LHS->getType()); > + FoundRHS = getSignExtendExpr(FoundRHS, LHS->getType()); > + } else { > + FoundLHS = getZeroExtendExpr(FoundLHS, LHS->getType()); > + FoundRHS = getZeroExtendExpr(FoundRHS, LHS->getType()); > + } > + } > + > + return isNecessaryCondOperands(Pred, LHS, RHS, > + FoundLHS, FoundRHS) || > + // ~x < ~y --> x > y > + isNecessaryCondOperands(Pred, LHS, RHS, > + getNotSCEV(FoundRHS), > getNotSCEV(FoundLHS)); > +} > + > +/// isNecessaryCondOperands - Test whether the condition described by > Pred, > +/// LHS, and RHS is a necessary condition for the condition described by > +/// Pred, FoundLHS, and FoundRHS to evaluate to true. > +bool > +ScalarEvolution::isNecessaryCondOperands(ICmpInst::Predicate Pred, > + const SCEV *LHS, const SCEV *RHS, > + const SCEV *FoundLHS, > + const SCEV *FoundRHS) { > + switch (Pred) { > + default: break; > + case ICmpInst::ICMP_SLT: > + if (isKnownPredicate(ICmpInst::ICMP_SLE, LHS, FoundLHS) && > + isKnownPredicate(ICmpInst::ICMP_SGE, RHS, FoundRHS)) > + return true; > + break; > + case ICmpInst::ICMP_SGT: > + if (isKnownPredicate(ICmpInst::ICMP_SGE, LHS, FoundLHS) && > + isKnownPredicate(ICmpInst::ICMP_SLE, RHS, FoundRHS)) > + return true; > + break; > + case ICmpInst::ICMP_ULT: > + if (isKnownPredicate(ICmpInst::ICMP_ULE, LHS, FoundLHS) && > + isKnownPredicate(ICmpInst::ICMP_UGE, RHS, FoundRHS)) > + return true; > + break; > + case ICmpInst::ICMP_UGT: > + if (isKnownPredicate(ICmpInst::ICMP_UGE, LHS, FoundLHS) && > + isKnownPredicate(ICmpInst::ICMP_ULE, RHS, FoundRHS)) > + return true; > + break; > + } > > - const SCEV *PreCondLHSSCEV = getSCEV(PreCondLHS); > - const SCEV *PreCondRHSSCEV = getSCEV(PreCondRHS); > - return (HasSameValue(LHS, PreCondLHSSCEV) && > - HasSameValue(RHS, PreCondRHSSCEV)) || > - (HasSameValue(LHS, getNotSCEV(PreCondRHSSCEV)) && > - HasSameValue(RHS, getNotSCEV(PreCondLHSSCEV))); > + return false; > } > > /// getBECount - Subtract the end and start values and divide by the step, > @@ -4180,9 +4595,9 @@ > // Check Add for unsigned overflow. > // TODO: More sophisticated things could be done here. > const Type *WideTy = Context->getIntegerType(getTypeSizeInBits(Ty) + 1); > - const SCEV *OperandExtendedAdd = > - getAddExpr(getZeroExtendExpr(Diff, WideTy), > - getZeroExtendExpr(RoundUp, WideTy)); > + const SCEV *EDiff = getZeroExtendExpr(Diff, WideTy); > + const SCEV *ERoundUp = getZeroExtendExpr(RoundUp, WideTy); > + const SCEV *OperandExtendedAdd = getAddExpr(EDiff, ERoundUp); > if (getZeroExtendExpr(Add, WideTy) != OperandExtendedAdd) > return getCouldNotCompute(); > > @@ -4244,9 +4659,9 @@ > const SCEV *Start = AddRec->getOperand(0); > > // Determine the minimum constant start value. > - const SCEV *MinStart = isa(Start) ? Start : > - getConstant(isSigned ? APInt::getSignedMinValue(BitWidth) : > - APInt::getMinValue(BitWidth)); > + const SCEV *MinStart = getConstant(isSigned ? > + getSignedRange(Start).getSignedMin() : > + getUnsignedRange(Start).getUnsignedMin()); > > // If we know that the condition is true in order to enter the loop, > // then we know that it will run exactly (m-n)/s times. Otherwise, we > @@ -4254,18 +4669,16 @@ > // the division must round up. > const SCEV *End = RHS; > if (!isLoopGuardedByCond(L, > - isSigned ? ICmpInst::ICMP_SLT : > ICmpInst::ICMP_ULT, > + isSigned ? ICmpInst::ICMP_SLT : > + ICmpInst::ICMP_ULT, > getMinusSCEV(Start, Step), RHS)) > End = isSigned ? getSMaxExpr(RHS, Start) > : getUMaxExpr(RHS, Start); > > // Determine the maximum constant end value. > - const SCEV *MaxEnd = > - isa(End) ? End : > - getConstant(isSigned ? APInt::getSignedMaxValue(BitWidth) > - .ashr(GetMinSignBits(End) - 1) : > - APInt::getMaxValue(BitWidth) > - .lshr(GetMinLeadingZeros(End))); > + const SCEV *MaxEnd = getConstant(isSigned ? > + getSignedRange(End).getSignedMax() : > + getUnsignedRange(End).getUnsignedMax()); > > // Finally, we subtract these two values and divide, rounding up, to > get > // the number of times the backedge is executed. > > Modified: llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll?rev=75511&r1=75510&r2=75511&view=diff > > > ============================================================================== > --- llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll (original) > +++ llvm/trunk/test/Transforms/IndVarSimplify/iv-sext.ll Mon Jul 13 > 16:35:55 2009 > @@ -1,7 +1,6 @@ > ; RUN: llvm-as < %s | opt -indvars | llvm-dis > %t > ; RUN: grep {= sext} %t | count 4 > ; RUN: grep {phi i64} %t | count 2 > -; XFAIL: * > > ; Indvars should be able to promote the hiPart induction variable in the > ; inner loop to i64. > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090713/5fe297d9/attachment.html From sabre at nondot.org Mon Jul 13 17:07:30 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 22:07:30 -0000 Subject: [llvm-commits] [llvm] r75526 - /llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Message-ID: <200907132207.n6DM7Ua1003566@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 17:07:30 2009 New Revision: 75526 URL: http://llvm.org/viewvc/llvm-project?rev=75526&view=rev Log: eliminate a bunch of code in print_pcrel_imm for printing symbols, using printSymbolOperand instead. Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75526&r1=75525&r2=75526&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 13 17:07:30 2009 @@ -346,12 +346,26 @@ break; } case MachineOperand::MO_ExternalSymbol: - /// NOTE: MO_ExternalSymbol in a non-pcrel_imm context is *only* generated - /// by _GLOBAL_OFFSET_TABLE_ on X86-32. All others are call operands, which - /// are pcrel_imm's. - assert(!Subtarget->is64Bit()); - O << TAI->getGlobalPrefix(); - O << MO.getSymbolName(); + bool needCloseParen = false; + std::string Name(TAI->getGlobalPrefix()); + Name += MO.getSymbolName(); + + if (Name[0] == '$') { + // The name begins with a dollar-sign. In order to avoid having it look + // like an integer immediate to the assembler, enclose it in parens. + O << '('; + needCloseParen = true; + } + + if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { + FnStubs.insert(Name); + printSuffixedName(Name, "$stub"); + } else { + O << Name; + } + + if (needCloseParen) + O << ')'; break; } @@ -363,6 +377,7 @@ case X86II::MO_DARWIN_NONLAZY: case X86II::MO_DARWIN_HIDDEN_NONLAZY: case X86II::MO_DLLIMPORT: + case X86II::MO_DARWIN_STUB: // These affect the name of the symbol, not any suffix. break; case X86II::MO_GOT_ABSOLUTE_ADDRESS: @@ -384,6 +399,7 @@ case X86II::MO_GOTPCREL: O << "@GOTPCREL"; break; case X86II::MO_GOT: O << "@GOT"; break; case X86II::MO_GOTOFF: O << "@GOTOFF"; break; + case X86II::MO_PLT: O << "@PLT"; break; } } @@ -400,76 +416,13 @@ case MachineOperand::MO_MachineBasicBlock: printBasicBlockLabel(MO.getMBB(), false, false, VerboseAsm); return; - - case MachineOperand::MO_GlobalAddress: { - const GlobalValue *GV = MO.getGlobal(); - std::string Name = Mang->getValueName(GV); - decorateName(Name, GV); - - bool needCloseParen = false; - if (Name[0] == '$') { - // The name begins with a dollar-sign. In order to avoid having it look - // like an integer immediate to the assembler, enclose it in parens. - O << '('; - needCloseParen = true; - } - - // Handle dllimport linkage. - if (MO.getTargetFlags() == X86II::MO_DLLIMPORT) - O << "__imp_" << Name; - else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { - FnStubs.insert(Name); - printSuffixedName(Name, "$stub"); - } else { - O << Name; - } - - if (needCloseParen) - O << ')'; - - // Assemble call via PLT for externally visible symbols. - if (MO.getTargetFlags() == X86II::MO_PLT) - O << "@PLT"; - - printOffset(MO.getOffset()); - + case MachineOperand::MO_GlobalAddress: + printSymbolOperand(MO); return; - } - - case MachineOperand::MO_ExternalSymbol: { - bool needCloseParen = false; - std::string Name(TAI->getGlobalPrefix()); - Name += MO.getSymbolName(); - - if (Name[0] == '$') { - // The name begins with a dollar-sign. In order to avoid having it look - // like an integer immediate to the assembler, enclose it in parens. - O << '('; - needCloseParen = true; - } - - if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { - FnStubs.insert(Name); - printSuffixedName(Name, "$stub"); - } else { - O << Name; - } - - if (MO.getTargetFlags() == X86II::MO_GOT_ABSOLUTE_ADDRESS) { - O << " + [.-"; - PrintPICBaseSymbol(); - O << ']'; - } - - if (MO.getTargetFlags() == X86II::MO_PLT) - O << "@PLT"; - - if (needCloseParen) - O << ')'; - + case MachineOperand::MO_ExternalSymbol: + printSymbolOperand(MO); return; } - } } From devang.patel at gmail.com Mon Jul 13 17:13:29 2009 From: devang.patel at gmail.com (Devang Patel) Date: Mon, 13 Jul 2009 15:13:29 -0700 Subject: [llvm-commits] [llvm] r75515 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h lib/CodeGen/AsmPrinter/DwarfDebug.cpp In-Reply-To: References: <200907132148.n6DLmR11002864@zion.cs.uiuc.edu> Message-ID: <352a1fb20907131513p77920e8fua3426616b6609e87@mail.gmail.com> On Mon, Jul 13, 2009 at 2:56 PM, Chris Lattner wrote: > On Jul 13, 2009, at 2:48 PM, Devang Patel wrote: >> URL: http://llvm.org/viewvc/llvm-project?rev=75515&view=rev >> Log: >> Use AsmPrinter's Mangler to remove leading '1' from linkage names. > > Thanks Devang, this should work. > >> >> + ? ?/// getMangler - Return Mangler used by the AsmPrinter. This is >> used by >> + ? ?/// DWARF debug info generator. > > No need to say who uses this. ?This will just get out of date. > >> @@ -785,9 +786,11 @@ >> ? AddString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name); >> ? std::string LinkageName; >> ? GV.getLinkageName(LinkageName); >> - ?if (!LinkageName.empty()) >> + ?if (!LinkageName.empty()) { >> + ? ?Mangler *Mg = Asm->getMangler(); >> ? ? AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, >> dwarf::DW_FORM_string, >> - ? ? ? ? ? ? ?LinkageName); >> + ? ? ? ? ? ? ?Mg ? Mg->makeNameProper(LinkageName) : LinkageName); > > Can the mangler ever be null? ?If not, please remove the two checks. Just being paranoid. Right now, DwarfWriter and AsmPrinter are separate passes and Mangler is initialized dring AsmPrinter->doInitialization(). - Devang From daniel at zuster.org Mon Jul 13 17:17:50 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 22:17:50 -0000 Subject: [llvm-commits] [llvm] r75527 - /llvm/trunk/utils/NewNightlyTest.pl Message-ID: <200907132217.n6DMHoPo003914@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 17:17:49 2009 New Revision: 75527 URL: http://llvm.org/viewvc/llvm-project?rev=75527&view=rev Log: NewNightlyTest.pl - Add -noremoveatend option. - Like -noremove, except the build directory is still purged prior to building but isn't removed at the end of the test run (so the build products can be examined if need be). Modified: llvm/trunk/utils/NewNightlyTest.pl Modified: llvm/trunk/utils/NewNightlyTest.pl URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/NewNightlyTest.pl?rev=75527&r1=75526&r2=75527&view=diff ============================================================================== --- llvm/trunk/utils/NewNightlyTest.pl (original) +++ llvm/trunk/utils/NewNightlyTest.pl Mon Jul 13 17:17:49 2009 @@ -148,6 +148,7 @@ if (/^-nocheckout$/) { $NOCHECKOUT = 1; next; } if (/^-nocvsstats$/) { $NOCVSSTATS = 1; next; } if (/^-noremove$/) { $NOREMOVE = 1; next; } + if (/^-noremoveatend$/) { $NOREMOVEATEND = 1; next; } if (/^-noremoveresults$/){ $NOREMOVERESULTS = 1; next; } if (/^-notest$/) { $NOTEST = 1; next; } if (/^-norunningtests$/) { next; } # Backward compatibility, ignored. @@ -1147,6 +1148,6 @@ # ############################################################## system ( "$NICE rm -rf $BuildDir") - if (!$NOCHECKOUT and !$NOREMOVE); + if (!$NOCHECKOUT and !$NOREMOVE and !$NOREMOVEATEND); system ( "$NICE rm -rf $WebDir") if (!$NOCHECKOUT and !$NOREMOVE and !$NOREMOVERESULTS); From resistor at mac.com Mon Jul 13 17:18:28 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 22:18:28 -0000 Subject: [llvm-commits] [llvm] r75528 - in /llvm/trunk: include/llvm/Constant.h include/llvm/Constants.h include/llvm/InstrTypes.h lib/Target/CBackend/CBackend.cpp lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/Reassociate.cpp lib/VMCore/Instructions.cpp Message-ID: <200907132218.n6DMITaH003948@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 17:18:28 2009 New Revision: 75528 URL: http://llvm.org/viewvc/llvm-project?rev=75528&view=rev Log: These don't really need contexts either. Modified: llvm/trunk/include/llvm/Constant.h llvm/trunk/include/llvm/Constants.h llvm/trunk/include/llvm/InstrTypes.h llvm/trunk/lib/Target/CBackend/CBackend.cpp llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp llvm/trunk/lib/VMCore/Instructions.cpp Modified: llvm/trunk/include/llvm/Constant.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constant.h?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constant.h (original) +++ llvm/trunk/include/llvm/Constant.h Mon Jul 13 17:18:28 2009 @@ -64,6 +64,10 @@ /// getNullValue. virtual bool isNullValue() const = 0; + /// isNegativeZeroValue - Return true if the value is what would be returned + /// by getZeroValueForNegation. + virtual bool isNegativeZeroValue() const { return isNullValue(); } + /// canTrap - Return true if evaluation of this constant could trap. This is /// true for things like constant expressions that could divide by zero. bool canTrap() const; Modified: llvm/trunk/include/llvm/Constants.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constants.h (original) +++ llvm/trunk/include/llvm/Constants.h Mon Jul 13 17:18:28 2009 @@ -270,6 +270,12 @@ /// getNullValue. Don't depend on == for doubles to tell us it's zero, it /// considers -0.0 to be null as well as 0.0. :( virtual bool isNullValue() const; + + /// isNegativeZeroValue - Return true if the value is what would be returned + /// by getZeroValueForNegation. + virtual bool isNegativeZeroValue() const { + return Val.isZero() && Val.isNegative(); + } /// isExactlyValue - We don't rely on operator== working on double values, as /// it returns true for things that are clearly not equal, like -0.0 and 0.0. Modified: llvm/trunk/include/llvm/InstrTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InstrTypes.h?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/include/llvm/InstrTypes.h (original) +++ llvm/trunk/include/llvm/InstrTypes.h Mon Jul 13 17:18:28 2009 @@ -224,8 +224,8 @@ /// isNeg, isFNeg, isNot - Check if the given Value is a /// NEG, FNeg, or NOT instruction. /// - static bool isNeg(LLVMContext &Context, const Value *V); - static bool isFNeg(LLVMContext &Context, const Value *V); + static bool isNeg(const Value *V); + static bool isFNeg(const Value *V); static bool isNot(const Value *V); /// getNegArgument, getNotArgument - Helper functions to extract the Modified: llvm/trunk/lib/Target/CBackend/CBackend.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CBackend/CBackend.cpp?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/lib/Target/CBackend/CBackend.cpp (original) +++ llvm/trunk/lib/Target/CBackend/CBackend.cpp Mon Jul 13 17:18:28 2009 @@ -2621,11 +2621,11 @@ // If this is a negation operation, print it out as such. For FP, we don't // want to print "-0.0 - X". - if (BinaryOperator::isNeg(*Context, &I)) { + if (BinaryOperator::isNeg(&I)) { Out << "-("; writeOperand(BinaryOperator::getNegArgument(cast(&I))); Out << ")"; - } else if (BinaryOperator::isFNeg(*Context, &I)) { + } else if (BinaryOperator::isFNeg(&I)) { Out << "-("; writeOperand(BinaryOperator::getFNegArgument(cast(&I))); Out << ")"; Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 17:18:28 2009 @@ -410,8 +410,8 @@ // 0 -> undef, 1 -> Const, 2 -> Other, 3 -> Arg, 3 -> Unary, 4 -> OtherInst static unsigned getComplexity(LLVMContext *Context, Value *V) { if (isa(V)) { - if (BinaryOperator::isNeg(*Context, V) || - BinaryOperator::isFNeg(*Context, V) || + if (BinaryOperator::isNeg(V) || + BinaryOperator::isFNeg(V) || BinaryOperator::isNot(V)) return 3; return 4; @@ -573,7 +573,7 @@ // if the LHS is a constant zero (which is the 'negate' form). // static inline Value *dyn_castNegVal(Value *V, LLVMContext *Context) { - if (BinaryOperator::isNeg(*Context, V)) + if (BinaryOperator::isNeg(V)) return BinaryOperator::getNegArgument(V); // Constants can be considered to be negated values if they can be folded. @@ -592,7 +592,7 @@ // form). // static inline Value *dyn_castFNegVal(Value *V, LLVMContext *Context) { - if (BinaryOperator::isFNeg(*Context, V)) + if (BinaryOperator::isFNeg(V)) return BinaryOperator::getFNegArgument(V); // Constants can be considered to be negated values if they can be folded. Modified: llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Mon Jul 13 17:18:28 2009 @@ -178,7 +178,7 @@ // If this is a not or neg instruction, do not count it for rank. This // assures us that X and ~X will have the same rank. if (!I->getType()->isInteger() || - (!BinaryOperator::isNot(I) && !BinaryOperator::isNeg(*Context, I))) + (!BinaryOperator::isNot(I) && !BinaryOperator::isNeg(I))) ++Rank; //DOUT << "Calculated Rank[" << V->getName() << "] = " @@ -264,12 +264,12 @@ // If this is a multiply expression tree and it contains internal negations, // transform them into multiplies by -1 so they can be reassociated. if (I->getOpcode() == Instruction::Mul) { - if (!LHSBO && LHS->hasOneUse() && BinaryOperator::isNeg(*Context, LHS)) { + if (!LHSBO && LHS->hasOneUse() && BinaryOperator::isNeg(LHS)) { LHS = LowerNegateToMultiply(cast(LHS), ValueRankMap, Context); LHSBO = isReassociableOp(LHS, Opcode); } - if (!RHSBO && RHS->hasOneUse() && BinaryOperator::isNeg(*Context, RHS)) { + if (!RHSBO && RHS->hasOneUse() && BinaryOperator::isNeg(RHS)) { RHS = LowerNegateToMultiply(cast(RHS), ValueRankMap, Context); RHSBO = isReassociableOp(RHS, Opcode); @@ -409,7 +409,7 @@ /// X-Y into (X + -Y). static bool ShouldBreakUpSubtract(LLVMContext *Context, Instruction *Sub) { // If this is a negation, we can't split it up! - if (BinaryOperator::isNeg(*Context, Sub)) + if (BinaryOperator::isNeg(Sub)) return false; // Don't bother to break this up unless either the LHS is an associable add or @@ -663,7 +663,7 @@ for (unsigned i = 0, e = Ops.size(); i != e; ++i) { assert(i < Ops.size()); // Check for X and -X in the operand list. - if (BinaryOperator::isNeg(*Context, Ops[i].Op)) { + if (BinaryOperator::isNeg(Ops[i].Op)) { Value *X = BinaryOperator::getNegArgument(Ops[i].Op); unsigned FoundX = FindInOperandList(Ops, i, X); if (FoundX != i) { @@ -801,7 +801,7 @@ if (ShouldBreakUpSubtract(Context, BI)) { BI = BreakUpSubtract(Context, BI, ValueRankMap); MadeChange = true; - } else if (BinaryOperator::isNeg(*Context, BI)) { + } else if (BinaryOperator::isNeg(BI)) { // Otherwise, this is a negation. See if the operand is a multiply tree // and if this is not an inner node of a multiply tree. if (isReassociableOp(BI->getOperand(1), Instruction::Mul) && Modified: llvm/trunk/lib/VMCore/Instructions.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Instructions.cpp?rev=75528&r1=75527&r2=75528&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Instructions.cpp (original) +++ llvm/trunk/lib/VMCore/Instructions.cpp Mon Jul 13 17:18:28 2009 @@ -1711,19 +1711,19 @@ return false; } -bool BinaryOperator::isNeg(LLVMContext &Context, const Value *V) { +bool BinaryOperator::isNeg(const Value *V) { if (const BinaryOperator *Bop = dyn_cast(V)) if (Bop->getOpcode() == Instruction::Sub) - return Bop->getOperand(0) == - Context.getZeroValueForNegation(Bop->getType()); + if (Constant* C = dyn_cast(Bop->getOperand(0))) + return C->isNegativeZeroValue(); return false; } -bool BinaryOperator::isFNeg(LLVMContext &Context, const Value *V) { +bool BinaryOperator::isFNeg(const Value *V) { if (const BinaryOperator *Bop = dyn_cast(V)) if (Bop->getOpcode() == Instruction::FSub) - return Bop->getOperand(0) == - Context.getZeroValueForNegation(Bop->getType()); + if (Constant* C = dyn_cast(Bop->getOperand(0))) + return C->isNegativeZeroValue(); return false; } From gohman at apple.com Mon Jul 13 17:19:41 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:19:41 -0000 Subject: [llvm-commits] [llvm] r75529 - in /llvm/trunk: include/llvm/Analysis/LoopVR.h include/llvm/Analysis/ScalarEvolution.h include/llvm/Analysis/ScalarEvolutionExpander.h include/llvm/Transforms/Utils/FunctionUtils.h include/llvm/Transforms/Utils/UnrollLoop.h lib/Analysis/LoopVR.cpp Message-ID: <200907132219.n6DMJgZZ004001@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:19:41 2009 New Revision: 75529 URL: http://llvm.org/viewvc/llvm-project?rev=75529&view=rev Log: Forward-declare Loop and LoopInfo instead of #including LoopInfo.h. Modified: llvm/trunk/include/llvm/Analysis/LoopVR.h llvm/trunk/include/llvm/Analysis/ScalarEvolution.h llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h llvm/trunk/include/llvm/Transforms/Utils/FunctionUtils.h llvm/trunk/include/llvm/Transforms/Utils/UnrollLoop.h llvm/trunk/lib/Analysis/LoopVR.cpp Modified: llvm/trunk/include/llvm/Analysis/LoopVR.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopVR.h?rev=75529&r1=75528&r2=75529&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/LoopVR.h (original) +++ llvm/trunk/include/llvm/Analysis/LoopVR.h Mon Jul 13 17:19:41 2009 @@ -36,11 +36,7 @@ virtual void print(std::ostream &os, const Module *) const; void releaseMemory(); - void getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequiredTransitive(); - AU.addRequiredTransitive(); - AU.setPreservesAll(); - } + void getAnalysisUsage(AnalysisUsage &AU) const; //===--------------------------------------------------------------------- // Methods that are used to look up and update particular values. Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=75529&r1=75528&r2=75529&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Mon Jul 13 17:19:41 2009 @@ -22,7 +22,7 @@ #define LLVM_ANALYSIS_SCALAREVOLUTION_H #include "llvm/Pass.h" -#include "llvm/Analysis/LoopInfo.h" +#include "llvm/Instructions.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/ValueHandle.h" #include "llvm/Support/Allocator.h" @@ -30,14 +30,19 @@ #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/DenseMap.h" #include +#include namespace llvm { class APInt; + class Constant; class ConstantInt; + class DominatorTree; class Type; class ScalarEvolution; class TargetData; class LLVMContext; + class Loop; + class LoopInfo; /// SCEV - This class represents an analyzed expression in the program. These /// are opaque objects that the client is not allowed to do much with Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h?rev=75529&r1=75528&r2=75529&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h (original) +++ llvm/trunk/include/llvm/Analysis/ScalarEvolutionExpander.h Mon Jul 13 17:19:41 2009 @@ -17,6 +17,7 @@ #include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/Support/IRBuilder.h" #include "llvm/Support/TargetFolder.h" +#include namespace llvm { /// SCEVExpander - This class uses information about analyze scalars to Modified: llvm/trunk/include/llvm/Transforms/Utils/FunctionUtils.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/FunctionUtils.h?rev=75529&r1=75528&r2=75529&view=diff ============================================================================== --- llvm/trunk/include/llvm/Transforms/Utils/FunctionUtils.h (original) +++ llvm/trunk/include/llvm/Transforms/Utils/FunctionUtils.h Mon Jul 13 17:19:41 2009 @@ -14,13 +14,13 @@ #ifndef LLVM_TRANSFORMS_UTILS_FUNCTION_H #define LLVM_TRANSFORMS_UTILS_FUNCTION_H -#include "llvm/Analysis/LoopInfo.h" #include namespace llvm { class BasicBlock; class DominatorTree; class Function; + class Loop; /// ExtractCodeRegion - rip out a sequence of basic blocks into a new function /// Modified: llvm/trunk/include/llvm/Transforms/Utils/UnrollLoop.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/UnrollLoop.h?rev=75529&r1=75528&r2=75529&view=diff ============================================================================== --- llvm/trunk/include/llvm/Transforms/Utils/UnrollLoop.h (original) +++ llvm/trunk/include/llvm/Transforms/Utils/UnrollLoop.h Mon Jul 13 17:19:41 2009 @@ -16,10 +16,10 @@ #ifndef LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H #define LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H -#include "llvm/Analysis/LoopInfo.h" - namespace llvm { +class Loop; +class LoopInfo; class LPPassManager; bool UnrollLoop(Loop *L, unsigned Count, LoopInfo* LI, LPPassManager* LPM); Modified: llvm/trunk/lib/Analysis/LoopVR.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopVR.cpp?rev=75529&r1=75528&r2=75529&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/LoopVR.cpp (original) +++ llvm/trunk/lib/Analysis/LoopVR.cpp Mon Jul 13 17:19:41 2009 @@ -16,6 +16,7 @@ #include "llvm/Constants.h" #include "llvm/Instructions.h" #include "llvm/LLVMContext.h" +#include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/Assembly/Writer.h" #include "llvm/Support/CFG.h" @@ -220,6 +221,12 @@ return FullSet; } +void LoopVR::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequiredTransitive(); + AU.addRequiredTransitive(); + AU.setPreservesAll(); +} + bool LoopVR::runOnFunction(Function &F) { Map.clear(); return false; } void LoopVR::print(std::ostream &os, const Module *) const { From gohman at apple.com Mon Jul 13 17:20:53 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:20:53 -0000 Subject: [llvm-commits] [llvm] r75530 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp Message-ID: <200907132220.n6DMKrDe004062@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:20:53 2009 New Revision: 75530 URL: http://llvm.org/viewvc/llvm-project?rev=75530&view=rev Log: Fix a few assertion strings. Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75530&r1=75529&r2=75530&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 17:20:53 2009 @@ -4825,7 +4825,7 @@ //===----------------------------------------------------------------------===// void ScalarEvolution::SCEVCallbackVH::deleted() { - assert(SE && "SCEVCallbackVH called with a non-null ScalarEvolution!"); + assert(SE && "SCEVCallbackVH called with a null ScalarEvolution!"); if (PHINode *PN = dyn_cast(getValPtr())) SE->ConstantEvolutionLoopExitValue.erase(PN); if (Instruction *I = dyn_cast(getValPtr())) @@ -4835,7 +4835,7 @@ } void ScalarEvolution::SCEVCallbackVH::allUsesReplacedWith(Value *) { - assert(SE && "SCEVCallbackVH called with a non-null ScalarEvolution!"); + assert(SE && "SCEVCallbackVH called with a null ScalarEvolution!"); // Forget all the expressions associated with users of the old value, // so that future queries will recompute the expressions using the new From clattner at apple.com Mon Jul 13 17:25:54 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 15:25:54 -0700 Subject: [llvm-commits] [llvm] r75515 - in /llvm/trunk: include/llvm/CodeGen/AsmPrinter.h lib/CodeGen/AsmPrinter/DwarfDebug.cpp In-Reply-To: <352a1fb20907131513p77920e8fua3426616b6609e87@mail.gmail.com> References: <200907132148.n6DLmR11002864@zion.cs.uiuc.edu> <352a1fb20907131513p77920e8fua3426616b6609e87@mail.gmail.com> Message-ID: On Jul 13, 2009, at 3:13 PM, Devang Patel wrote: >>> >>> @@ -785,9 +786,11 @@ >>> AddString(GVDie, dwarf::DW_AT_name, dwarf::DW_FORM_string, Name); >>> std::string LinkageName; >>> GV.getLinkageName(LinkageName); >>> - if (!LinkageName.empty()) >>> + if (!LinkageName.empty()) { >>> + Mangler *Mg = Asm->getMangler(); >>> AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, >>> dwarf::DW_FORM_string, >>> - LinkageName); >>> + Mg ? Mg->makeNameProper(LinkageName) : LinkageName); >> >> Can the mangler ever be null? If not, please remove the two checks. > > Just being paranoid. Please make it an assertion then. -Chris From eli.friedman at gmail.com Mon Jul 13 17:27:52 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 22:27:52 -0000 Subject: [llvm-commits] [llvm] r75531 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/zext-bool-add-sub.ll Message-ID: <200907132227.n6DMRqOR004313@zion.cs.uiuc.edu> Author: efriedma Date: Mon Jul 13 17:27:52 2009 New Revision: 75531 URL: http://llvm.org/viewvc/llvm-project?rev=75531&view=rev Log: Canonicalize boolean +/- a constant to a select. (I think it's reasonably clear that we want to have a canonical form for constructs like this; if anyone thinks that a select is not the best canonical form, please tell me.) Added: llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75531&r1=75530&r2=75531&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 17:27:52 2009 @@ -2101,13 +2101,10 @@ if (SimplifyDemandedInstructionBits(I)) return &I; - // zext(i1) - 1 -> select i1, 0, -1 + // zext(bool) + C -> bool ? C + 1 : C if (ZExtInst *ZI = dyn_cast(LHS)) - if (CI->isAllOnesValue() && - ZI->getOperand(0)->getType() == Type::Int1Ty) - return SelectInst::Create(ZI->getOperand(0), - Context->getNullValue(I.getType()), - Context->getAllOnesValue(I.getType())); + if (ZI->getSrcTy() == Type::Int1Ty) + return SelectInst::Create(ZI->getOperand(0), AddOne(CI, Context), CI); } if (isa(LHS)) @@ -2525,6 +2522,11 @@ if (SelectInst *SI = dyn_cast(Op1)) if (Instruction *R = FoldOpIntoSelect(I, SI, this)) return R; + + // C - zext(bool) -> bool ? C - 1 : C + if (ZExtInst *ZI = dyn_cast(Op1)) + if (ZI->getSrcTy() == Type::Int1Ty) + return SelectInst::Create(ZI->getOperand(0), SubOne(C, Context), C); } if (I.getType() == Type::Int1Ty) Added: llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll?rev=75531&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll Mon Jul 13 17:27:52 2009 @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {zext } | count 0 + +define i32 @a(i1 %x) { +entry: + %y = zext i1 %x to i32 + %res = add i32 %y, 1 + ret i32 %res +} + +define i32 @b(i1 %x) { +entry: + %y = zext i1 %x to i32 + %res = add i32 %y, -1 + ret i32 %res +} + +define i32 @c(i1 %x) { +entry: + %y = zext i1 %x to i32 + %res = sub i32 0, %y + ret i32 %res +} + +define i32 @d(i1 %x) { +entry: + %y = zext i1 %x to i32 + %res = sub i32 3, %y + ret i32 %res +} + + From sabre at nondot.org Mon Jul 13 17:28:21 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 22:28:21 -0000 Subject: [llvm-commits] [llvm] r75532 - /llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Message-ID: <200907132228.n6DMSLWs004336@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 17:28:21 2009 New Revision: 75532 URL: http://llvm.org/viewvc/llvm-project?rev=75532&view=rev Log: clean up some syntax. Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75532&r1=75531&r2=75532&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 13 17:28:21 2009 @@ -55,7 +55,7 @@ else if (Subtarget->isTargetELF()) O << ".Lllvm$" << getFunctionNumber() << ".$piclabel"; else - LLVM_UNREACHABLE( "Don't know how to print PIC label!"); + LLVM_UNREACHABLE("Don't know how to print PIC label!"); } /// PrintUnmangledNameSafely - Print out the printable characters in the name. @@ -155,7 +155,7 @@ } break; default: - LLVM_UNREACHABLE( "Unsupported DecorationStyle"); + LLVM_UNREACHABLE("Unsupported DecorationStyle"); } } @@ -167,7 +167,7 @@ SwitchToSection(TAI->SectionForGlobal(F)); switch (F->getLinkage()) { - default: LLVM_UNREACHABLE( "Unknown linkage type!"); + default: LLVM_UNREACHABLE("Unknown linkage type!"); case Function::InternalLinkage: // Symbols default to internal. case Function::PrivateLinkage: EmitAlignment(FnAlign, F); @@ -293,17 +293,15 @@ void X86ATTAsmPrinter::printSymbolOperand(const MachineOperand &MO) { switch (MO.getType()) { default: LLVM_UNREACHABLE("unknown symbol type!"); - case MachineOperand::MO_JumpTableIndex: { + case MachineOperand::MO_JumpTableIndex: O << TAI->getPrivateGlobalPrefix() << "JTI" << getFunctionNumber() << '_' << MO.getIndex(); break; - } - case MachineOperand::MO_ConstantPoolIndex: { + case MachineOperand::MO_ConstantPoolIndex: O << TAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << '_' << MO.getIndex(); printOffset(MO.getOffset()); break; - } case MachineOperand::MO_GlobalAddress: { const GlobalValue *GV = MO.getGlobal(); std::string Name = Mang->getValueName(GV); @@ -345,7 +343,7 @@ printOffset(MO.getOffset()); break; } - case MachineOperand::MO_ExternalSymbol: + case MachineOperand::MO_ExternalSymbol: { bool needCloseParen = false; std::string Name(TAI->getGlobalPrefix()); Name += MO.getSymbolName(); @@ -368,10 +366,11 @@ O << ')'; break; } + } switch (MO.getTargetFlags()) { default: - LLVM_UNREACHABLE( "Unknown target flag on GV operand"); + LLVM_UNREACHABLE("Unknown target flag on GV operand"); case X86II::MO_NO_FLAG: // No flag. break; case X86II::MO_DARWIN_NONLAZY: @@ -409,7 +408,7 @@ void X86ATTAsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo) { const MachineOperand &MO = MI->getOperand(OpNo); switch (MO.getType()) { - default: LLVM_UNREACHABLE( "Unknown pcrel immediate operand"); + default: LLVM_UNREACHABLE("Unknown pcrel immediate operand"); case MachineOperand::MO_Immediate: O << MO.getImm(); return; @@ -740,7 +739,7 @@ } else if (MO.isMBB()) { MCOp.MakeMBBLabel(getFunctionNumber(), MO.getMBB()->getNumber()); } else { - LLVM_UNREACHABLE( "Unimp"); + LLVM_UNREACHABLE("Unimp"); } TmpInst.addOperand(MCOp); @@ -892,7 +891,7 @@ case GlobalValue::InternalLinkage: break; default: - LLVM_UNREACHABLE( "Unknown linkage type!"); + LLVM_UNREACHABLE("Unknown linkage type!"); } EmitAlignment(Align, GVar); From gohman at apple.com Mon Jul 13 17:30:32 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:30:32 -0000 Subject: [llvm-commits] [llvm] r75533 [1/2] - in /llvm/trunk/test: Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Message-ID: <200907132230.n6DMUXrB004422@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:30:31 2009 New Revision: 75533 URL: http://llvm.org/viewvc/llvm-project?rev=75533&view=rev Log: Add testcases for PR4538, PR4537, and PR4534. Added: llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Added: llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll?rev=75533&view=auto ============================================================================== --- llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll (added) +++ llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll Mon Jul 13 17:30:31 2009 @@ -0,0 +1,30 @@ +; RUN: llvm-as < %s | opt -analyze -scalar-evolution -disable-output +; PR4537 + +; ModuleID = 'b.bc' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" +target triple = "x86_64-unknown-linux-gnu" + +define i32 @test() { +entry: + %0 = load i32** undef, align 8 ; [#uses=1] + %1 = ptrtoint i32* %0 to i64 ; [#uses=1] + %2 = sub i64 undef, %1 ; [#uses=1] + %3 = lshr i64 %2, 3 ; [#uses=1] + %4 = trunc i64 %3 to i32 ; [#uses=2] + br i1 undef, label %bb10, label %bb4.i + +bb4.i: ; preds = %bb4.i, %entry + %i.0.i6 = phi i32 [ %8, %bb4.i ], [ 0, %entry ] ; [#uses=2] + %5 = sub i32 %4, %i.0.i6 ; [#uses=1] + %6 = sext i32 %5 to i64 ; [#uses=1] + %7 = udiv i64 undef, %6 ; [#uses=1] + %8 = add i32 %i.0.i6, 1 ; [#uses=2] + %phitmp = icmp eq i64 %7, 0 ; [#uses=1] + %.not.i = icmp sge i32 %8, %4 ; [#uses=1] + %or.cond.i = or i1 %phitmp, %.not.i ; [#uses=1] + br i1 %or.cond.i, label %bb10, label %bb4.i + +bb10: ; preds = %bb4.i, %entry + unreachable +} Added: llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll?rev=75533&view=auto ============================================================================== --- llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll (added) +++ llvm/trunk/test/Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll Mon Jul 13 17:30:31 2009 @@ -0,0 +1,354 @@ +; RUN: llvm-as < %s | opt -iv-users +; PR4538 + +; ModuleID = 'bugpoint-reduced-simplified.bc' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" +target triple = "x86_64-unknown-freebsd8.0" +module asm ".ident\09\22$FreeBSD: head/sys/kern/vfs_subr.c 195285 2009-07-02 14:19:33Z jamie $\22" +module asm ".section set_pcpu, \22aw\22, @progbits" +module asm ".previous" + type <{ [40 x i8] }> ; type %0 + type <{ %struct.vm_object*, %struct.vm_object** }> ; type %1 + type <{ %struct.vm_object* }> ; type %2 + type <{ %struct.vm_page*, %struct.vm_page** }> ; type %3 + type <{ %struct.pv_entry*, %struct.pv_entry** }> ; type %4 + type <{ %struct.vm_reserv* }> ; type %5 + type <{ %struct.bufobj*, %struct.bufobj** }> ; type %6 + type <{ %struct.proc*, %struct.proc** }> ; type %7 + type <{ %struct.thread*, %struct.thread** }> ; type %8 + type <{ %struct.prison*, %struct.prison** }> ; type %9 + type <{ %struct.prison* }> ; type %10 + type <{ %struct.task* }> ; type %11 + type <{ %struct.osd*, %struct.osd** }> ; type %12 + type <{ %struct.proc* }> ; type %13 + type <{ %struct.ksiginfo*, %struct.ksiginfo** }> ; type %14 + type <{ %struct.pv_chunk*, %struct.pv_chunk** }> ; type %15 + type <{ %struct.pgrp*, %struct.pgrp** }> ; type %16 + type <{ %struct.knote*, %struct.knote** }> ; type %17 + type <{ %struct.ktr_request*, %struct.ktr_request** }> ; type %18 + type <{ %struct.mqueue_notifier* }> ; type %19 + type <{ %struct.turnstile* }> ; type %20 + type <{ %struct.namecache* }> ; type %21 + type <{ %struct.namecache*, %struct.namecache** }> ; type %22 + type <{ %struct.lockf*, %struct.lockf** }> ; type %23 + type <{ %struct.lockf_entry*, %struct.lockf_entry** }> ; type %24 + type <{ %struct.lockf_edge*, %struct.lockf_edge** }> ; type %25 + %struct.__siginfo = type <{ i32, i32, i32, i32, i32, i32, i8*, %union.sigval, %0 }> + %struct.__sigset = type <{ [4 x i32] }> + %struct.acl = type <{ i32, i32, [4 x i32], [254 x %struct.acl_entry] }> + %struct.acl_entry = type <{ i32, i32, i32, i16, i16 }> + %struct.au_mask = type <{ i32, i32 }> + %struct.au_tid_addr = type <{ i32, i32, [4 x i32] }> + %struct.auditinfo_addr = type <{ i32, %struct.au_mask, %struct.au_tid_addr, i32, i64 }> + %struct.bintime = type <{ i64, i64 }> + %struct.buf = type <{ %struct.bufobj*, i64, i8*, i8*, i32, i8, i8, i8, i8, i64, i64, void (%struct.buf*)*, i64, i64, %struct.buflists, %struct.buf*, %struct.buf*, i32, i8, i8, i8, i8, %struct.buflists, i16, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, %struct.lock, i64, i64, i8*, i32, i8, i8, i8, i8, i64, %struct.vnode*, i32, i32, %struct.ucred*, %struct.ucred*, i8*, %union.pager_info, i8, i8, i8, i8, %union.anon, [32 x %struct.vm_page*], i32, i8, i8, i8, i8, %struct.workhead, i8*, i8*, i8*, i32, i8, i8, i8, i8 }> + %struct.buf_ops = type <{ i8*, i32 (%struct.buf*)*, void (%struct.bufobj*, %struct.buf*)*, i32 (%struct.bufobj*, i32)*, void (%struct.bufobj*, %struct.buf*)* }> + %struct.buflists = type <{ %struct.buf*, %struct.buf** }> + %struct.bufobj = type <{ %struct.mtx, %struct.bufv, %struct.bufv, i64, i32, i8, i8, i8, i8, %struct.buf_ops*, i32, i8, i8, i8, i8, %struct.vm_object*, %6, i8*, %struct.vnode* }> + %struct.bufv = type <{ %struct.buflists, %struct.buf*, i32, i8, i8, i8, i8 }> + %struct.callout = type <{ %union.anon, i32, i8, i8, i8, i8, i8*, void (i8*)*, %struct.lock_object*, i32, i32 }> + %struct.cdev_privdata = type opaque + %struct.cluster_save = type <{ i64, i64, i8*, i32, i8, i8, i8, i8, %struct.buf** }> + %struct.componentname = type <{ i64, i64, %struct.thread*, %struct.ucred*, i32, i8, i8, i8, i8, i8*, i8*, i64, i64 }> + %struct.cpuset = type opaque + %struct.cv = type <{ i8*, i32, i8, i8, i8, i8 }> + %struct.fid = type <{ i16, i16, [16 x i8] }> + %struct.file = type <{ i8*, %struct.fileops*, %struct.ucred*, %struct.vnode*, i16, i16, i32, i32, i32, i64, %struct.cdev_privdata*, i64, i8* }> + %struct.filedesc = type opaque + %struct.filedesc_to_leader = type opaque + %struct.fileops = type <{ i32 (%struct.file*, %struct.uio*, %struct.ucred*, i32, %struct.thread*)*, i32 (%struct.file*, %struct.uio*, %struct.ucred*, i32, %struct.thread*)*, i32 (%struct.file*, i64, %struct.ucred*, %struct.thread*)*, i32 (%struct.file*, i64, i8*, %struct.ucred*, %struct.thread*)*, i32 (%struct.file*, i32, %struct.ucred*, %struct.thread*)*, i32 (%struct.file*, %struct.knote*)*, i32 (%struct.file*, %struct.stat*, %struct.ucred*, %struct.thread*)*, i32 (%struct.file*, %struct.thread*)*, i32, i8, i8, i8, i8 }> + %struct.filterops = type <{ i32, i8, i8, i8, i8, i32 (%struct.knote*)*, void (%struct.knote*)*, i32 (%struct.knote*, i64)* }> + %struct.flock = type <{ i64, i64, i32, i16, i16, i32, i8, i8, i8, i8 }> + %struct.freelst = type <{ %struct.vnode*, %struct.vnode** }> + %struct.fsid = type <{ [2 x i32] }> + %struct.in6_addr = type opaque + %struct.in_addr = type opaque + %struct.inode = type opaque + %struct.iovec = type <{ i8*, i64 }> + %struct.itimers = type opaque + %struct.itimerval = type <{ %struct.bintime, %struct.bintime }> + %struct.kaioinfo = type opaque + %struct.kaudit_record = type opaque + %struct.kdtrace_proc = type opaque + %struct.kdtrace_thread = type opaque + %struct.kevent = type <{ i64, i16, i16, i32, i64, i8* }> + %struct.klist = type <{ %struct.knote* }> + %struct.knlist = type <{ %struct.klist, void (i8*)*, void (i8*)*, void (i8*)*, void (i8*)*, i8* }> + %struct.knote = type <{ %struct.klist, %struct.klist, %struct.knlist*, %17, %struct.kqueue*, %struct.kevent, i32, i32, i64, %union.sigval, %struct.filterops*, i8* }> + %struct.kqueue = type opaque + %struct.ksiginfo = type <{ %14, %struct.__siginfo, i32, i8, i8, i8, i8, %struct.sigqueue* }> + %struct.ktr_request = type opaque + %struct.label = type opaque + %struct.lock = type <{ %struct.lock_object, i64, i32, i32 }> + %struct.lock_list_entry = type opaque + %struct.lock_object = type <{ i8*, i32, i32, %struct.witness* }> + %struct.lock_owner = type opaque + %struct.lock_profile_object = type opaque + %struct.lockf = type <{ %23, %struct.mtx, %struct.lockf_entry_list, %struct.lockf_entry_list, i32, i8, i8, i8, i8 }> + %struct.lockf_edge = type <{ %25, %25, %struct.lockf_entry*, %struct.lockf_entry* }> + %struct.lockf_edge_list = type <{ %struct.lockf_edge* }> + %struct.lockf_entry = type <{ i16, i16, i8, i8, i8, i8, i64, i64, %struct.lock_owner*, %struct.vnode*, %struct.inode*, %struct.task*, %24, %struct.lockf_edge_list, %struct.lockf_edge_list, i32, i8, i8, i8, i8 }> + %struct.lockf_entry_list = type <{ %struct.lockf_entry* }> + %struct.lpohead = type <{ %struct.lock_profile_object* }> + %struct.md_page = type <{ %4 }> + %struct.mdproc = type <{ %struct.cv*, %struct.system_segment_descriptor }> + %struct.mdthread = type <{ i32, i8, i8, i8, i8, i64 }> + %struct.mntarg = type opaque + %struct.mntlist = type <{ %struct.mount*, %struct.mount** }> + %struct.mount = type <{ %struct.mtx, i32, i8, i8, i8, i8, %struct.mntlist, %struct.vfsops*, %struct.vfsconf*, %struct.vnode*, %struct.vnode*, i32, i8, i8, i8, i8, %struct.freelst, i32, i32, i32, i32, i32, i32, %struct.vfsoptlist*, %struct.vfsoptlist*, i32, i8, i8, i8, i8, %struct.statfs, %struct.ucred*, i8*, i64, i32, i8, i8, i8, i8, %struct.netexport*, %struct.label*, i32, i32, i32, i32, %struct.thread*, i8*, %struct.lock }> + %struct.mqueue_notifier = type opaque + %struct.mtx = type <{ %struct.lock_object, i64 }> + %struct.namecache = type opaque + %struct.netexport = type opaque + %struct.nlminfo = type opaque + %struct.osd = type <{ i32, i8, i8, i8, i8, i8**, %12 }> + %struct.p_sched = type opaque + %struct.pargs = type <{ i32, i32, [1 x i8], i8, i8, i8 }> + %struct.pcb = type opaque + %struct.pgrp = type <{ %16, %13, %struct.session*, %struct.sigiolst, i32, i32, %struct.mtx }> + %struct.plimit = type opaque + %struct.pmap = type <{ %struct.mtx, i64*, %15, i32, i8, i8, i8, i8, %struct.bintime, %struct.vm_page* }> + %struct.prison = type <{ %9, i32, i32, i32, i32, %10, %9, %struct.prison*, %struct.mtx, %struct.task, %struct.osd, %struct.cpuset*, %struct.vnet*, %struct.vnode*, i32, i32, %struct.in_addr*, %struct.in6_addr*, [4 x i8*], i32, i32, i32, i32, i32, [5 x i32], i64, [256 x i8], [1024 x i8], [256 x i8], [256 x i8], [64 x i8] }> + %struct.proc = type <{ %7, %8, %struct.mtx, %struct.ucred*, %struct.filedesc*, %struct.filedesc_to_leader*, %struct.pstats*, %struct.plimit*, %struct.callout, %struct.sigacts*, i32, i32, i32, i8, i8, i8, i8, %7, %7, %struct.proc*, %7, %13, %struct.mtx, %struct.ksiginfo*, %struct.sigqueue, i32, i8, i8, i8, i8, %struct.vmspace*, i32, i8, i8, i8, i8, %struct.itimerval, %struct.rusage, %struct.rusage_ext, %struct.rusage_ext, i32, i32, i32, i8, i8, i8, i8, %struct.vnode*, %struct.ucred*, %struct.vnode*, i32, i8, i8, i8, i8, %struct.sigiolst, i32, i32, i64, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, %struct.nlminfo*, %struct.kaioinfo*, %struct.thread*, i32, i8, i8, i8, i8, %struct.thread*, i32, i32, %struct.itimers*, i32, i32, [20 x i8], i8, i8, i8, i8, %struct.pgrp*, %struct.sysentvec*, %struct.pargs*, i64, i8, i8, i8, i8, i32, i16, i8, i8, i8, i8, i8, i8, %struct.knlist, i32, i8, i8, i8, i8, %struct.mdproc, %struct.callout, i16, i8, i8, i8, i8, i8, i8, %struct.proc*, %struct.pr! oc*, i8*, %struct.label*, %struct.p_sched*, %18, %19, %struct.kdtrace_proc*, %struct.cv }> + %struct.pstats = type opaque + %struct.pv_chunk = type <{ %struct.pmap*, %15, [3 x i64], [2 x i64], [168 x %struct.pv_entry] }> + %struct.pv_entry = type <{ i64, %4 }> + %struct.rusage = type <{ %struct.bintime, %struct.bintime, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }> + %struct.rusage_ext = type <{ i64, i64, i64, i64, i64, i64, i64 }> + %struct.selfd = type opaque + %struct.selfdlist = type <{ %struct.selfd*, %struct.selfd** }> + %struct.selinfo = type <{ %struct.selfdlist, %struct.knlist, %struct.mtx* }> + %struct.seltd = type opaque + %struct.session = type <{ i32, i8, i8, i8, i8, %struct.proc*, %struct.vnode*, %struct.tty*, i32, [24 x i8], i8, i8, i8, i8, %struct.mtx }> + %struct.shmmap_state = type opaque + %struct.sigacts = type <{ [128 x void (i32)*], [128 x %struct.__sigset], %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, %struct.__sigset, i32, i32, %struct.mtx }> + %struct.sigaltstack = type <{ i8*, i64, i32, i8, i8, i8, i8 }> + %struct.sigio = type <{ %union.sigval, %struct.sigiolst, %struct.sigio**, %struct.ucred*, i32, i8, i8, i8, i8 }> + %struct.sigiolst = type <{ %struct.sigio* }> + %struct.sigqueue = type <{ %struct.__sigset, %struct.__sigset, %14, %struct.proc*, i32, i8, i8, i8, i8 }> + %struct.sleepqueue = type opaque + %struct.sockaddr = type opaque + %struct.stat = type <{ i32, i32, i16, i16, i32, i32, i32, %struct.bintime, %struct.bintime, %struct.bintime, i64, i64, i32, i32, i32, i32, %struct.bintime }> + %struct.statfs = type <{ i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, [10 x i64], i32, i32, %struct.fsid, [80 x i8], [16 x i8], [88 x i8], [88 x i8] }> + %struct.sysctl_req = type <{ %struct.thread*, i32, i8, i8, i8, i8, i8*, i64, i64, i32 (%struct.sysctl_req*, i8*, i64)*, i8*, i64, i64, i32 (%struct.sysctl_req*, i8*, i64)*, i64, i32, i8, i8, i8, i8 }> + %struct.sysentvec = type opaque + %struct.system_segment_descriptor = type <{ i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }> + %struct.task = type <{ %11, i16, i16, i8, i8, i8, i8, void (i8*, i32)*, i8* }> + %struct.td_sched = type opaque + %struct.thread = type <{ %struct.mtx*, %struct.proc*, %8, %8, %8, %8, %struct.cpuset*, %struct.seltd*, %struct.sleepqueue*, %struct.turnstile*, %struct.umtx_q*, i32, i8, i8, i8, i8, %struct.sigqueue, i32, i32, i32, i32, i32, i8, i8, i8, i8, i8*, i8*, i8, i8, i8, i8, i16, i16, i16, i8, i8, i8, i8, i8, i8, %struct.turnstile*, i8*, %20, %struct.lock_list_entry*, i32, i32, %struct.ucred*, i32, i32, %struct.rusage, i64, i64, i32, i32, i32, i32, i32, %struct.__sigset, %struct.__sigset, i32, %struct.sigaltstack, i32, i8, i8, i8, i8, i64, i32, [20 x i8], %struct.file*, i32, i32, %struct.osd, i8, i8, i8, i8, i8, i8, i8, i8, %struct.pcb*, i32, i8, i8, i8, i8, [2 x i64], %struct.callout, %struct.trapframe*, %struct.vm_object*, i64, i32, i8, i8, i8, i8, %struct.vm_object*, i64, i32, i32, %struct.mdthread, %struct.td_sched*, %struct.kaudit_record*, i32, i8, i8, i8, i8, [2 x %struct.lpohead], %struct.kdtrace_thread*, i32, i8, i8, i8, i8, %struct.vnet*, i8* }> + %struct.trapframe = type <{ i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i32, i16, i16, i64, i32, i16, i16, i64, i64, i64, i64, i64, i64 }> + %struct.tty = type opaque + %struct.turnstile = type opaque + %struct.ucred = type <{ i32, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, %struct.uidinfo*, %struct.uidinfo*, %struct.prison*, %struct.vimage*, i32, i8, i8, i8, i8, [2 x i8*], %struct.label*, %struct.auditinfo_addr, i32*, i32, i8, i8, i8, i8 }> + %struct.uidinfo = type opaque + %struct.uio = type <{ %struct.iovec*, i32, i8, i8, i8, i8, i64, i64, i32, i32, %struct.thread* }> + %struct.umtx_q = type opaque + %struct.vattr = type <{ i32, i16, i16, i32, i32, i32, i8, i8, i8, i8, i64, i64, i64, %struct.bintime, %struct.bintime, %struct.bintime, %struct.bintime, i64, i64, i32, i8, i8, i8, i8, i64, i64, i32, i8, i8, i8, i8, i64 }> + %struct.vfsconf = type <{ i32, [16 x i8], i8, i8, i8, i8, %struct.vfsops*, i32, i32, i32, i8, i8, i8, i8, %struct.vfsoptdecl*, %struct.vfsconfhead }> + %struct.vfsconfhead = type <{ %struct.vfsconf*, %struct.vfsconf** }> + %struct.vfsops = type <{ i32 (%struct.mount*)*, i32 (%struct.mntarg*, i8*, i32)*, i32 (%struct.mount*, i32)*, i32 (%struct.mount*, i32, %struct.vnode**)*, i32 (%struct.mount*, i32, i32, i8*)*, i32 (%struct.mount*, %struct.statfs*)*, i32 (%struct.mount*, i32)*, i32 (%struct.mount*, i32, i32, %struct.vnode**)*, i32 (%struct.mount*, %struct.fid*, %struct.vnode**)*, i32 (%struct.mount*, %struct.sockaddr*, i32*, %struct.ucred**, i32*, i32**)*, i32 (%struct.vfsconf*)*, i32 (%struct.vfsconf*)*, i32 (%struct.mount*, i32, %struct.vnode*, i32, i8*)*, i32 (%struct.mount*, i32, %struct.sysctl_req*)*, void (%struct.mount*)* }> + %struct.vfsopt = type <{ %struct.vfsoptlist, i8*, i8*, i32, i32, i32, i8, i8, i8, i8 }> + %struct.vfsoptdecl = type opaque + %struct.vfsoptlist = type <{ %struct.vfsopt*, %struct.vfsopt** }> + %struct.vimage = type opaque + %struct.vm_map = type <{ %struct.vm_map_entry, %struct.mtx, %struct.mtx, i32, i8, i8, i8, i8, i64, i32, i8, i8, i8, i8, %struct.vm_map_entry*, %struct.pmap*, %struct.vm_map_entry* }> + %struct.vm_map_entry = type <{ %struct.vm_map_entry*, %struct.vm_map_entry*, %struct.vm_map_entry*, %struct.vm_map_entry*, i64, i64, i64, i64, i64, %union.sigval, i64, i32, i8, i8, i8, i8, i32, i8, i8, i8, i8, i64, %struct.uidinfo* }> + %struct.vm_object = type <{ %struct.mtx, %1, %2, %1, %3, %struct.vm_page*, i64, i32, i32, i32, i8, i8, i16, i16, i16, i32, %struct.vm_object*, i64, %1, %5, %struct.vm_page*, i8*, %union.anon, %struct.uidinfo*, i64 }> + %struct.vm_page = type <{ %3, %3, %struct.vm_page*, %struct.vm_page*, %struct.vm_object*, i64, i64, %struct.md_page, i8, i8, i16, i8, i8, i16, i32, i16, i16, i8, i8, i8, i8, i8, i8, i8, i8 }> + %struct.vm_reserv = type opaque + %struct.vmspace = type <{ %struct.vm_map, %struct.shmmap_state*, i64, i64, i64, i64, i8*, i8*, i8*, i32, i8, i8, i8, i8, %struct.pmap }> + %struct.vnet = type opaque + %struct.vnode = type <{ i32, i8, i8, i8, i8, i8*, %struct.vop_vector*, i8*, %struct.mount*, %struct.freelst, %union.sigval, %struct.freelst, i32, i8, i8, i8, i8, %21, %22, %struct.namecache*, i64, i64, i64, i32, i8, i8, i8, i8, %struct.lock, %struct.mtx, %struct.lock*, i32, i32, i64, i64, i32, i8, i8, i8, i8, %struct.freelst, %struct.bufobj, %struct.vpollinfo*, %struct.label*, %struct.lockf* }> + %struct.vnodeop_desc = type <{ i8*, i32, i8, i8, i8, i8, i32 (%struct.vop_generic_args*)*, i32*, i32, i32, i32, i32 }> + %struct.vop_access_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, %struct.ucred*, %struct.thread* }> + %struct.vop_aclcheck_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, %struct.acl*, %struct.ucred*, %struct.thread* }> + %struct.vop_advlock_args = type <{ %struct.vop_generic_args, %struct.vnode*, i8*, i32, i8, i8, i8, i8, %struct.flock*, i32, i8, i8, i8, i8 }> + %struct.vop_advlockasync_args = type <{ %struct.vop_generic_args, %struct.vnode*, i8*, i32, i8, i8, i8, i8, %struct.flock*, i32, i8, i8, i8, i8, %struct.task*, i8** }> + %struct.vop_bmap_args = type <{ %struct.vop_generic_args, %struct.vnode*, i64, %struct.bufobj**, i64*, i32*, i32* }> + %struct.vop_cachedlookup_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vnode**, %struct.componentname* }> + %struct.vop_create_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vnode**, %struct.componentname*, %struct.vattr* }> + %struct.vop_deleteextattr_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, i8*, %struct.ucred*, %struct.thread* }> + %struct.vop_fsync_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, %struct.thread* }> + %struct.vop_generic_args = type <{ %struct.vnodeop_desc* }> + %struct.vop_getattr_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vattr*, %struct.ucred* }> + %struct.vop_getextattr_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, i8*, %struct.uio*, i64*, %struct.ucred*, %struct.thread* }> + %struct.vop_getpages_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vm_page**, i32, i32, i64 }> + %struct.vop_getwritemount_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.mount** }> + %struct.vop_inactive_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.thread* }> + %struct.vop_ioctl_args = type <{ %struct.vop_generic_args, %struct.vnode*, i64, i8*, i32, i8, i8, i8, i8, %struct.ucred*, %struct.thread* }> + %struct.vop_islocked_args = type <{ %struct.vop_generic_args, %struct.vnode* }> + %struct.vop_kqfilter_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.knote* }> + %struct.vop_link_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vnode*, %struct.componentname* }> + %struct.vop_listextattr_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, %struct.uio*, i64*, %struct.ucred*, %struct.thread* }> + %struct.vop_lock1_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, i8*, i32, i8, i8, i8, i8 }> + %struct.vop_open_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, %struct.ucred*, %struct.thread*, %struct.file* }> + %struct.vop_openextattr_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.ucred*, %struct.thread* }> + %struct.vop_pathconf_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, i64* }> + %struct.vop_putpages_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vm_page**, i32, i32, i32*, i64 }> + %struct.vop_read_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.uio*, i32, i8, i8, i8, i8, %struct.ucred* }> + %struct.vop_readdir_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.uio*, %struct.ucred*, i32*, i32*, i64** }> + %struct.vop_readlink_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.uio*, %struct.ucred* }> + %struct.vop_reallocblks_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.cluster_save* }> + %struct.vop_rename_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vnode*, %struct.componentname*, %struct.vnode*, %struct.vnode*, %struct.componentname* }> + %struct.vop_revoke_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8 }> + %struct.vop_setextattr_args = type <{ %struct.vop_generic_args, %struct.vnode*, i32, i8, i8, i8, i8, i8*, %struct.uio*, %struct.ucred*, %struct.thread* }> + %struct.vop_setlabel_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.label*, %struct.ucred*, %struct.thread* }> + %struct.vop_strategy_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.buf* }> + %struct.vop_symlink_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vnode**, %struct.componentname*, %struct.vattr*, i8* }> + %struct.vop_vector = type <{ %struct.vop_vector*, i32 (%struct.vop_generic_args*)*, i32 (%struct.vop_islocked_args*)*, i32 (%struct.vop_cachedlookup_args*)*, i32 (%struct.vop_cachedlookup_args*)*, i32 (%struct.vop_create_args*)*, i32 (%struct.vop_whiteout_args*)*, i32 (%struct.vop_create_args*)*, i32 (%struct.vop_open_args*)*, i32 (%struct.vop_access_args*)*, i32 (%struct.vop_access_args*)*, i32 (%struct.vop_access_args*)*, i32 (%struct.vop_getattr_args*)*, i32 (%struct.vop_getattr_args*)*, i32 (%struct.vop_islocked_args*)*, i32 (%struct.vop_read_args*)*, i32 (%struct.vop_read_args*)*, i32 (%struct.vop_ioctl_args*)*, i32 (%struct.vop_access_args*)*, i32 (%struct.vop_kqfilter_args*)*, i32 (%struct.vop_revoke_args*)*, i32 (%struct.vop_fsync_args*)*, i32 (%struct.vop_link_args*)*, i32 (%struct.vop_link_args*)*, i32 (%struct.vop_rename_args*)*, i32 (%struct.vop_create_args*)*, i32 (%struct.vop_link_args*)*, i32 (%struct.vop_symlink_args*)*, i32 (%struct.vop_readdir_args*)*, i3! 2 (%struct.vop_readlink_args*)*, i32 (%struct.vop_inactive_args*)*, i32 (%struct.vop_inactive_args*)*, i32 (%struct.vop_lock1_args*)*, i32 (%struct.vop_revoke_args*)*, i32 (%struct.vop_bmap_args*)*, i32 (%struct.vop_strategy_args*)*, i32 (%struct.vop_getwritemount_args*)*, i32 (%struct.vop_islocked_args*)*, i32 (%struct.vop_pathconf_args*)*, i32 (%struct.vop_advlock_args*)*, i32 (%struct.vop_advlockasync_args*)*, i32 (%struct.vop_reallocblks_args*)*, i32 (%struct.vop_getpages_args*)*, i32 (%struct.vop_putpages_args*)*, i32 (%struct.vop_aclcheck_args*)*, i32 (%struct.vop_aclcheck_args*)*, i32 (%struct.vop_aclcheck_args*)*, i32 (%struct.vop_access_args*)*, i32 (%struct.vop_getextattr_args*)*, i32 (%struct.vop_listextattr_args*)*, i32 (%struct.vop_openextattr_args*)*, i32 (%struct.vop_deleteextattr_args*)*, i32 (%struct.vop_setextattr_args*)*, i32 (%struct.vop_setlabel_args*)*, i32 (%struct.vop_vptofh_args*)*, i32 (%struct.vop_vptocnp_args*)* }> + %struct.vop_vptocnp_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.vnode**, %struct.ucred*, i8*, i32* }> + %struct.vop_vptofh_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.fid* }> + %struct.vop_whiteout_args = type <{ %struct.vop_generic_args, %struct.vnode*, %struct.componentname*, i32, i8, i8, i8, i8 }> + %struct.vpollinfo = type <{ %struct.mtx, %struct.selinfo, i16, i16, i8, i8, i8, i8 }> + %struct.witness = type opaque + %struct.workhead = type <{ %struct.worklist* }> + %struct.worklist = type opaque + %union.anon = type <{ [16 x i8] }> + %union.pager_info = type <{ [4 x i8] }> + %union.sigval = type <{ [8 x i8] }> + +define i32 @vlrureclaim(%struct.mount* %mp) nounwind { +entry: + br i1 undef, label %if.then11, label %do.end + +if.then11: ; preds = %entry + br label %do.end + +do.end: ; preds = %if.then11, %entry + br label %while.cond.outer + +while.cond.outer: ; preds = %while.cond.outer.backedge, %do.end + %count.0.ph = phi i32 [ undef, %do.end ], [ undef, %while.cond.outer.backedge ] ; [#uses=1] + br label %while.cond + +while.cond: ; preds = %next_iter, %while.cond.outer + %count.0 = phi i32 [ %dec, %next_iter ], [ %count.0.ph, %while.cond.outer ] ; [#uses=2] + %cmp21 = icmp eq i32 %count.0, 0 ; [#uses=1] + br i1 %cmp21, label %do.body288.loopexit4, label %while.body + +while.body: ; preds = %while.cond + br label %while.cond27 + +while.cond27: ; preds = %while.body36, %while.body + br i1 undef, label %do.body288.loopexit, label %land.rhs + +land.rhs: ; preds = %while.cond27 + br i1 undef, label %while.body36, label %while.end + +while.body36: ; preds = %land.rhs + br label %while.cond27 + +while.end: ; preds = %land.rhs + br i1 undef, label %do.body288.loopexit4, label %do.body46 + +do.body46: ; preds = %while.end + br i1 undef, label %if.else64, label %if.then53 + +if.then53: ; preds = %do.body46 + br label %if.end72 + +if.else64: ; preds = %do.body46 + br label %if.end72 + +if.end72: ; preds = %if.else64, %if.then53 + %dec = add i32 %count.0, -1 ; [#uses=2] + br i1 undef, label %next_iter, label %if.end111 + +if.end111: ; preds = %if.end72 + br i1 undef, label %lor.lhs.false, label %do.body145 + +lor.lhs.false: ; preds = %if.end111 + br i1 undef, label %lor.lhs.false122, label %do.body145 + +lor.lhs.false122: ; preds = %lor.lhs.false + br i1 undef, label %lor.lhs.false128, label %do.body145 + +lor.lhs.false128: ; preds = %lor.lhs.false122 + br i1 undef, label %do.body162, label %land.lhs.true + +land.lhs.true: ; preds = %lor.lhs.false128 + br i1 undef, label %do.body145, label %do.body162 + +do.body145: ; preds = %land.lhs.true, %lor.lhs.false122, %lor.lhs.false, %if.end111 + br i1 undef, label %if.then156, label %next_iter + +if.then156: ; preds = %do.body145 + br label %next_iter + +do.body162: ; preds = %land.lhs.true, %lor.lhs.false128 + br i1 undef, label %if.then173, label %do.end177 + +if.then173: ; preds = %do.body162 + br label %do.end177 + +do.end177: ; preds = %if.then173, %do.body162 + br i1 undef, label %do.body185, label %if.then182 + +if.then182: ; preds = %do.end177 + br label %next_iter_mntunlocked + +do.body185: ; preds = %do.end177 + br i1 undef, label %if.then196, label %do.end202 + +if.then196: ; preds = %do.body185 + br label %do.end202 + +do.end202: ; preds = %if.then196, %do.body185 + br i1 undef, label %lor.lhs.false207, label %if.then231 + +lor.lhs.false207: ; preds = %do.end202 + br i1 undef, label %lor.lhs.false214, label %if.then231 + +lor.lhs.false214: ; preds = %lor.lhs.false207 + br i1 undef, label %do.end236, label %land.lhs.true221 + +land.lhs.true221: ; preds = %lor.lhs.false214 + br i1 undef, label %if.then231, label %do.end236 + +if.then231: ; preds = %land.lhs.true221, %lor.lhs.false207, %do.end202 + br label %next_iter_mntunlocked + +do.end236: ; preds = %land.lhs.true221, %lor.lhs.false214 + br label %next_iter_mntunlocked + +next_iter_mntunlocked: ; preds = %do.end236, %if.then231, %if.then182 + br i1 undef, label %yield, label %do.body269 + +next_iter: ; preds = %if.then156, %do.body145, %if.end72 + %rem2482 = and i32 %dec, 255 ; [#uses=1] + %cmp249 = icmp eq i32 %rem2482, 0 ; [#uses=1] + br i1 %cmp249, label %do.body253, label %while.cond + +do.body253: ; preds = %next_iter + br i1 undef, label %if.then264, label %yield + +if.then264: ; preds = %do.body253 + br label %yield + +yield: ; preds = %if.then264, %do.body253, %next_iter_mntunlocked + br label %do.body269 + +do.body269: ; preds = %yield, %next_iter_mntunlocked + br i1 undef, label %if.then280, label %while.cond.outer.backedge + +if.then280: ; preds = %do.body269 + br label %while.cond.outer.backedge + +while.cond.outer.backedge: ; preds = %if.then280, %do.body269 + br label %while.cond.outer + +do.body288.loopexit: ; preds = %while.cond27 + br label %do.body288 + +do.body288.loopexit4: ; preds = %while.end, %while.cond + br label %do.body288 + +do.body288: ; preds = %do.body288.loopexit4, %do.body288.loopexit + br i1 undef, label %if.then299, label %do.end303 + +if.then299: ; preds = %do.body288 + br label %do.end303 + +do.end303: ; preds = %if.then299, %do.body288 + ret i32 undef +} From gohman at apple.com Mon Jul 13 17:30:32 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:30:32 -0000 Subject: [llvm-commits] [llvm] r75533 [2/2] - in /llvm/trunk/test: Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Message-ID: <200907132230.n6DMUX13004427@zion.cs.uiuc.edu> Added: llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll?rev=75533&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Mon Jul 13 17:30:31 2009 @@ -0,0 +1,17396 @@ +; RUN: llvm-as < %s | llc +; PR4534 + +; ModuleID = 'tango.net.ftp.FtpClient.bc' +target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128" +target triple = "powerpc-apple-darwin9.6.0" + type { i32, i32, i8*, i32, %tango.net.Socket.timeval } ; type %0 + type { i8*, i32 (i8*, %"tango.text.Regex.List!(TNFAFragment).List.Element"**)* } ; type %1 + type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i8*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i8*, i8*, i1 (%tango.io.device.Conduit.Conduit*)*, i8*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %2 + type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i8*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %3 + type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*)*, %"byte[]" (%tango.io.device.Array.Array*)*, i1 (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %4 + type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %5 + type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, %"byte[]" (%tango.io.device.Array.Array*)*, i1 (%tango.io.device.Array.Array*, %"uint delegate(char[])")*, i32 (%tango.io.device.Array.Array*, %"uint delegate(char[])")* } ; type %6 + type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)*, %"byte[]" (%tango.io.device.Array.Array*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]")*, i32 (%tango.io.device.Array.Array*, %"uint delegate(char[])")* } ; type %7 + type { %object.Interface* } ; type %8 + type { %object.Interface*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)* } ; type %9 + type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*)*, %"byte[]" (%tango.io.device.Device.Device*)*, i1 (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Device.Device*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %10 + type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %11 + type { %object.Interface*, i32 (%tango.io.device.Device.Device*)* } ; type %12 + type { %object.Interface*, i64 (%tango.io.device.File.File*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*)*, %"byte[]" (%tango.io.device.File.File*)*, i1 (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Device.Device*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %13 + type { %object.Interface*, i64 (%tango.io.device.File.File*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %14 + type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*)*, %"byte[]" (%tango.net.SocketConduit.SocketConduit*)*, i1 (%tango.net.SocketConduit.SocketConduit*)*, void (%tango.net.SocketConduit.SocketConduit*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %15 + type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %16 + type { %object.Interface*, i32 (%tango.net.SocketConduit.SocketConduit*)* } ; type %17 + type { i8*, i32 (i8*, %"tango.text.Regex.List!(StateElement).List.Element"**)* } ; type %18 + type { i8*, i32 (i8*, %"tango.text.Regex.List!(SubsetState).List.Element"**)* } ; type %19 + type { %object.TypeInfo.__vtbl*, i8*, %"byte[]", %"byte[]", i8*, i8*, i8*, i8*, i32 } ; type %20 + type { %object.TypeInfo.__vtbl*, i8*, %"byte[]", %"byte[]", i8*, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)*, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)*, %"byte[]" (%tango.net.Socket.timeval*)*, i32 } ; type %21 + type opaque ; type %22 + type opaque ; type %23 + type opaque ; type %24 + type opaque ; type %25 + type opaque ; type %26 + type opaque ; type %27 + type opaque ; type %28 + type opaque ; type %29 + type opaque ; type %30 + type { i32, void ()* } ; type %31 + type opaque ; type %32 + type { %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFA!(dchar).TNFA"* } ; type %33 + type { %"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.List!(TNFAFragment).List"* } ; type %34 + type { i32, %"byte[]" } ; type %35 + %"Act[]" = type { i32, i32* } + %"CharRange!(dchar)[]" = type { i32, %tango.net.Socket.timeval* } + %"ClassInfo[]" = type { i32, %object.ClassInfo** } + %"Command[]" = type { i32, %tango.net.Socket.timeval* } + %D_CRITICAL_SECTION = type { %D_CRITICAL_SECTION*, %0 } + %"FtpFeature[]" = type { i32, %tango.net.ftp.FtpClient.FtpFeature* } + %"FtpFileInfo[]" = type { i32, %tango.net.ftp.FtpClient.FtpFileInfo* } + %"Interface[]" = type { i32, %object.Interface* } + %"Mark[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.Mark"* } + %"ModuleInfo[]" = type { i32, %object.ModuleInfo** } + %ModuleReference = type { %ModuleReference*, %object.ModuleInfo* } + %"OffsetTypeInfo[]" = type { i32, %object.OffsetTypeInfo* } + %"Operator[]" = type { i32, i32* } + %"Pair!(uint)[]" = type { i32, %tango.net.Socket.timeval* } + %"Predicate!(dchar)[]" = type { i32, %"tango.text.Regex.Predicate!(dchar).Predicate"* } + %"StateElement[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"** } + %"State[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.State"** } + %"TNFAState[]" = type { i32, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** } + %"TNFATransition[]" = type { i32, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** } + %"Transition[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.Transition"** } + %"TypeInfo[]" = type { i32, %object.TypeInfo** } + %"_FormatterInfo!(char)[]" = type { i32, %nest.parseListLine* } + %"byte[]" = type { i32, i8* } + %"char[]" = type { i32, i8* } + %"char[] delegate(RegExpT)" = type { i8*, %"byte[]" (i8*, %"tango.text.Regex.RegExpT!(char).RegExpT"*)* } + %"char[][]" = type { i32, %"byte[]"* } + %"dchar[]" = type { i32, i32* } + %"dchar[][]" = type { i32, %"Act[]"* } + %"int delegate(ref Element)" = type { i8*, i32 (i8*, %"tango.text.Regex.List!(TNFATransition).List.Element"**)* } + %"int delegate(ref FrameInfo fInfo)" = type { i8*, i32 (i8*, %object.Exception.FrameInfo*)* } + %"int delegate(ref ModuleInfo)" = type { i8*, i32 (i8*, %object.ModuleInfo**)* } + %"int delegate(ref RegExpT)" = type { i8*, i32 (i8*, %"tango.text.Regex.RegExpT!(char).RegExpT"**)* } + %"int delegate(ref StateElement)" = type { i8*, i32 (i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"**)* } + %"int delegate(ref SubsetState)" = type { i8*, i32 (i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"**)* } + %"int delegate(ref TNFAFragment)" = type { i8*, i32 (i8*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"**)* } + %"int delegate(ref TNFATransition)" = type { i8*, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* } + %"int delegate(ref char[])" = type { i8*, i32 (i8*, %"byte[]"*)* } + %"int delegate(ref int, ref char[])" = type { i8*, i32 (i8*, i32*, %"byte[]"*)* } + %"int delegate(ref int, ref char[], ref char[])" = type { i8*, i32 (i8*, i32*, %"byte[]"*, %"byte[]"*)* } + %"int[]" = type { i32, i32* } + %nest.clone = type { %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, %"tango.text.Regex.TNFA!(dchar).TNFA"* } + %nest.delimit = type { %"char[][]" } + %nest.dostime = type { %tango.time.Time.Date } + %nest.insertAfter = type { %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.List!(TNFATransition).List"* } + %nest.insertBefore = type { %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.List!(TNFATransition).List"* } + %nest.parse = type { %"tango.text.convert.Layout.Layout!(char).Layout"*, %"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.Stack!(Operator).Stack", %"tango.text.Regex.Stack!(Operator).Stack", %"tango.text.Regex.Stack!(Pair!(uint)).Stack", %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, %"tango.text.Regex.Stack!(TNFATransition).Stack", i32, %"tango.text.Regex.TNFA!(dchar).TNFA"* } + %nest.parseListLine = type { i32, %"byte[]", %"byte[]" } + %nest.setEntry = type { %"tango.text.Regex.TNFAState!(dchar).TNFAState"* } + %nest.setExit = type { %"tango.text.Regex.TNFAState!(dchar).TNFAState"* } + %nest.splitLines = type { i32, %"char[][]" } + %object.ClassInfo = type { %object.ClassInfo.__vtbl*, i8*, %"byte[]", %"byte[]", %"void*[]", %"Interface[]", %object.ClassInfo*, i8*, i8*, i32, i8*, %"OffsetTypeInfo[]", i8*, %object.TypeInfo* } + %object.ClassInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %object.Object* (%object.ClassInfo*)* } + %object.Exception = type { %object.Exception.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception* } + %object.Exception.FrameInfo = type { i64, i32, i32, i32, %"byte[]", %"byte[]", [256 x i8] } + %object.Exception.TraceInfo = type { %object.Exception.TraceInfo.__vtbl* } + %object.Exception.TraceInfo.__vtbl = type { %object.ClassInfo*, i32 (%object.Exception.TraceInfo*, %"int delegate(ref FrameInfo fInfo)")* } + %object.Exception.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Exception*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } + %object.Interface = type { %object.ClassInfo*, %"void*[]", i32 } + %object.ModuleInfo = type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %"ModuleInfo[]", %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* } + %object.ModuleInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %object.Object = type { %object.ModuleInfo.__vtbl*, i8* } + %object.Object.Monitor = type { %object.Object.Monitor.__vtbl* } + %object.Object.Monitor.__vtbl = type { %object.ClassInfo*, void (%object.Object.Monitor*)*, void (%object.Object.Monitor*)* } + %object.Object.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %object.OffsetTypeInfo = type { i32, %object.TypeInfo* } + %object.TypeInfo = type { %object.TypeInfo.__vtbl*, i8* } + %object.TypeInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %object.TypeInfo_Array = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo* } + %object.TypeInfo_Array.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %object.TypeInfo_Class = type { %object.TypeInfo.__vtbl*, i8*, %object.ClassInfo* } + %object.TypeInfo_Class.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %object.TypeInfo_Enum = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo*, %"byte[]", %"byte[]" } + %object.TypeInfo_Enum.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %object.TypeInfo_StaticArray = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo*, i32 } + %object.TypeInfo_StaticArray.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %object.TypeInfo_Struct = type { %object.TypeInfo.__vtbl*, i8*, %"byte[]", %"byte[]", i32 ()*, i32 (i8*)*, i32 (i8*)*, %"byte[]" ()*, i32 } + %object.TypeInfo_Struct.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %object.TypeInfo_Typedef = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo*, %"byte[]", %"byte[]" } + %object.TypeInfo_Typedef.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } + %"tango.core.Array.IsEqual!(char).IsEqual" = type <{ i8 }> + %tango.core.Exception.IllegalArgumentException = type { %object.Exception.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception* } + %tango.core.Exception.IllegalArgumentException.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Exception*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } + %tango.io.device.Array.Array = type { %tango.io.device.Array.Array.__vtbl*, i8*, %4*, %5*, %"byte[]", i32, i32, i32, i32, %6*, %7*, %8* } + %tango.io.device.Array.Array.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.Array.Array*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Array.Array*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, void (%tango.io.device.Array.Array*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]")*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)* } + %tango.io.device.Conduit.Conduit = type { %tango.io.device.Conduit.Conduit.__vtbl*, i8*, %2*, %3* } + %tango.io.device.Conduit.Conduit.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.Conduit.Conduit*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Conduit.Conduit*, %"byte[]")*, i32 (%tango.io.device.Conduit.Conduit*, %"byte[]")*, void (%tango.io.device.Conduit.Conduit*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)* } + %tango.io.device.Conduit.InputFilter = type { %tango.io.device.Conduit.InputFilter.__vtbl*, i8*, %tango.io.model.IConduit.InputStream*, %9* } + %tango.io.device.Conduit.InputFilter.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)* } + %tango.io.device.Device.Device = type { %tango.io.device.Device.Device.__vtbl*, i8*, %10*, %11*, i32, %12* } + %tango.io.device.Device.Device.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.Device.Device*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Device.Device*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, void (%tango.io.device.Device.Device*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, void (%tango.io.device.Device.Device*, i32)* } + %tango.io.device.File.File = type { %tango.io.device.File.File.__vtbl*, i8*, %13*, %14*, i32, %12*, %"byte[]", %tango.io.device.File.File.Style, %8* } + %tango.io.device.File.File.Style = type <{ i8, i8, i8, i8 }> + %tango.io.device.File.File.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.File.File*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Device.Device*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, void (%tango.io.device.Device.Device*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.File.File*, i64, i32)*, void (%tango.io.device.Device.Device*, i32)*, void (%tango.io.device.File.File.Style*, %tango.io.device.File.File*)*, i64 (%tango.io.device.File.File*)*, i64 (%tango.io.device.File.File*)*, void (%tango.io.device.File.File*, %"byte[]", %tango.io.device.File.F! ile.Style*)*, void (%tango.io.device.File.File*)*, void (%tango.io.device.File.File*, i64)* } + %tango.io.model.IConduit.IConduit = type { %tango.io.model.IConduit.IConduit.__vtbl* } + %tango.io.model.IConduit.IConduit.Seek = type { %tango.io.model.IConduit.IConduit.Seek.__vtbl* } + %tango.io.model.IConduit.IConduit.Seek.__vtbl = type { %object.ClassInfo* } + %tango.io.model.IConduit.IConduit.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")*, %"byte[]" (%tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.model.IConduit.InputStream*)*, i32 (%tango.io.model.IConduit.IConduit*)*, %"byte[]" (%tango.io.model.IConduit.IConduit*)*, i1 (%tango.io.model.IConduit.IConduit*)*, void (%tango.io.model.IConduit.IConduit*)*, void (%tango.io.model.IConduit.IConduit*, %"byte[]")* } + %tango.io.model.IConduit.IOStream = type { %tango.io.model.IConduit.IOStream.__vtbl* } + %tango.io.model.IConduit.IOStream.Mutator = type { %tango.io.model.IConduit.IConduit.Seek.__vtbl* } + %tango.io.model.IConduit.IOStream.Mutator.__vtbl = type { %object.ClassInfo* } + %tango.io.model.IConduit.IOStream.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)* } + %tango.io.model.IConduit.ISelectable = type { %tango.io.model.IConduit.ISelectable.__vtbl* } + %tango.io.model.IConduit.ISelectable.__vtbl = type { %object.ClassInfo*, i32 (%tango.io.model.IConduit.ISelectable*)* } + %tango.io.model.IConduit.InputBuffer = type { %tango.io.model.IConduit.InputBuffer.__vtbl* } + %tango.io.model.IConduit.InputBuffer.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")*, %"byte[]" (%tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.model.IConduit.InputStream*)*, %"byte[]" (%tango.io.model.IConduit.InputBuffer*)*, i1 (%tango.io.model.IConduit.InputBuffer*, %"uint delegate(char[])")*, i32 (%tango.io.model.IConduit.InputBuffer*, %"uint delegate(char[])")* } + %tango.io.model.IConduit.InputStream = type { %tango.io.model.IConduit.InputStream.__vtbl* } + %tango.io.model.IConduit.InputStream.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")*, %"byte[]" (%tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.model.IConduit.InputStream*)* } + %tango.io.model.IConduit.OutputBuffer = type { %tango.io.model.IConduit.OutputBuffer.__vtbl* } + %tango.io.model.IConduit.OutputBuffer.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.OutputStream*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*)*, %"byte[]" (%tango.io.model.IConduit.OutputBuffer*)*, %tango.io.model.IConduit.OutputBuffer* (%tango.io.model.IConduit.OutputBuffer*, %"byte[]")*, i32 (%tango.io.model.IConduit.OutputBuffer*, %"uint delegate(char[])")* } + %tango.io.model.IConduit.OutputStream = type { %tango.io.model.IConduit.OutputStream.__vtbl* } + %tango.io.model.IConduit.OutputStream.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.OutputStream*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*)* } + %"tango.io.stream.Iterator.Iterator!(char).Iterator" = type { %"tango.io.stream.Iterator.Iterator!(char).Iterator.__vtbl"*, i8*, %tango.io.model.IConduit.InputStream*, %9*, %tango.io.model.IConduit.InputBuffer*, %"byte[]", %"byte[]" } + %"tango.io.stream.Iterator.Iterator!(char).Iterator.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"byte[]")*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"* (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %tango.io.model.IConduit.InputStream*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref char[])"! )*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[])")*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[], ref char[])")* } + %"tango.io.stream.Lines.Lines!(char).Lines" = type { %"tango.io.stream.Iterator.Iterator!(char).Iterator.__vtbl"*, i8*, %tango.io.model.IConduit.InputStream*, %9*, %tango.io.model.IConduit.InputBuffer*, %"byte[]", %"byte[]" } + %"tango.io.stream.Lines.Lines!(char).Lines.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"byte[]")*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"* (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %tango.io.model.IConduit.InputStream*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref char[])")*, i32 (! %"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[])")*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[], ref char[])")* } + %tango.net.Socket.Address = type { %tango.net.Socket.Address.__vtbl*, i8* } + %tango.net.Socket.Address.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.Socket.Address*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.net.Socket.sockaddr* (%tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Address*)* } + %tango.net.Socket.IPv4Address = type { %tango.net.Socket.IPv4Address.__vtbl*, i8*, [8 x i8], %tango.net.Socket.IPv4Address.sockaddr_in } + %tango.net.Socket.IPv4Address.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.Socket.IPv4Address*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.net.Socket.sockaddr* (%tango.net.Socket.IPv4Address*)*, i32 (%tango.net.Socket.IPv4Address*)*, i32 (%tango.net.Socket.IPv4Address*)*, i16 (%tango.net.Socket.IPv4Address*)*, i32 (%tango.net.Socket.IPv4Address*)*, %"byte[]" (%tango.net.Socket.IPv4Address*)*, %"byte[]" (%tango.net.Socket.IPv4Address*)* } + %tango.net.Socket.IPv4Address.sockaddr_in = type { i16, i16, i32, [8 x i8] } + %tango.net.Socket.NetHost = type { %tango.net.Socket.NetHost.__vtbl*, i8*, %"byte[]", %"char[][]", %"Act[]" } + %tango.net.Socket.NetHost.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.net.Socket.NetHost*, %tango.net.Socket.hostent*)*, void (%tango.net.Socket.NetHost*, %tango.net.Socket.hostent*)*, i1 (%tango.net.Socket.NetHost*, %"byte[]")*, i1 (%tango.net.Socket.NetHost*, i32)*, i1 (%tango.net.Socket.NetHost*, %"byte[]")* } + %tango.net.Socket.Socket = type { %tango.net.Socket.Socket.__vtbl*, i8*, i32, i32, i32, i32 } + %tango.net.Socket.Socket.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.Socket.Socket*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.net.Socket.Socket*)*, void (%tango.net.Socket.Socket*, i32)*, i1 (%tango.net.Socket.Socket*)*, i1 (%tango.net.Socket.Socket*)*, void (%tango.net.Socket.Socket*, i1)*, i32 (%tango.net.Socket.Socket*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, %tango.net.Socket.Address*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, %tango.net.Socket.Address*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, %tango.net.Socket.Socket*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i1)*, %tango.net.Socket! .Socket* (%tango.net.Socket.Socket*, i1)*, void (%tango.net.Socket.Socket*, %tango.net.Socket.IPv4Address*, i1)*, void (%tango.net.Socket.Socket*)*, %tango.net.Socket.Address* (%tango.net.Socket.Socket*)*, %tango.net.Socket.Address* (%tango.net.Socket.Socket*)*, %tango.net.Socket.Address* (%tango.net.Socket.Socket*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32, %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32, %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, i32, i32, %"byte[]")*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32, i32, %"byte[]")* } + %tango.net.Socket.SocketSet = type { %tango.net.Socket.SocketSet.__vtbl*, i8*, i32, i8*, i32, i32 } + %tango.net.Socket.SocketSet.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.net.Socket.SocketSet*, i32)*, i32 (%tango.net.Socket.SocketSet*, i32)*, i32* (%tango.net.Socket.SocketSet*)*, i32 (%tango.net.Socket.SocketSet*)*, %tango.net.Socket.SocketSet* (%tango.net.Socket.SocketSet*)*, void (%tango.net.Socket.SocketSet*)*, void (%tango.net.Socket.SocketSet*, i32)*, void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)*, void (%tango.net.Socket.SocketSet*, i32)*, void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)*, i32 (%tango.net.Socket.SocketSet*, i32)*, i32 (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)*, i32 (%tango.net.Socket.SocketSet*)*, %"tango.core.Array.IsEqual!(char).IsEqual"* (%tango.net.Socket.SocketSet*)* } + %tango.net.Socket.fd_set = type <{ i8 }> + %tango.net.Socket.hostent = type { i8*, i8**, i32, i32, i8** } + %tango.net.Socket.sockaddr = type { i16, [14 x i8] } + %tango.net.Socket.timeval = type { i32, i32 } + %tango.net.SocketConduit.SocketConduit = type { %tango.net.SocketConduit.SocketConduit.__vtbl*, i8*, %15*, %16*, %tango.net.Socket.timeval, %tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*, i1, %tango.net.SocketConduit.SocketConduit*, i1, %17* } + %tango.net.SocketConduit.SocketConduit.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.SocketConduit.SocketConduit*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.net.SocketConduit.SocketConduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, void (%tango.net.SocketConduit.SocketConduit*)*, i1 (%tango.net.SocketConduit.SocketConduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketC! onduit*, float)*, i1 (%tango.net.SocketConduit.SocketConduit*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*)* } + %tango.net.ftp.FtpClient.FTPConnection = type { %tango.net.ftp.FtpClient.FTPConnection.__vtbl*, i8*, %tango.net.SocketConduit.SocketConduit*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"*, [8192 x i8], %"FtpFeature[]", %tango.net.ftp.FtpClient.FtpConnectionDetail, i32, %"byte[]", %tango.net.SocketConduit.SocketConduit*, %tango.time.Time.Time } + %tango.net.ftp.FtpClient.FTPConnection.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, %"byte[]" (%tango.net.ftp.Telnet.Telnet*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.time.Time.Time*)*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)*, %"FtpFeature[]" (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpAddress*)*, void (%tango.net.ftp.FtpClie! nt.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i16, %"byte[]", i16)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]")*, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*,! %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*)*,! %"byte[ ]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)*, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit**)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClien! t.FTPConnection*, %"byte[]", %"char[][]")*, %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)")*, %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.I! nputStream*, %"void delegate(uint pos)", i32)*, void (%tango.n! et.ftp.F tpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, i64)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)", i32)*, %tango.io.model.IConduit.InputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* } + %tango.net.ftp.FtpClient.FtpAddress = type { %"byte[]", %"byte[]", %"byte[]", %"byte[]", i32 } + %tango.net.ftp.FtpClient.FtpConnectionDetail = type { i32, %tango.net.Socket.Address*, %tango.net.Socket.Address* } + %tango.net.ftp.FtpClient.FtpException = type { %tango.net.ftp.FtpClient.FtpException.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception*, [3 x i8] } + %tango.net.ftp.FtpClient.FtpException.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.ftp.FtpClient.FtpException*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } + %tango.net.ftp.FtpClient.FtpFeature = type { %"byte[]", %"byte[]" } + %tango.net.ftp.FtpClient.FtpFileInfo = type { %"byte[]", i32, i64, %tango.time.Time.Time, %tango.time.Time.Time, %"byte[]", i8* } + %tango.net.ftp.FtpClient.FtpResponse = type { [3 x i8], %"byte[]" } + %tango.net.ftp.Telnet.Telnet = type { %tango.net.ftp.Telnet.Telnet.__vtbl*, i8*, %tango.net.SocketConduit.SocketConduit*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"*, [8192 x i8] } + %tango.net.ftp.Telnet.Telnet.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, %"byte[]" (%tango.net.ftp.Telnet.Telnet*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)* } + %"tango.text.Regex.CharClass!(dchar).CharClass" = type { %"CharRange!(dchar)[]" } + %"tango.text.Regex.CharRange!(dchar).CharRange" = type { i32, i32 } + %"tango.text.Regex.List!(StateElement).List" = type { %"tango.text.Regex.List!(StateElement).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.List!(StateElement).List.Element"* } + %"tango.text.Regex.List!(StateElement).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.List!(StateElement).List"* } + %"tango.text.Regex.List!(StateElement).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %"tango.text.Regex.List!(StateElement).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(! StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List"*)*, i32 (%"tango.text.Regex.List!(StateElement).List"*)*, i1 (%"tango.text.Regex.List!(StateElement).List"*)*, void (%"tango.text.Regex.List!(StateElement).List"*)*, void (%"tango.text.Regex.List!(StateElement).List"*)*, void (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List.Element"*)*, i32 (%"tango.text.Regex.List!(State! Element).List"*, %18)*, i32 (%"tango.text.Regex.List!(StateEle! ment).Li st"*, %18)*, i32 (%"tango.text.Regex.List!(StateElement).List"*, %"int delegate(ref StateElement)")*, i32 (%"tango.text.Regex.List!(StateElement).List"*, %"int delegate(ref StateElement)")* } + %"tango.text.Regex.List!(SubsetState).List" = type { %"tango.text.Regex.List!(SubsetState).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.List!(SubsetState).List.Element"* } + %"tango.text.Regex.List!(SubsetState).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.List!(SubsetState).List"* } + %"tango.text.Regex.List!(SubsetState).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %"tango.text.Regex.List!(SubsetState).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).Lis! t"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List"*)*, i32 (%"tango.text.Regex.List!(SubsetState).List"*)*, i1 (%"tango.text.Regex.List!(SubsetState).List"*)*, void (%"tango.text.Regex.List!(SubsetState).List"*)*, void (%"tango.text.Regex.List!(SubsetState).List"*)*, void (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List.Element"*)*, i32 (%"tango.text.Regex.List!(SubsetState).List"*, %19)*, i32 (%"tango! .text.Regex.List!(SubsetState).List"*, %19)*, i32 (%"tango.tex! t.Regex. List!(SubsetState).List"*, %"int delegate(ref SubsetState)")*, i32 (%"tango.text.Regex.List!(SubsetState).List"*, %"int delegate(ref SubsetState)")* } + %"tango.text.Regex.List!(TNFAFragment).List" = type { %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"* } + %"tango.text.Regex.List!(TNFAFragment).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.List!(TNFAFragment).List"* } + %"tango.text.Regex.List!(TNFAFragment).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %"tango.text.Regex.List!(TNFAFragment).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.! Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)*, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*)*, i1 (%"tango.text.Regex.List!(TNFAFragment).List"*)*, void (%"tango.text.Regex.List!(TNFAFragment).List"*)*, void (%"tango.text.Regex.List!(TNFAFragment).List"*)*, void (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*)*, i32 (%"tang! o.text.Regex.List!(TNFAFragment).List"*, %1)*, i32 (%"tango.te! xt.Regex .List!(TNFAFragment).List"*, %1)*, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")*, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")* } + %"tango.text.Regex.List!(TNFATransition).List" = type { %"tango.text.Regex.List!(TNFATransition).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.List!(TNFATransition).List.Element"* } + %"tango.text.Regex.List!(TNFATransition).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.List!(TNFATransition).List"* } + %"tango.text.Regex.List!(TNFATransition).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %"tango.text.Regex.List!(TNFATransition).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)*, %"tango.text.Regex.Lis! t!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*)*, i1 (%"tango.text.Regex.List!(TNFATransition).List"*)*, void (%"tango.text.Regex.List!(TNFATransition).List"*)*, void (%"tango.text.Regex.List!(TNFATransition).List"*)*, void (%"tango.text.Regex.List!(TNFATran! sition).List"*, %"tango.text.Regex.List!(TNFATransition).List.! Element" *)*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")* } + %"tango.text.Regex.Pair!(uint).Pair" = type { i32, i32 } + %"tango.text.Regex.Predicate!(dchar).Predicate" = type { %"tango.text.Regex.CharClass!(dchar).CharClass", i32, i32, %"byte[]", i32 } + %tango.text.Regex.RegExpException = type { %object.Exception.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception* } + %tango.text.Regex.RegExpException.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Exception*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } + %"tango.text.Regex.RegExpT!(char).RegExpT" = type { %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*, i8*, %"Act[]", i32, i32, %"tango.text.Regex.TDFA!(dchar).TDFA"*, %"byte[]", %"byte[]" } + %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.RegExpT!(char).RegExpT"* (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")*, i32 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"int delegate(ref RegExpT)")*, i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")*, i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*)*, %"char[][]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"byte[]", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"b! yte[]", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"byte[]", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"char[] delegate(RegExpT)", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", i1)*, i32 (%"tango.text.Regex.RegExpT!(char).RegExpT"*)* } + %"tango.text.Regex.Stack!(Operator).Stack" = type { i32, %"Act[]" } + %"tango.text.Regex.Stack!(Pair!(uint)).Stack" = type { i32, %"CharRange!(dchar)[]" } + %"tango.text.Regex.Stack!(TNFATransition).Stack" = type { i32, %"TNFATransition[]" } + %"tango.text.Regex.Stack!(uint).Stack" = type { i32, %"Act[]" } + %"tango.text.Regex.TDFA!(dchar).TDFA" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.__vtbl"*, i8*, %"State[]", %"tango.text.Regex.TDFA!(dchar).TDFA.State"*, %"CharRange!(dchar)[]", i32, i8*, i32, %"Mark[]" } + %"tango.text.Regex.TDFA!(dchar).TDFA.Command" = type { i32, i32 } + %"tango.text.Regex.TDFA!(dchar).TDFA.Mark" = type { i32, i1, i8, i16 } + %"tango.text.Regex.TDFA!(dchar).TDFA.State" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.State.__vtbl"*, i8*, i1, i32, %"Transition[]", %"Transition[]", %"CharRange!(dchar)[]", %"byte[]", i32, %"tango.text.Regex.TDFA!(dchar).TDFA"* } + %"tango.text.Regex.TDFA!(dchar).TDFA.State.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%"tango.text.Regex.TDFA!(dchar).TDFA.State"*)*, void (%"tango.text.Regex.TDFA!(dchar).TDFA.State"*)* } + %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement.__vtbl"*, i8*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, i8*, i32, i32, %"tango.text.Regex.TDFA!(dchar).TDFA"* } + %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, i32 (%object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i1 (%"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)* } + %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState.__vtbl"*, i8*, %"StateElement[]", %"tango.text.Regex.TDFA!(dchar).TDFA.State"*, %"tango.text.Regex.TDFA!(dchar).TDFA"* } + %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"int delegate(ref TNFATransition)")* } + %"tango.text.Regex.TDFA!(dchar).TDFA.TagIndex" = type { i32, i32 } + %"tango.text.Regex.TDFA!(dchar).TDFA.Transition" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.Transition.__vtbl"*, i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.State"*, %"tango.text.Regex.Predicate!(dchar).Predicate", %"CharRange!(dchar)[]", %"tango.text.Regex.TDFA!(dchar).TDFA"* } + %"tango.text.Regex.TDFA!(dchar).TDFA.Transition.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*, %object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*, %object.Object*)*, i1 (%"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*, %"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*)* } + %"tango.text.Regex.TDFA!(dchar).TDFA.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA"*)* } + %"tango.text.Regex.TNFA!(dchar).TNFA" = type { %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"*, i8*, %"Act[]", %"TNFAState[]", %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, i1, i32, i32, i32, %"tango.text.Regex.List!(TNFATransition).List"*, i8*, i8* } + %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%"tango.text.Regex.TNFA!(dchar).TNFA"*)*, void (%"tango.text.Regex.TNFA!(dchar).TNFA"*, i1)* } + %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment" = type { %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"*, i8*, %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*, i1 } + %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)*, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* } + %"tango.text.Regex.TNFAState!(dchar).TNFAState" = type { %object.ModuleInfo.__vtbl*, i8*, i1, i1, i32, %"tango.text.Regex.List!(TNFATransition).List"* } + %"tango.text.Regex.TNFAState!(dchar).TNFAState.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %"tango.text.Regex.TNFATransition!(dchar).TNFATransition" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, %"tango.text.Regex.Predicate!(dchar).Predicate", i32, i32, i32 } + %"tango.text.Regex.TNFATransition!(dchar).TNFATransition.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } + %"tango.text.Util.DelimFruct!(char).DelimFruct" = type { %"byte[]", %"byte[]" } + %"tango.text.Util.LineFruct!(char).LineFruct" = type { %"byte[]" } + %"tango.text.convert.Integer._FormatterInfo!(char)._FormatterInfo" = type { i32, %"byte[]", %"byte[]" } + %"tango.text.convert.Integer._FormatterInfo!(dchar)._FormatterInfo" = type { i32, %"Act[]", %"Act[]" } + %"tango.text.convert.Integer._FormatterInfo!(wchar)._FormatterInfo" = type { i32, %"wchar[]", %"wchar[]" } + %"tango.text.convert.Layout.Layout!(char).Layout" = type { %"tango.text.convert.Layout.Layout!(char).Layout.__vtbl"*, i8* } + %"tango.text.convert.Layout.Layout!(char).Layout.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"byte[]" (%"tango.text.convert.Layout.Layout!(char).Layout"*, %"byte[]", %"byte[]", %object.TypeInfo*, i8*)*, %"byte[]" (%"tango.text.convert.Layout.Layout!(char).Layout"*, %"byte[]", i64, %"byte[]", i64, %"byte[]")*, %"byte[]" (%"tango.text.convert.Layout.Layout!(char).Layout"*, %"byte[]", double, %"byte[]")* } + %tango.time.Time.Date = type { i32, i32, i32, i32, i32, i32 } + %tango.time.Time.DateTime = type { %tango.time.Time.Date, %tango.time.Time.TimeOfDay } + %tango.time.Time.Time = type { i64 } + %tango.time.Time.TimeOfDay = type { i32, i32, i32, i32 } + %tango.time.Time.TimeSpan = type { i64 } + %tango.time.chrono.Calendar.Calendar = type { %tango.time.chrono.Calendar.Calendar.__vtbl*, i8* } + %tango.time.chrono.Calendar.Calendar.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.time.Time.Date*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, void (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32*, i32*, i32*, i32*, i32*, i32*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.DateTime*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*, %tango.time.Time.TimeOfDay*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar! *, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32, i32)*, i1 (%tango.time.chrono.Calendar.Calendar*, i32)*, i1 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, %"Act[]" (%tango.time.chrono.Calendar.Calendar*)*, i32 (%tango.time.chrono.Calendar.Calendar*! )*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.! Calendar *, %tango.time.Time.Time*, i32, i1)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32)* } + %tango.time.chrono.Gregorian.Gregorian = type { %tango.time.chrono.Gregorian.Gregorian.__vtbl*, i8*, i32 } + %tango.time.chrono.Gregorian.Gregorian.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.time.Time.Date*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, void (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*, i32*, i32*, i32*, i32*, i32*, i32*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.DateTime*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*, %tango.time.Time.TimeOfDay*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Gregorian.Gregorian*, i32, i32, i32, i32, i32, i32, i32, i32)*, i32 (%tango.time.chrono.Gregorian.G! regorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32, i32)*, i1 (%tango.time.chrono.Calendar.Calendar*, i32)*, i1 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32)*, %"Act[]" (%tango.time.chrono.Gregorian.Gregorian*)*, i32 (%tango.ti! me.chrono.Gregorian.Gregorian*)*, void (%tango.time.Time.Time*! , %tango .time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*, i32, i1)*, void (%tango.time.Time.Time*, %tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*)* } + %"ubyte[]" = type { i32, i8* } + %"uint delegate(char[])" = type { i8*, i32 (i8*, %"byte[]")* } + %"uint delegate(void[])" = type { i8*, i32 (i8*, %"byte[]")* } + %"uint[]" = type { i32, i32* } + %"void delegate(char[])" = type { i8*, void (i8*, %"byte[]")* } + %"void delegate(uint pos)" = type { i8*, void (i8*, i32)* } + %"void*[]" = type { i32, i8** } + %"void[]" = type { i32, i8* } + %"wchar[]" = type { i32, i16* } + %"wchar[][]" = type { i32, %"wchar[]"* } + at _D5tango3net3ftp9FtpClient10FtpAddress6__initZ = constant %tango.net.ftp.FtpClient.FtpAddress { %"byte[]" zeroinitializer, %"byte[]" zeroinitializer, %"byte[]" { i32 9, i8* getelementptr ([10 x i8]* @.str, i32 0, i32 0) }, %"byte[]" { i32 19, i8* getelementptr ([20 x i8]* @.str1, i32 0, i32 0) }, i32 21 }, align 4 ; <%tango.net.ftp.FtpClient.FtpAddress*> [#uses=1] + at .str = internal constant [10 x i8] c"anonymous\00" ; <[10 x i8]*> [#uses=1] + at .str1 = internal constant [20 x i8] c"anonymous at anonymous\00" ; <[20 x i8]*> [#uses=1] + at _D46TypeInfo_S5tango3net3ftp9FtpClient10FtpAddress6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 34, i8* getelementptr ([35 x i8]* @.str2, i32 0, i32 0) }, %"byte[]" { i32 36, i8* bitcast (%tango.net.ftp.FtpClient.FtpAddress* @_D5tango3net3ftp9FtpClient10FtpAddress6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 1 } ; <%20*> [#uses=1] + at _D6Object7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=11] + at _D15TypeInfo_Struct6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=5] + at .str2 = internal constant [35 x i8] c"tango.net.ftp.FtpClient.FtpAddress\00" ; <[35 x i8]*> [#uses=1] + at _D5tango3net3ftp9FtpClient11FtpResponse6__initZ = constant %tango.net.ftp.FtpClient.FtpResponse { [3 x i8] c"000", %"byte[]" zeroinitializer }, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + at _D5tango3net3ftp9FtpClient19FtpConnectionDetail6__initZ = constant %tango.net.ftp.FtpClient.FtpConnectionDetail { i32 1, %tango.net.Socket.Address* null, %tango.net.Socket.Address* null }, align 4 ; <%tango.net.ftp.FtpClient.FtpConnectionDetail*> [#uses=0] + at _D5tango3net3ftp9FtpClient10FtpFeature6__initZ = constant %tango.net.ftp.FtpClient.FtpFeature zeroinitializer, align 4 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] + at _D46TypeInfo_S5tango3net3ftp9FtpClient10FtpFeature6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 34, i8* getelementptr ([35 x i8]* @.str5, i32 0, i32 0) }, %"byte[]" { i32 16, i8* bitcast (%tango.net.ftp.FtpClient.FtpFeature* @_D5tango3net3ftp9FtpClient10FtpFeature6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 1 } ; <%20*> [#uses=1] + at .str5 = internal constant [35 x i8] c"tango.net.ftp.FtpClient.FtpFeature\00" ; <[35 x i8]*> [#uses=1] + at _D5tango3net3ftp9FtpClient11FtpFileInfo6__initZ = constant %tango.net.ftp.FtpClient.FtpFileInfo { %"byte[]" zeroinitializer, i32 0, i64 -1, %tango.time.Time.Time { i64 3155378975999999999 }, %tango.time.Time.Time { i64 3155378975999999999 }, %"byte[]" zeroinitializer, i8* null }, align 4 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=1] + at _D5tango4time4Time4Time3maxS5tango4time4Time4Time = external constant %tango.time.Time.Time, align 4 ; <%tango.time.Time.Time*> [#uses=1] + at _D47TypeInfo_S5tango3net3ftp9FtpClient11FtpFileInfo6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 35, i8* getelementptr ([36 x i8]* @.str6, i32 0, i32 0) }, %"byte[]" { i32 48, i8* bitcast (%tango.net.ftp.FtpClient.FtpFileInfo* @_D5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 1 } ; <%20*> [#uses=1] + at .str6 = internal constant [36 x i8] c"tango.net.ftp.FtpClient.FtpFileInfo\00" ; <[36 x i8]*> [#uses=1] + at _D9Exception7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=1] + at _D5tango3net3ftp9FtpClient12FtpException7__ClassZ = global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 40, i8* bitcast (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ to i8*) }, %"byte[]" { i32 36, i8* getelementptr ([37 x i8]* @.str7, i32 0, i32 0) }, %"void*[]" { i32 6, i8** bitcast (%tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D9Exception7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D48TypeInfo_C5tango3net3ftp9FtpClient12FtpException6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=17] + at _D5tango3net3ftp9FtpClient12FtpException6__initZ = constant %tango.net.ftp.FtpClient.FtpException { %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, i8* null, %"byte[]" zeroinitializer, %"byte[]" zeroinitializer, i32 0, %object.Exception.TraceInfo* null, %object.Exception* null, [3 x i8] c"000" }, align 4 ; <%tango.net.ftp.FtpClient.FtpException*> [#uses=2] + at _D5tango3net3ftp9FtpClient12FtpException6__vtblZ = constant %tango.net.ftp.FtpClient.FtpException.__vtbl { %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ, %"byte[]" (%tango.net.ftp.FtpClient.FtpException*)* @_D5tango3net3ftp9FtpClient12FtpException8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, void (%object.Exception*, %"void delegate(char[])")* @_D6object9Exception8writeOutMFDFAaZvZv } ; <%tango.net.ftp.FtpClient.FtpException.__vtbl*> [#uses=12] + at _D48TypeInfo_C5tango3net3ftp9FtpClient12FtpException6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at _D14TypeInfo_Class6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=10] + at _D9ClassInfo6__vtblZ = external constant %object.ClassInfo.__vtbl ; <%object.ClassInfo.__vtbl*> [#uses=10] + at .str7 = internal constant [37 x i8] c"tango.net.ftp.FtpClient.FtpException\00" ; <[37 x i8]*> [#uses=1] + at _D5tango3net3ftp6Telnet6Telnet7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=1] + at _D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ = global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 8252, i8* bitcast (%tango.net.ftp.FtpClient.FTPConnection* @_D5tango3net3ftp9FtpClient13FTPConnection6__initZ to i8*) }, %"byte[]" { i32 37, i8* getelementptr ([38 x i8]* @.str9, i32 0, i32 0) }, %"void*[]" { i32 63, i8** bitcast (%tango.net.ftp.FtpClient.FTPConnection.__vtbl* @_D5tango3net3ftp9FtpClient13FTPConnection6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D5tango3net3ftp6Telnet6Telnet7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* bitcast (%tango.net.ftp.FtpClient.FTPConnection* (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection5_ctorMFZC5tango3net3ftp9FtpClient13FTPConnection to i8*), %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D49TypeInfo_C5tango3net3ftp9FtpClient13FTPConnection6__initZ to %object.T! ypeInfo*) } ; <%object.ClassInfo*> [#uses=3] + at _D5tango3net3ftp9FtpClient13FTPConnection6__initZ = constant %tango.net.ftp.FtpClient.FTPConnection { %tango.net.ftp.FtpClient.FTPConnection.__vtbl* @_D5tango3net3ftp9FtpClient13FTPConnection6__vtblZ, i8* null, %tango.net.SocketConduit.SocketConduit* null, %"tango.io.stream.Iterator.Iterator!(char).Iterator"* null, [8192 x i8] c"\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF", %"FtpFeature[]" zeroinitializer, %tango.net.ftp.FtpClient.FtpConnectionDetail { i32 1, %tango.net.Socket.Address* null, %tango.net.Socket.Address* null }, i32 0, %"byte[]" { i32 0, i8* getelementptr ([1 x i8]* @.str8, i32 0, i32 0) }, %tango.net.SocketConduit.SocketConduit* null, %tango.time.Time.Time { i64 50000000 } }, align 4 ; <%tango.net.ftp.FtpClient.FTPConnection*> [#uses=1] + at _D5tango3net3ftp9FtpClient13FTPConnection6__vtblZ = constant %tango.net.ftp.FtpClient.FTPConnection.__vtbl { %object.ClassInfo* @_D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFAaZv, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")* @_D5tango3net3ftp6Telnet6Telnet8sendlineMFAvZv, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")* @_D5tango3net3ftp6Telnet6Telnet8sendDataMFAvZv, %"byte[]" (%tango.net.ftp.Telnet.Telnet*)* @_D5tango3net3ftp6Telnet6Telnet8readLineMFZAa, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)* @_D5tango3net3ftp6Telnet6Telnet19findAvail! ableServerMFAaiZC5tango3net13SocketConduit13SocketConduit, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFZS5tango4time4Time8TimeSpan, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.time.Time.Time*)* @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFS5tango4time4Time8TimeSpanZv, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection12shutdownTimeMFZS5tango4time4Time8TimeSpan, %"FtpFeature[]" (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection17supportedFeaturesMFZAS5tango3net3ftp9FtpClient10FtpFeature, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)* @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFS5tango3net3ftp9FtpClient11FtpResponseZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpAddress*)* @_D5tango3net3ftp9FtpClient13FT! PConnection7connectMFS5tango3net3ftp9FtpClient10FtpAddressZv, ! void (%t ango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection7connectMFAaAaAakZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection5closeMFZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection10setPassiveMFZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i16, %"byte[]", i16)* @_D5tango3net3ftp9FtpClient13FTPConnection9setActiveMFAatAatZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection2cdMFAaZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection4cdupMFZv, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection3cwdMFZAa, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection5chmodMFAaiZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[! ]")* @_D5tango3net3ftp9FtpClient13FTPConnection3delMFAaZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection2rmMFAaZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection6renameMFAaAaZv, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection5existMFAaZi, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection4sizeMFAaE5tango3net3ftp9FtpClient9FtpFormatZk, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)* @_D5tango3net3ftp9FtpClient13FTPConnection4typeMFE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection8modifiedMFAaZS5tango4time4Time4Time, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPCo! nnection12parseTimevalMFAaZS5tango4time4Time4Time, void (%tang! o.net.ft p.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection4noopMFZv, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection5mkdirMFAaZAa, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection11getFeaturesMFZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")* @_D5tango3net3ftp9FtpClient13FTPConnection11sendCommandMFAaAAaXv, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFAaZS5tango3net3ftp9FtpClient11FtpResponse, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFZS5tango3net3ftp9FtpClient11FtpResponse, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)* @_D5tango3net3ftp9FtpClient13FTPConnection8parse257MFS5tango3n! et3ftp9FtpClient11FtpResponseZAa, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection13getDataSocketMFZC5tango3net13SocketConduit13SocketConduit, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection14connectPassiveMFZC5tango3net13SocketConduit13SocketConduit, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection11isSupportedMFAaZb, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection12is_supportedMFAaZb, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit**)* @_D5tango3net3ftp9FtpClient13FTPConnection17prepareDataSocketMFKC5tango3net13SocketConduit13SocketConduitZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)* @_D5tango3net3ftp9FtpClient13FTPConnection17finishDa! taCommandMFC5tango3net13SocketConduit13SocketConduitZv, %tango! .net.Soc ketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")* @_D5tango3net3ftp9FtpClient13FTPConnection18processDataCommandMFAaAAaXC5tango3net13SocketConduit13SocketConduit, %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection2lsMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")* @_D5tango3net3ftp9FtpClient13FTPConnection10readStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit12OutputStreamDFkZvZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)")* @_D5tango3net3ftp9FtpClient13FTPConnection10sendStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit11InputStreamDFkZvZv, %"FtpFileInfo[]" (%! tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection15sendListCommandMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection13parseMlstLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection11getFileInfoMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3putMFAaAaDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTP! Connection*, %"byte[]", %tango.io.model.IConduit.InputStream*,! %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3putMFAaC5tango2io5model8IConduit11InputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection6appendMFAaC5tango2io5model8IConduit11InputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)* @_D5tango3net3ftp9FtpClient13FTPConnection11restartSeekMFkZv, void (%tango.net.ftp.FtpClient.FTPConnection*, i64)* @_D5tango3net3ftp9FtpClient13FTPConnection8allocateMFlZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3getMFAaAaDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection10enableUTF8MFZv, void (%tango.net.ftp.FtpClient.! FTPConnection*, %"byte[]", %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3getMFAaC5tango2io5model8IConduit12OutputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, %tango.io.model.IConduit.InputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection5inputMFAaZC5tango2io5model8IConduit11InputStream, %tango.io.model.IConduit.OutputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection6outputMFAaZC5tango2io5model8IConduit12OutputStream } ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=2] + at .str8 = internal constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1] + at _D49TypeInfo_C5tango3net3ftp9FtpClient13FTPConnection6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str9 = internal constant [38 x i8] c"tango.net.ftp.FtpClient.FTPConnection\00" ; <[38 x i8]*> [#uses=1] + at _D5tango4text5Regex11__T4TNFATwZ4TNFA7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 56, i8* bitcast (%"tango.text.Regex.TNFA!(dchar).TNFA"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ to i8*) }, %"byte[]" { i32 34, i8* getelementptr ([35 x i8]* @.str51, i32 0, i32 0) }, %"void*[]" { i32 7, i8** bitcast (%"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D45TypeInfo_C5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=2] + at _D5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ = weak_odr constant %"tango.text.Regex.TNFA!(dchar).TNFA" { %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA6__vtblZ, i8* null, %"Act[]" zeroinitializer, %"TNFAState[]" zeroinitializer, %"tango.text.Regex.TNFAState!(dchar).TNFAState"* null, i1 false, i32 0, i32 0, i32 0, %"tango.text.Regex.List!(TNFATransition).List"* null, i8* null, i8* null }, align 4 ; <%"tango.text.Regex.TNFA!(dchar).TNFA"*> [#uses=1] + at _D5tango4text5Regex11__T4TNFATwZ4TNFA6__vtblZ = weak_odr constant %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex11__T4TNFATwZ4TNFA7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, i32 (%"tango.text.Regex.TNFA!(dchar).TNFA"*)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA8tagCountMFZk, void (%"tango.text.Regex.TNFA!(dchar).TNFA"*, i1)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv } ; <%"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"*> [#uses=2] + at _D5tango4text5Regex11__T4TNFATwZ4TNFA14operator_namesAAa = weak_odr constant %"char[][]" { i32 17, %"byte[]"* getelementptr ([17 x %"byte[]"]* @.constarray, i32 0, i32 0) }, align 4 ; <%"char[][]"*> [#uses=0] + at .str10 = internal constant [4 x i8] c"EOS\00" ; <[4 x i8]*> [#uses=1] + at .str11 = internal constant [7 x i8] c"concat\00" ; <[7 x i8]*> [#uses=1] + at .str12 = internal constant [2 x i8] c"|\00" ; <[2 x i8]*> [#uses=1] + at .str13 = internal constant [2 x i8] c"(\00" ; <[2 x i8]*> [#uses=1] + at .str14 = internal constant [2 x i8] c")\00" ; <[2 x i8]*> [#uses=1] + at .str15 = internal constant [2 x i8] c"?\00" ; <[2 x i8]*> [#uses=1] + at .str16 = internal constant [2 x i8] c"*\00" ; <[2 x i8]*> [#uses=1] + at .str17 = internal constant [2 x i8] c"+\00" ; <[2 x i8]*> [#uses=1] + at .str18 = internal constant [3 x i8] c"??\00" ; <[3 x i8]*> [#uses=1] + at .str19 = internal constant [3 x i8] c"*?\00" ; <[3 x i8]*> [#uses=1] + at .str20 = internal constant [3 x i8] c"+?\00" ; <[3 x i8]*> [#uses=1] + at .str21 = internal constant [4 x i8] c"??x\00" ; <[4 x i8]*> [#uses=1] + at .str22 = internal constant [4 x i8] c"*?x\00" ; <[4 x i8]*> [#uses=1] + at .str23 = internal constant [4 x i8] c"+?x\00" ; <[4 x i8]*> [#uses=1] + at .str24 = internal constant [3 x i8] c"(?\00" ; <[3 x i8]*> [#uses=1] + at .str25 = internal constant [6 x i8] c"{x,y}\00" ; <[6 x i8]*> [#uses=1] + at .str26 = internal constant [7 x i8] c"{x,y}?\00" ; <[7 x i8]*> [#uses=1] + at .constarray = internal global [17 x %"byte[]"] [%"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str10, i32 0, i32 0) }, %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str11, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str12, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str13, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str14, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str15, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str16, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str17, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str18, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str19, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str20, i32 0, i32 0) }, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str21, i32 0, i32 0) }, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.s! tr22, i32 0, i32 0) }, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str23, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str24, i32 0, i32 0) }, %"byte[]" { i32 5, i8* getelementptr ([6 x i8]* @.str25, i32 0, i32 0) }, %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str26, i32 0, i32 0) }] ; <[17 x %"byte[]"]*> [#uses=1] + at _D5tango4text5Regex11__T4TNFATwZ4TNFA12action_namesAAa = weak_odr constant %"char[][]" { i32 6, %"byte[]"* getelementptr ([6 x %"byte[]"]* @.constarray33, i32 0, i32 0) }, align 4 ; <%"char[][]"*> [#uses=0] + at .str27 = internal constant [13 x i8] c"push+advance\00" ; <[13 x i8]*> [#uses=1] + at .str28 = internal constant [9 x i8] c"pop+copy\00" ; <[9 x i8]*> [#uses=1] + at .str29 = internal constant [12 x i8] c"pop+advance\00" ; <[12 x i8]*> [#uses=1] + at .str30 = internal constant [17 x i8] c"pop+copy+advance\00" ; <[17 x i8]*> [#uses=1] + at .str31 = internal constant [5 x i8] c"done\00" ; <[5 x i8]*> [#uses=1] + at .str32 = internal constant [6 x i8] c"error\00" ; <[6 x i8]*> [#uses=1] + at .constarray33 = internal global [6 x %"byte[]"] [%"byte[]" { i32 12, i8* getelementptr ([13 x i8]* @.str27, i32 0, i32 0) }, %"byte[]" { i32 8, i8* getelementptr ([9 x i8]* @.str28, i32 0, i32 0) }, %"byte[]" { i32 11, i8* getelementptr ([12 x i8]* @.str29, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str30, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str31, i32 0, i32 0) }, %"byte[]" { i32 5, i8* getelementptr ([6 x i8]* @.str32, i32 0, i32 0) }] ; <[6 x %"byte[]"]*> [#uses=1] + at _D5tango4text5Regex11__T4TNFATwZ4TNFA13action_lookupAE5tango4text5Regex11__T4TNFATwZ4TNFA3Act = weak_odr constant %"Act[]" { i32 289, i32* getelementptr ([289 x i32]* @.constarray34, i32 0, i32 0) }, align 4 ; <%"Act[]"*> [#uses=0] + at .constarray34 = internal global [289 x i32] [i32 4, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 ! 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 5, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0! , i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 ! 1, i32 1 , i32 0, i32 1, i32 1] ; <[289 x i32]*> [#uses=2] + at _D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 52, i8* bitcast (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to i8*) }, %"byte[]" { i32 54, i8* getelementptr ([55 x i8]* @.str47, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=19] + at _D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ = weak_odr constant %"tango.text.Regex.TNFATransition!(dchar).TNFATransition" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, i8* null, %"tango.text.Regex.TNFAState!(dchar).TNFAState"* null, %"tango.text.Regex.Predicate!(dchar).Predicate" { %"tango.text.Regex.CharClass!(dchar).CharClass" zeroinitializer, i32 0, i32 0, %"byte[]" zeroinitializer, i32 65535 }, i32 0, i32 0, i32 0 }, align 4 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=2] + at _D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=19] + at _D5tango4text5Regex16__T9CharClassTwZ9CharClass13line_startendS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=2] + at _D5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ = external constant %tango.net.Socket.timeval, align 4 ; <%tango.net.Socket.timeval*> [#uses=1] + at _D55TypeInfo_S5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ = linkonce_odr constant %21 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 44, i8* getelementptr ([45 x i8]* @.str35, i32 0, i32 0) }, %"byte[]" { i32 8, i8* bitcast (%tango.net.Socket.timeval* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to i8*) }, i8* null, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange8opEqualsMFPS5tango4text5Regex16__T9CharRangeTwZ9CharRangeZi, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange5opCmpMFPS5tango4text5Regex16__T9CharRangeTwZ9CharRangeZi, %"byte[]" (%tango.net.Socket.timeval*)* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange8toStringMFZAa, i32 0 } ; <%21*> [#uses=1] + at .str35 = internal constant [45 x i8] c"tango.text.Regex.CharRange!(dchar).CharRange\00" ; <[45 x i8]*> [#uses=1] + at _D5tango4text5Regex16__T9CharClassTwZ9CharClass5digitS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=2] + at _D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=6] + at _D5tango4text5Regex16__T9CharClassTwZ9CharClass8any_charS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=3] + at _D5tango4text5Regex16__T9CharClassTwZ9CharClass8dot_operS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=1] + at _D5tango4text5Regex16__T9CharClassTwZ9CharClass9alphanum_S5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=2] + at _D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 20, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to i8*) }, %"byte[]" { i32 44, i8* getelementptr ([45 x i8]* @.str46, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* (%"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState5_ctorMFZC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState to i8*), %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9T! NFAState6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=16] + at _D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ = weak_odr constant %"tango.text.Regex.TNFAState!(dchar).TNFAState" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ, i8* null, i1 false, i1 false, i32 0, %"tango.text.Regex.List!(TNFATransition).List"* null }, align 4 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=2] + at _D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=16] + at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 20, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ to i8*) }, %"byte[]" { i32 43, i8* getelementptr ([44 x i8]* @.str45, i32 0, i32 0) }, %"void*[]" { i32 22, i8** bitcast (%"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 36, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D102TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransiti! onZ4List6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=67] + at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFATransition).List" { %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, i8* null, i32 0, %"tango.text.Regex.List!(TNFATransition).List.Element"* null, %"tango.text.Regex.List!(TNFATransition).List.Element"* null }, align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ = weak_odr constant %"tango.text.Regex.List!(TNFATransition).List.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11opCatAssignMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransi! tionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11insertAfterMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11insertAfterMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementC5tango4! text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4tex! t5Regex6 8__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11opCatAssignMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4ListZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List9pushFrontMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"! * (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List12insertBeforeMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List12insertBeforeMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tan! go4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitio! nTwZ14TN FATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List9pushFrontMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4ListZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, i32 (%"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6lengthMFZk, i1 (%"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List5emptyMFZb, void (%"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List5clearMFZv, void (%"tango.text.Regex.List!(TNFATra! nsition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List3popMFZv, void (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6removeMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementZv, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List8elementsMFDFKC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementZiZi, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List16elements_reverseMFDFKC5tango4text5Regex68__T4ListTC5tango4te! xt5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element! ZiZi, i3 2 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7opApplyMFDFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZiZi, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List14opApplyReverseMFDFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZiZi } ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=67] + at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 24, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List.Element"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__initZ to i8*) }, %"byte[]" { i32 51, i8* getelementptr ([52 x i8]* @.str44, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D110TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATrans! itionZ4List7Element6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=8] + at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFATransition).List.Element" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__vtblZ, i8* null, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* null, %"tango.text.Regex.List!(TNFATransition).List.Element"* null, %"tango.text.Regex.List!(TNFATransition).List.Element"* null, %"tango.text.Regex.List!(TNFATransition).List"* null }, align 4 ; <%"tango.text.Regex.List!(TNFATransition).List.Element"*> [#uses=2] + at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=8] + at _D110TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str44 = internal constant [52 x i8] c"tango.text.Regex.List!(TNFATransition).List.Element\00" ; <[52 x i8]*> [#uses=1] + at _D102TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str45 = internal constant [44 x i8] c"tango.text.Regex.List!(TNFATransition).List\00" ; <[44 x i8]*> [#uses=1] + at _D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str46 = internal constant [45 x i8] c"tango.text.Regex.TNFAState!(dchar).TNFAState\00" ; <[45 x i8]*> [#uses=1] + at _D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str47 = internal constant [55 x i8] c"tango.text.Regex.TNFATransition!(dchar).TNFATransition\00" ; <[55 x i8]*> [#uses=1] + at _D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 28, i8* bitcast (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ to i8*) }, %"byte[]" { i32 50, i8* getelementptr ([51 x i8]* @.str48, i32 0, i32 0) }, %"void*[]" { i32 7, i8** bitcast (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* bitcast (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment5_ctorMFZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment to i8*), %object.Ty! peInfo* bitcast (%object.TypeInfo_Class* @_D63TypeInfo_C5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=13] + at _D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ = weak_odr constant %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment" { %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ, i8* null, %"tango.text.Regex.List!(TNFATransition).List"* null, %"tango.text.Regex.List!(TNFATransition).List"* null, %"tango.text.Regex.List!(TNFATransition).List"* null, %"tango.text.Regex.List!(TNFATransition).List"* null, i1 false }, align 4 ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=2] + at _D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ = weak_odr constant %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment8setEntryMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZv, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7setExitMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZv } ; <%"tango.text.Regex! .TNFAFragment!(dchar).TNFAFragment.__vtbl"*> [#uses=13] + at _D63TypeInfo_C5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str48 = internal constant [51 x i8] c"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment\00" ; <[51 x i8]*> [#uses=1] + at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 20, i8* bitcast (%"tango.text.Regex.List!(TNFAFragment).List"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ to i8*) }, %"byte[]" { i32 41, i8* getelementptr ([42 x i8]* @.str50, i32 0, i32 0) }, %"void*[]" { i32 22, i8** bitcast (%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 36, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D98TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ to %! object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=3] + at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFAFragment).List" { %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ, i8* null, i32 0, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null }, align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ = weak_odr constant %"tango.text.Regex.List!(TNFAFragment).List.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11opCatAssignMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex! .List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11insertAfterMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11insertAfterMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListT! C5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, ! %"tango. text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11opCatAssignMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4ListZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List9pushFrontMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex! .TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List12insertBeforeMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List12insertBeforeMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).! List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5ta! ngo4text 5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List9pushFrontMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4ListZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6lengthMFZk, i1 (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List5emptyMFZb, void (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List5clearMFZv, void (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List3popMFZv, void (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).Lis! t.Element"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6removeMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementZv, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %1)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List8elementsMFDFKC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementZiZi, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %1)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List16elements_reverseMFDFKC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementZiZi, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7opApplyMFDFKC5tango4text5Regex20__T12TNFAFragmentTwZ12! TNFAFragmentZiZi, i32 (%"tango.text.Regex.List!(TNFAFragment).! List"*, %"int delegate(ref TNFAFragment)")* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List14opApplyReverseMFDFKC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZiZi } ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=3] + at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 24, i8* bitcast (%"tango.text.Regex.List!(TNFAFragment).List.Element"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__initZ to i8*) }, %"byte[]" { i32 49, i8* getelementptr ([50 x i8]* @.str49, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D106TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Elemen! t6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=8] + at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFAFragment).List.Element" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__vtblZ, i8* null, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* null, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null, %"tango.text.Regex.List!(TNFAFragment).List"* null }, align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List.Element"*> [#uses=2] + at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=8] + at _D106TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str49 = internal constant [50 x i8] c"tango.text.Regex.List!(TNFAFragment).List.Element\00" ; <[50 x i8]*> [#uses=1] + at _D98TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str50 = internal constant [42 x i8] c"tango.text.Regex.List!(TNFAFragment).List\00" ; <[42 x i8]*> [#uses=1] + at _D45TypeInfo_C5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex11__T4TNFATwZ4TNFA7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] + at .str51 = internal constant [35 x i8] c"tango.text.Regex.TNFA!(dchar).TNFA\00" ; <[35 x i8]*> [#uses=1] + at _D5tango4text7convert7Integer22__T14_FormatterInfoTaZ14_FormatterInfo6__initZ = weak_odr constant %nest.parseListLine zeroinitializer, align 4 ; <%nest.parseListLine*> [#uses=0] + at _D5tango4text4Util16__T9LineFructTaZ9LineFruct6__initZ = weak_odr constant %"tango.text.Util.LineFruct!(char).LineFruct" zeroinitializer, align 4 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=0] + at _D5tango4core5Array14__T7IsEqualTaZ7IsEqual6__initZ = weak_odr constant %"tango.core.Array.IsEqual!(char).IsEqual" zeroinitializer, align 1 ; <%"tango.core.Array.IsEqual!(char).IsEqual"*> [#uses=0] + at _D5tango4core6Traits63__T14isCallableTypeTS5tango4core5Array14__T7IsEqualTaZ7IsEqualZ14isCallableTypeb = weak_odr constant i1 true, align 1 ; [#uses=0] + at _D12TypeInfo_G4a6__initZ = linkonce_odr constant %object.TypeInfo_StaticArray { %object.TypeInfo.__vtbl* @_D20TypeInfo_StaticArray6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_a6__initZ, i32 4 } ; <%object.TypeInfo_StaticArray*> [#uses=1] + at _D20TypeInfo_StaticArray6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=1] + at _D10TypeInfo_a6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=1] + at _D5tango4text4Util18__T10DelimFructTaZ10DelimFruct6__initZ = weak_odr constant %tango.net.ftp.FtpClient.FtpFeature zeroinitializer, align 4 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=0] + at _D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(Operator).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(Operator).Stack"*> [#uses=0] + at _D55TypeInfo_AE5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Enum* @_D54TypeInfo_E5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at _D14TypeInfo_Array6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=8] + at _D54TypeInfo_E5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ = linkonce_odr constant %object.TypeInfo_Enum { %object.TypeInfo.__vtbl* @_D13TypeInfo_Enum6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_i6__initZ, %"byte[]" { i32 43, i8* getelementptr ([44 x i8]* @.str57, i32 0, i32 0) }, %"byte[]" zeroinitializer } ; <%object.TypeInfo_Enum*> [#uses=1] + at _D13TypeInfo_Enum6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=1] + at _D10TypeInfo_i6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=1] + at .str57 = internal constant [44 x i8] c"tango.text.Regex.TNFA!(dchar).TNFA.Operator\00" ; <[44 x i8]*> [#uses=1] + at _D5tango4text5Regex12__T5StackTkZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(Operator).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(Operator).Stack"*> [#uses=0] + at _D5tango4text5Regex11__T4PairTkZ4Pair6__initZ = weak_odr constant %tango.net.Socket.timeval zeroinitializer, align 4 ; <%tango.net.Socket.timeval*> [#uses=1] + at _D45TypeInfo_S5tango4text5Regex11__T4PairTkZ4Pair6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str59, i32 0, i32 0) }, %"byte[]" { i32 8, i8* bitcast (%tango.net.Socket.timeval* @_D5tango4text5Regex11__T4PairTkZ4Pair6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 0 } ; <%20*> [#uses=1] + at .str59 = internal constant [34 x i8] c"tango.text.Regex.Pair!(uint).Pair\00" ; <[34 x i8]*> [#uses=1] + at _D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(Pair!(uint)).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(Pair!(uint)).Stack"*> [#uses=0] + at _D46TypeInfo_AS5tango4text5Regex11__T4PairTkZ4Pair6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%20* @_D45TypeInfo_S5tango4text5Regex11__T4PairTkZ4Pair6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at _D5tango4text5Regex69__T5StackTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(TNFATransition).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(TNFATransition).Stack"*> [#uses=0] + at _D68TypeInfo_AC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at _D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%21* @_D55TypeInfo_S5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at .str65 = internal constant [7 x i8] c"ftp://\00" ; <[7 x i8]*> [#uses=1] + at _D11TypeInfo_Aa6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=67] + at .str66 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] + at .str67 = internal constant [4 x i8] c"220\00" ; <[4 x i8]*> [#uses=1] + at .str68 = internal constant [5 x i8] c"USER\00" ; <[5 x i8]*> [#uses=1] + at .str69 = internal constant [4 x i8] c"331\00" ; <[4 x i8]*> [#uses=1] + at .str70 = internal constant [5 x i8] c"PASS\00" ; <[5 x i8]*> [#uses=1] + at .str71 = internal constant [4 x i8] c"230\00" ; <[4 x i8]*> [#uses=1] + at .str72 = internal constant [4 x i8] c"202\00" ; <[4 x i8]*> [#uses=1] + at .str73 = internal constant [5 x i8] c"QUIT\00" ; <[5 x i8]*> [#uses=1] + at .str74 = internal constant [4 x i8] c"221\00" ; <[4 x i8]*> [#uses=1] + at _D5tango3net6Socket11IPv4Address7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=8] + at _D5tango3net6Socket11IPv4Address6__initZ = external constant %22, align 4 ; <%22*> [#uses=1] + at _D5tango3net6Socket11IPv4Address6__vtblZ = external constant %tango.net.Socket.IPv4Address.__vtbl ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=5] + at .str75 = internal constant [4 x i8] c"CWD\00" ; <[4 x i8]*> [#uses=1] + at .str76 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] + at .str77 = internal constant [5 x i8] c"CDUP\00" ; <[5 x i8]*> [#uses=1] + at .str78 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str79 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] + at .str80 = internal constant [4 x i8] c"PWD\00" ; <[4 x i8]*> [#uses=1] + at .str81 = internal constant [4 x i8] c"257\00" ; <[4 x i8]*> [#uses=1] + at .str82 = internal constant [4 x i8] c"000\00" ; <[4 x i8]*> [#uses=3] + at .str84 = internal constant [11 x i8] c"SITE CHMOD\00" ; <[11 x i8]*> [#uses=1] + at .str85 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str86 = internal constant [5 x i8] c"DELE\00" ; <[5 x i8]*> [#uses=1] + at .str87 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] + at .str88 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] + at .str89 = internal constant [4 x i8] c"RMD\00" ; <[4 x i8]*> [#uses=1] + at .str90 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] + at .str91 = internal constant [5 x i8] c"RNFR\00" ; <[5 x i8]*> [#uses=1] + at .str92 = internal constant [4 x i8] c"350\00" ; <[4 x i8]*> [#uses=1] + at .str93 = internal constant [5 x i8] c"RNTO\00" ; <[5 x i8]*> [#uses=1] + at .str94 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] + at .str95 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at .str96 = internal constant [5 x i8] c"SIZE\00" ; <[5 x i8]*> [#uses=1] + at .str97 = internal constant [4 x i8] c"213\00" ; <[4 x i8]*> [#uses=1] + at .str98 = internal constant [5 x i8] c"TYPE\00" ; <[5 x i8]*> [#uses=1] + at .str99 = internal constant [2 x i8] c"A\00" ; <[2 x i8]*> [#uses=1] + at .str100 = internal constant [5 x i8] c"TYPE\00" ; <[5 x i8]*> [#uses=1] + at .str101 = internal constant [2 x i8] c"I\00" ; <[2 x i8]*> [#uses=1] + at .str102 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str103 = internal constant [5 x i8] c"MDTM\00" ; <[5 x i8]*> [#uses=1] + at .str104 = internal constant [4 x i8] c"213\00" ; <[4 x i8]*> [#uses=1] + at .str105 = internal constant [32 x i8] c"CLIENT: Unable to parse timeval\00" ; <[32 x i8]*> [#uses=1] + at .str106 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at _D5tango4time6chrono9Gregorian9Gregorian7genericC5tango4time6chrono9Gregorian9Gregorian = external global %tango.time.chrono.Gregorian.Gregorian*, align 4 ; <%tango.time.chrono.Gregorian.Gregorian**> [#uses=2] + at .str109 = internal constant [5 x i8] c"NOOP\00" ; <[5 x i8]*> [#uses=1] + at .str110 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str111 = internal constant [4 x i8] c"MKD\00" ; <[4 x i8]*> [#uses=1] + at .str112 = internal constant [4 x i8] c"257\00" ; <[4 x i8]*> [#uses=1] + at .str113 = internal constant [5 x i8] c"FEAT\00" ; <[5 x i8]*> [#uses=1] + at .str114 = internal constant [4 x i8] c"211\00" ; <[4 x i8]*> [#uses=1] + at _D47TypeInfo_AS5tango3net3ftp9FtpClient10FtpFeature6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%20* @_D46TypeInfo_S5tango3net3ftp9FtpClient10FtpFeature6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at .str115 = internal constant [5 x i8] c"FEAT\00" ; <[5 x i8]*> [#uses=1] + at .str117 = internal constant [3 x i8] c"\0D\0A\00", align 2 ; <[3 x i8]*> [#uses=1] + at .str118 = internal constant [4 x i8] c"500\00" ; <[4 x i8]*> [#uses=1] + at .str120 = internal constant [24 x i8] c"unknown connection type\00" ; <[24 x i8]*> [#uses=1] + at _D5tango3net13SocketConduit13SocketConduit7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] + at _D5tango3net13SocketConduit13SocketConduit6__initZ = external constant %23, align 4 ; <%23*> [#uses=1] + at _D5tango3net13SocketConduit13SocketConduit6__vtblZ = external constant %tango.net.SocketConduit.SocketConduit.__vtbl ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=2] + at .str122 = internal constant [5 x i8] c"EPRT\00" ; <[5 x i8]*> [#uses=1] + at .str123 = internal constant [5 x i8] c"EPRT\00" ; <[5 x i8]*> [#uses=1] + at .str124 = internal constant [10 x i8] c"|1|%0|%1|\00" ; <[10 x i8]*> [#uses=1] + at .str125 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str126 = internal constant [18 x i8] c"%0,%1,%2,%3,%4,%5\00" ; <[18 x i8]*> [#uses=1] + at .str127 = internal constant [5 x i8] c"PORT\00" ; <[5 x i8]*> [#uses=1] + at .str128 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str129 = internal constant [5 x i8] c"SPSV\00" ; <[5 x i8]*> [#uses=1] + at .str130 = internal constant [5 x i8] c"SPSV\00" ; <[5 x i8]*> [#uses=1] + at .str131 = internal constant [4 x i8] c"227\00" ; <[4 x i8]*> [#uses=1] + at .str132 = internal constant [5 x i8] c"EPSV\00" ; <[5 x i8]*> [#uses=1] + at .str133 = internal constant [5 x i8] c"EPSV\00" ; <[5 x i8]*> [#uses=1] + at .str134 = internal constant [4 x i8] c"229\00" ; <[4 x i8]*> [#uses=1] + at .str135 = internal constant [34 x i8] c"\5C([^0-9][^0-9][^0-9](\5Cd+)[^0-9]\5C)\00" ; <[34 x i8]*> [#uses=1] + at .str136 = internal constant [32 x i8] c"CLIENT: Unable to parse address\00" ; <[32 x i8]*> [#uses=1] + at .str137 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at .str138 = internal constant [5 x i8] c"PASV\00" ; <[5 x i8]*> [#uses=1] + at .str139 = internal constant [4 x i8] c"227\00" ; <[4 x i8]*> [#uses=1] + at .str140 = internal constant [54 x i8] c"(\5Cd+),\5Cs*(\5Cd+),\5Cs*(\5Cd+),\5Cs*(\5Cd+),\5Cs*(\5Cd+)(,\5Cs*(\5Cd+))?\00" ; <[54 x i8]*> [#uses=1] + at .str141 = internal constant [32 x i8] c"CLIENT: Unable to parse address\00" ; <[32 x i8]*> [#uses=1] + at .str142 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at .str146 = internal constant [24 x i8] c"unknown connection type\00" ; <[24 x i8]*> [#uses=1] + at _D5tango3net6Socket9SocketSet7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=3] + at _D5tango3net6Socket9SocketSet6__initZ = external constant %24, align 4 ; <%24*> [#uses=1] + at _D5tango3net6Socket9SocketSet6__vtblZ = external constant %tango.net.Socket.SocketSet.__vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=3] + at .str147 = internal constant [34 x i8] c"CLIENT: No connection from server\00" ; <[34 x i8]*> [#uses=1] + at .str148 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] + at _D5tango3net6Socket6Socket7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] + at _D5tango3net6Socket6Socket6__initZ = external constant %25, align 4 ; <%25*> [#uses=1] + at _D5tango3net6Socket6Socket6__vtblZ = external constant %tango.net.Socket.Socket.__vtbl ; <%tango.net.Socket.Socket.__vtbl*> [#uses=2] + at .str149 = internal constant [4 x i8] c"226\00" ; <[4 x i8]*> [#uses=1] + at .str150 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] + at .str151 = internal constant [11 x i8] c"Bad finish\00" ; <[11 x i8]*> [#uses=1] + at .str152 = internal constant [4 x i8] c"150\00" ; <[4 x i8]*> [#uses=1] + at .str153 = internal constant [4 x i8] c"125\00" ; <[4 x i8]*> [#uses=1] + at .str154 = internal constant [5 x i8] c"MLST\00" ; <[5 x i8]*> [#uses=1] + at .str155 = internal constant [5 x i8] c"MLSD\00" ; <[5 x i8]*> [#uses=1] + at .str156 = internal constant [5 x i8] c"MLSD\00" ; <[5 x i8]*> [#uses=1] + at _D5tango2io6device5Array5Array7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] + at _D5tango2io6device5Array5Array6__initZ = external constant %26, align 4 ; <%26*> [#uses=1] + at _D5tango2io6device5Array5Array6__vtblZ = external constant %tango.io.device.Array.Array.__vtbl ; <%tango.io.device.Array.Array.__vtbl*> [#uses=2] + at _D48TypeInfo_AS5tango3net3ftp9FtpClient11FtpFileInfo6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%20* @_D47TypeInfo_S5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at .str161 = internal constant [34 x i8] c"CLIENT: Timeout when reading data\00" ; <[34 x i8]*> [#uses=1] + at .str162 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] + at .str163 = internal constant [34 x i8] c"CLIENT: Timeout when sending data\00" ; <[34 x i8]*> [#uses=1] + at .str164 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] + at .str165 = internal constant [5 x i8] c"LIST\00" ; <[5 x i8]*> [#uses=1] + at .str166 = internal constant [5 x i8] c"LIST\00" ; <[5 x i8]*> [#uses=1] + at .str167 = internal constant [11 x i8] c"0123456789\00" ; <[11 x i8]*> [#uses=2] + at .str168 = internal constant [5 x i8] c"0000\00" ; <[5 x i8]*> [#uses=1] + at .str169 = internal constant [10 x i8] c"UNIX.mode\00" ; <[10 x i8]*> [#uses=1] + at .str170 = internal constant [11 x i8] c"0123456789\00" ; <[11 x i8]*> [#uses=2] + at .str171 = internal constant [5 x i8] c" -> \00" ; <[5 x i8]*> [#uses=1] + at .str172 = internal constant [7 x i8] c"target\00" ; <[7 x i8]*> [#uses=1] + at .str173 = internal constant [5 x i8] c"type\00" ; <[5 x i8]*> [#uses=1] + at .str174 = internal constant [5 x i8] c"link\00" ; <[5 x i8]*> [#uses=1] + at .str175 = internal constant [43 x i8] c"(\5Cd\5Cd)-(\5Cd\5Cd)-(\5Cd\5Cd)\5Cs+(\5Cd\5Cd):(\5Cd\5Cd)(A|P)M\00" ; <[43 x i8]*> [#uses=1] + at .str176 = internal constant [32 x i8] c"CLIENT: Unsupported LIST format\00" ; <[32 x i8]*> [#uses=1] + at .str177 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at .str178 = internal constant [2 x i8] c".\00" ; <[2 x i8]*> [#uses=1] + at .str179 = internal constant [3 x i8] c"..\00" ; <[3 x i8]*> [#uses=1] + at .str180 = internal constant [36 x i8] c"CLIENT: Bad syntax in MLSx response\00" ; <[36 x i8]*> [#uses=1] + at .str181 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at .str182 = internal constant [2 x i8] c";\00" ; <[2 x i8]*> [#uses=1] + at .str183 = internal constant [5 x i8] c"type\00" ; <[5 x i8]*> [#uses=1] + at .str184 = internal constant [4 x i8] c"dir\00" ; <[4 x i8]*> [#uses=1] + at .str185 = internal constant [5 x i8] c"cdir\00" ; <[5 x i8]*> [#uses=1] + at .str186 = internal constant [5 x i8] c"file\00" ; <[5 x i8]*> [#uses=1] + at .str187 = internal constant [5 x i8] c"pdir\00" ; <[5 x i8]*> [#uses=1] + at .string_switch_table_data = internal constant [4 x %"byte[]"] [%"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str184, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str185, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str186, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str187, i32 0, i32 0) }] ; <[4 x %"byte[]"]*> [#uses=1] + at .str188 = internal constant [5 x i8] c"type\00" ; <[5 x i8]*> [#uses=1] + at .str189 = internal constant [5 x i8] c"size\00" ; <[5 x i8]*> [#uses=1] + at .str190 = internal constant [5 x i8] c"size\00" ; <[5 x i8]*> [#uses=1] + at .str191 = internal constant [11 x i8] c"media-type\00" ; <[11 x i8]*> [#uses=1] + at .str192 = internal constant [11 x i8] c"media-type\00" ; <[11 x i8]*> [#uses=1] + at .str193 = internal constant [7 x i8] c"modify\00" ; <[7 x i8]*> [#uses=1] + at .str194 = internal constant [7 x i8] c"modify\00" ; <[7 x i8]*> [#uses=1] + at .str195 = internal constant [7 x i8] c"create\00" ; <[7 x i8]*> [#uses=1] + at .str196 = internal constant [7 x i8] c"create\00" ; <[7 x i8]*> [#uses=1] + at .str197 = internal constant [38 x i8] c"CLIENT: Bad LIST response from server\00" ; <[38 x i8]*> [#uses=1] + at .str198 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] + at _D5tango2io6device4File4File7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] + at _D5tango2io6device4File4File6__initZ = external constant %27, align 4 ; <%27*> [#uses=1] + at _D5tango2io6device4File4File6__vtblZ = external constant %tango.io.device.File.File.__vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=2] + at _D5tango2io6device4File4File12ReadExistingS5tango2io6device4File4File5Style = external constant %tango.io.device.File.File.Style, align 1 ; <%tango.io.device.File.File.Style*> [#uses=1] + at _D5tango2io6device4File4File17ReadWriteExistingS5tango2io6device4File4File5Style = external constant %tango.io.device.File.File.Style, align 1 ; <%tango.io.device.File.File.Style*> [#uses=1] + at _D5tango2io6device4File4File15ReadWriteCreateS5tango2io6device4File4File5Style = external constant %tango.io.device.File.File.Style, align 1 ; <%tango.io.device.File.File.Style*> [#uses=1] + at .str199 = internal constant [5 x i8] c"STOR\00" ; <[5 x i8]*> [#uses=1] + at .str200 = internal constant [5 x i8] c"APPE\00" ; <[5 x i8]*> [#uses=1] + at .str201 = internal constant [5 x i8] c"REST\00" ; <[5 x i8]*> [#uses=1] + at .str202 = internal constant [4 x i8] c"350\00" ; <[4 x i8]*> [#uses=1] + at .str203 = internal constant [5 x i8] c"ALLO\00" ; <[5 x i8]*> [#uses=1] + at .str204 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str205 = internal constant [4 x i8] c"202\00" ; <[4 x i8]*> [#uses=1] + at .str206 = internal constant [13 x i8] c"OPTS UTF8 ON\00" ; <[13 x i8]*> [#uses=1] + at .str207 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] + at .str208 = internal constant [5 x i8] c"RETR\00" ; <[5 x i8]*> [#uses=1] + at .str209 = internal constant [5 x i8] c"RETR\00" ; <[5 x i8]*> [#uses=1] + at .str210 = internal constant [5 x i8] c"STOR\00" ; <[5 x i8]*> [#uses=1] + at _D5tango4text5Regex15RegExpException7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=17] + at _D5tango4text5Regex15RegExpException6__initZ = external constant %28, align 4 ; <%28*> [#uses=1] + at _D5tango4text5Regex15RegExpException6__vtblZ = external constant %object.Exception.__vtbl ; <%object.Exception.__vtbl*> [#uses=17] + at .str211 = internal constant [28 x i8] c"cannot process operand at \22\00" ; <[28 x i8]*> [#uses=1] + at ._arguments.storage = internal constant [2 x %object.TypeInfo*] [%object.TypeInfo* @_D10TypeInfo_k6__initZ, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ] ; <[2 x %object.TypeInfo*]*> [#uses=1] + at _D10TypeInfo_k6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=2] + at .str213 = internal constant [68 x i8] c"Missing opening parentheses for closing parentheses at char {} \22{}\22\00" ; <[68 x i8]*> [#uses=1] + at ._arguments.storage214 = internal constant [3 x %object.TypeInfo*] [%object.TypeInfo* @_D10TypeInfo_k6__initZ, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ] ; <[3 x %object.TypeInfo*]*> [#uses=1] + at .str216 = internal constant [43 x i8] c"Unexpected operand at char {} \22{}\22 in \22{}\22\00" ; <[43 x i8]*> [#uses=1] + at .str217 = internal constant [56 x i8] c"Escape sequence \5Cb not allowed in look-ahead or -behind\00" ; <[56 x i8]*> [#uses=1] + at .str218 = internal constant [56 x i8] c"Escape sequence \5CB not allowed in look-ahead or -behind\00" ; <[56 x i8]*> [#uses=1] + at _D56TypeInfo_AC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] + at .str219 = internal constant [29 x i8] c"Invalid occurence range at \22\00" ; <[29 x i8]*> [#uses=1] + at .str221 = internal constant [29 x i8] c"Invalid occurence range at \22\00" ; <[29 x i8]*> [#uses=1] + at .str223 = internal constant [41 x i8] c"Invalid occurence range (max < min) at \22\00" ; <[41 x i8]*> [#uses=1] + at .str225 = internal constant [45 x i8] c"Missing range start for '-' operator after \22\00" ; <[45 x i8]*> [#uses=1] + at .str227 = internal constant [43 x i8] c"Missing range end for '-' operator after \22\00" ; <[43 x i8]*> [#uses=1] + at .str229 = internal constant [33 x i8] c"unexpected end of string after \22\00" ; <[33 x i8]*> [#uses=1] + at .str231 = internal constant [29 x i8] c"too few arguments for + at \22\00" ; <[29 x i8]*> [#uses=1] + at .str233 = internal constant [29 x i8] c"too few arguments for * at \22\00" ; <[29 x i8]*> [#uses=1] + at .str235 = internal constant [29 x i8] c"too few arguments for ? at \22\00" ; <[29 x i8]*> [#uses=1] + at .str237 = internal constant [33 x i8] c"too few arguments for {x,y} at \22\00" ; <[33 x i8]*> [#uses=1] + at .str239 = internal constant [29 x i8] c"too few arguments for | at \22\00" ; <[29 x i8]*> [#uses=1] + at .str241 = internal constant [40 x i8] c"too few operands for concatenation at \22\00" ; <[40 x i8]*> [#uses=1] + at _D5tango4core9Exception24IllegalArgumentException7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] + at _D5tango4core9Exception24IllegalArgumentException6__initZ = external constant %29, align 4 ; <%29*> [#uses=1] + at _D5tango4core9Exception24IllegalArgumentException6__vtblZ = external constant %object.Exception.__vtbl ; <%object.Exception.__vtbl*> [#uses=2] + at .str244 = internal constant [34 x i8] c"Integer.toLong :: invalid literal\00" ; <[34 x i8]*> [#uses=1] + at _D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa5lowerAa = weak_odr constant %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str245, i32 0, i32 0) }, align 4 ; <%"byte[]"*> [#uses=0] + at .str245 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at _D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa5upperAa = weak_odr constant %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str246, i32 0, i32 0) }, align 4 ; <%"byte[]"*> [#uses=0] + at .str246 = internal constant [17 x i8] c"0123456789ABCDEF\00" ; <[17 x i8]*> [#uses=1] + at _D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa7formatsAS5tango4text7convert7Integer22__T14_FormatterInfoTaZ14_FormatterInfo = weak_odr constant %"_FormatterInfo!(char)[]" { i32 8, %nest.parseListLine* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0) }, align 4 ; <%"_FormatterInfo!(char)[]"*> [#uses=0] + at .str247 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str248 = internal constant [2 x i8] c"-\00" ; <[2 x i8]*> [#uses=1] + at .str249 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str250 = internal constant [2 x i8] c" \00" ; <[2 x i8]*> [#uses=1] + at .str251 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str252 = internal constant [2 x i8] c"+\00" ; <[2 x i8]*> [#uses=1] + at .str253 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str254 = internal constant [3 x i8] c"0b\00" ; <[3 x i8]*> [#uses=1] + at .str255 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str256 = internal constant [3 x i8] c"0o\00" ; <[3 x i8]*> [#uses=1] + at .str257 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str258 = internal constant [3 x i8] c"0x\00" ; <[3 x i8]*> [#uses=1] + at .str259 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] + at .str260 = internal constant [3 x i8] c"0X\00" ; <[3 x i8]*> [#uses=1] + at .str261 = internal constant [17 x i8] c"0123456789ABCDEF\00" ; <[17 x i8]*> [#uses=1] + at .constarray262 = internal global [8 x %nest.parseListLine] [%nest.parseListLine { i32 10, %"byte[]" zeroinitializer, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str247, i32 0, i32 0) } }, %nest.parseListLine { i32 10, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str248, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str249, i32 0, i32 0) } }, %nest.parseListLine { i32 10, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str250, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str251, i32 0, i32 0) } }, %nest.parseListLine { i32 10, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str252, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str253, i32 0, i32 0) } }, %nest.parseListLine { i32 2, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str254, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str255, i32 0, i32 0) } }, %nest.parseListLine { i32 8, %"byte[]" { i32 2, i8* gete! lementptr ([3 x i8]* @.str256, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str257, i32 0, i32 0) } }, %nest.parseListLine { i32 16, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str258, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str259, i32 0, i32 0) } }, %nest.parseListLine { i32 16, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str260, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str261, i32 0, i32 0) } }] ; <[8 x %nest.parseListLine]*> [#uses=13] + at .str263 = internal constant [18 x i8] c"{unknown format '\00" ; <[18 x i8]*> [#uses=1] + at .str264 = internal constant [3 x i8] c"'}\00", align 2 ; <[3 x i8]*> [#uses=1] + at .str265 = internal constant [25 x i8] c"{output width too small}\00" ; <[25 x i8]*> [#uses=1] + at _D12TypeInfo_AAa6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ } ; <%object.TypeInfo_Array*> [#uses=1] + at _D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi2nla = weak_odr constant i8 10, align 1 ; [#uses=0] + at _D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi2cra = weak_odr constant i8 13, align 1 ; [#uses=0] + at _D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa6badargAa = weak_odr global %"byte[]" { i32 20, i8* getelementptr ([21 x i8]* @.str266, i32 0, i32 0) }, align 8 ; <%"byte[]"*> [#uses=1] + at .str266 = internal constant [21 x i8] c"{index out of range}\00" ; <[21 x i8]*> [#uses=1] + at _D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa8toosmallAa = weak_odr global %"byte[]" { i32 25, i8* getelementptr ([26 x i8]* @.str267, i32 0, i32 0) }, align 8 ; <%"byte[]"*> [#uses=2] + at .str267 = internal constant [26 x i8] c"{output buffer too small}\00" ; <[26 x i8]*> [#uses=1] + at _D11TypeInfo_Ak6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=4] + at _D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=3] + at _D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ = external constant %30, align 4 ; <%30*> [#uses=1] + at _D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ = external constant %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl" ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=3] + at _D11TypeInfo_Ag6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=3] + at _D11TypeInfo_Ah6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=2] + at .str280 = internal constant [9 x i8] c"RegExp: \00", align 8 ; <[9 x i8]*> [#uses=1] + at _D10ModuleInfo6__vtblZ = external constant %object.ModuleInfo.__vtbl ; <%object.ModuleInfo.__vtbl*> [#uses=1] + at .str289 = internal constant [24 x i8] c"tango.net.ftp.FtpClient\00" ; <[24 x i8]*> [#uses=1] + at _D5tango4text5Regex8__ModuleZ = external global %object.ModuleInfo ; <%object.ModuleInfo*> [#uses=1] + at _D5tango4time6chrono9Gregorian8__ModuleZ = external global %object.ModuleInfo ; <%object.ModuleInfo*> [#uses=1] + at _D5tango4text7convert9TimeStamp8__ModuleZ = external global %object.ModuleInfo ; <%object.ModuleInfo*> [#uses=1] + at _D5tango3net3ftp9FtpClient9__importsZ = internal constant [3 x %object.ModuleInfo*] [%object.ModuleInfo* @_D5tango4text5Regex8__ModuleZ, %object.ModuleInfo* @_D5tango4time6chrono9Gregorian8__ModuleZ, %object.ModuleInfo* @_D5tango4text7convert9TimeStamp8__ModuleZ] ; <[3 x %object.ModuleInfo*]*> [#uses=1] + at _D5tango3net3ftp9FtpClient9__classesZ = internal constant [2 x %object.ClassInfo*] [%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ, %object.ClassInfo* @_D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ] ; <[2 x %object.ClassInfo*]*> [#uses=1] + at _D5tango3net3ftp9FtpClient8__ModuleZ = global %object.ModuleInfo { %object.ModuleInfo.__vtbl* @_D10ModuleInfo6__vtblZ, i8* null, %"byte[]" { i32 23, i8* getelementptr ([24 x i8]* @.str289, i32 0, i32 0) }, %"ModuleInfo[]" { i32 3, %object.ModuleInfo** getelementptr ([3 x %object.ModuleInfo*]* @_D5tango3net3ftp9FtpClient9__importsZ, i32 0, i32 0) }, %"ClassInfo[]" { i32 2, %object.ClassInfo** getelementptr ([2 x %object.ClassInfo*]* @_D5tango3net3ftp9FtpClient9__classesZ, i32 0, i32 0) }, i32 0, void ()* null, void ()* null, void ()* null, i8* null, void ()* null } ; <%object.ModuleInfo*> [#uses=1] + at _D5tango3net3ftp9FtpClient11__moduleRefZ = internal global %ModuleReference { %ModuleReference* null, %object.ModuleInfo* @_D5tango3net3ftp9FtpClient8__ModuleZ } ; <%ModuleReference*> [#uses=2] + at _Dmodule_ref = external global %ModuleReference* ; <%ModuleReference**> [#uses=2] + at llvm.global_ctors = appending constant [1 x %31] [%31 { i32 65535, void ()* @_D5tango3net3ftp9FtpClient16__moduleinfoCtorZ }] ; <[1 x %31]*> [#uses=0] + +define fastcc noalias %tango.net.ftp.FtpClient.FtpAddress* @_D5tango3net3ftp9FtpClient10FtpAddress6opCallFAaZPS5tango3net3ftp9FtpClient10FtpAddress(%"byte[]" %str_arg) { +entry: + %len.i = alloca i32, align 4 ; [#uses=3] + %str_arg171 = extractvalue %"byte[]" %str_arg, 0 ; [#uses=8] + %str_arg172 = extractvalue %"byte[]" %str_arg, 1 ; [#uses=4] + %tmp1 = icmp eq i32 %str_arg171, 0 ; [#uses=1] + br i1 %tmp1, label %if, label %try + +if: ; preds = %entry + ret %tango.net.ftp.FtpClient.FtpAddress* null + +try: ; preds = %entry + %.gc_mem = invoke noalias i8* @_d_allocmemoryT(%object.TypeInfo* bitcast (%20* @_D46TypeInfo_S5tango3net3ftp9FtpClient10FtpAddress6__initZ to %object.TypeInfo*)) + to label %postinvoke unwind label %landingpad ; [#uses=11] + +postinvoke: ; preds = %try + %.gc_mem3 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpAddress* ; <%tango.net.ftp.FtpClient.FtpAddress*> [#uses=1] + tail call void @llvm.memcpy.i32(i8* %.gc_mem, i8* bitcast (%tango.net.ftp.FtpClient.FtpAddress* @_D5tango3net3ftp9FtpClient10FtpAddress6__initZ to i8*), i32 36, i32 1) + %tmp9.i = add i32 %str_arg171, -5 ; [#uses=2] + %tmp16.i = icmp ugt i32 %tmp9.i, %str_arg171 ; [#uses=1] + br i1 %tmp16.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %whilecond.i + +whilecond.i: ; preds = %else40.i, %postinvoke + %source_arg60.pn.i = phi i8* [ %p.0.i, %else40.i ], [ %str_arg172, %postinvoke ] ; [#uses=4] + %start_arg.pn.i = phi i32 [ %tmp49.i, %else40.i ], [ 0, %postinvoke ] ; [#uses=3] + %extent.0.i = phi i32 [ %tmp51.i, %else40.i ], [ %tmp9.i, %postinvoke ] ; [#uses=5] + %p.0.i = getelementptr i8* %source_arg60.pn.i, i32 %start_arg.pn.i ; [#uses=2] + %tmp18.i = icmp eq i32 %extent.0.i, 0 ; [#uses=1] + br i1 %tmp18.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %whilebody.i + +whilebody.i: ; preds = %whilecond.i + %p.0.sum63.i = add i32 %start_arg.pn.i, -1 ; [#uses=1] + %tmp2.i.i = getelementptr i8* %source_arg60.pn.i, i32 %p.0.sum63.i ; [#uses=1] + br label %forcond.i.i + +forcond.i.i: ; preds = %forbody.i.i, %whilebody.i + %len.0.i.i = phi i32 [ %extent.0.i, %whilebody.i ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] + %p.0.i.i = phi i8* [ %tmp2.i.i, %whilebody.i ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] + %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i, label %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] + %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] + %tmp12.i.i = icmp eq i8 %tmp8.i.i, 102 ; [#uses=1] + br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i + +if.i.i: ; preds = %forbody.i.i + %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] + %tmp16.i.i = ptrtoint i8* %p.0.i to i32 ; [#uses=1] + %tmp17.i.i = sub i32 %tmp15.i.i, %tmp16.i.i ; [#uses=1] + br label %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i + +_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i: ; preds = %if.i.i, %forcond.i.i + %tmp2561.i = phi i32 [ %tmp17.i.i, %if.i.i ], [ %extent.0.i, %forcond.i.i ] ; [#uses=3] + %tmp27.i = icmp eq i32 %tmp2561.i, %extent.0.i ; [#uses=1] + br i1 %tmp27.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %else.i + +else.i: ; preds = %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i + %p.0.sum.i = add i32 %start_arg.pn.i, %tmp2561.i ; [#uses=2] + %tmp32.i = getelementptr i8* %source_arg60.pn.i, i32 %p.0.sum.i ; [#uses=2] + %tmp32.sum.i = add i32 %p.0.sum.i, -1 ; [#uses=1] + %tmp2.i.i.i = getelementptr i8* %source_arg60.pn.i, i32 %tmp32.sum.i ; [#uses=1] + br label %forcond.i.i.i + +forcond.i.i.i: ; preds = %forbody.i.i.i, %else.i + %len.0.i.i.i = phi i32 [ 6, %else.i ], [ %tmp4.i.i.i, %forbody.i.i.i ] ; [#uses=2] + %s2.0.i.i.i = phi i8* [ getelementptr ([7 x i8]* @.str65, i32 0, i32 0), %else.i ], [ %tmp11.i.i.i, %forbody.i.i.i ] ; [#uses=2] + %p.0.i.i.i = phi i8* [ %tmp2.i.i.i, %else.i ], [ %tmp7.i.i.i, %forbody.i.i.i ] ; [#uses=1] + %tmp4.i.i.i = add i32 %len.0.i.i.i, -1 ; [#uses=1] + %tmp5.i.i.i = icmp eq i32 %len.0.i.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i.i, label %if38.i, label %forbody.i.i.i + +forbody.i.i.i: ; preds = %forcond.i.i.i + %tmp7.i.i.i = getelementptr i8* %p.0.i.i.i, i32 1 ; [#uses=3] + %tmp8.i.i.i = load i8* %tmp7.i.i.i ; [#uses=1] + %tmp11.i.i.i = getelementptr i8* %s2.0.i.i.i, i32 1 ; [#uses=1] + %tmp12.i.i.i = load i8* %s2.0.i.i.i ; [#uses=1] + %tmp14.i.i.i = icmp eq i8 %tmp8.i.i.i, %tmp12.i.i.i ; [#uses=1] + br i1 %tmp14.i.i.i, label %forcond.i.i.i, label %if.i.i.i + +if.i.i.i: ; preds = %forbody.i.i.i + %tmp17.i.i.i = ptrtoint i8* %tmp7.i.i.i to i32 ; [#uses=1] + %tmp18.i.i.i = ptrtoint i8* %tmp32.i to i32 ; [#uses=1] + %tmp19.i.i.i = sub i32 %tmp17.i.i.i, %tmp18.i.i.i ; [#uses=1] + %phitmp = icmp eq i32 %tmp19.i.i.i, 6 ; [#uses=1] + br i1 %phitmp, label %if38.i, label %else40.i + +if38.i: ; preds = %if.i.i.i, %forcond.i.i.i + %tmp44.i = ptrtoint i8* %tmp32.i to i32 ; [#uses=1] + %tmp45.i = ptrtoint i8* %str_arg172 to i32 ; [#uses=1] + %tmp46.i = sub i32 %tmp44.i, %tmp45.i ; [#uses=1] + br label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit + +else40.i: ; preds = %if.i.i.i + %tmp49.i = add i32 %tmp2561.i, 1 ; [#uses=2] + %tmp51.i = sub i32 %extent.0.i, %tmp49.i ; [#uses=1] + br label %whilecond.i + +_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit: ; preds = %if38.i, %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i, %whilecond.i, %postinvoke + %tmp7173 = phi i32 [ %tmp46.i, %if38.i ], [ %str_arg171, %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i ], [ %str_arg171, %whilecond.i ], [ %str_arg171, %postinvoke ] ; [#uses=1] + %tmp9 = icmp eq i32 %tmp7173, 0 ; [#uses=1] + br i1 %tmp9, label %if10, label %endif11 + +if10: ; preds = %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit + %tmp15 = getelementptr i8* %str_arg172, i32 6 ; [#uses=1] + %tmp16 = add i32 %str_arg171, -6 ; [#uses=1] + br label %endif11 + +endif11: ; preds = %if10, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit + %str.1.2 = phi i8* [ %tmp15, %if10 ], [ %str_arg172, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit ] ; [#uses=8] + %str.0.2 = phi i32 [ %tmp16, %if10 ], [ %str_arg171, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit ] ; [#uses=6] + %tmp2.i235 = icmp eq i32 %str.0.2, -1 ; [#uses=1] + br i1 %tmp2.i235, label %whilecond.i239, label %if.i236 + +if.i236: ; preds = %endif11 + br label %whilecond.i239 + +whilecond.i239: ; preds = %whilebody.i244, %if.i236, %endif11 + %start.0.i237 = phi i32 [ %str.0.2, %if.i236 ], [ %tmp8.i240, %whilebody.i244 ], [ -1, %endif11 ] ; [#uses=2] + %tmp6.i238 = icmp eq i32 %start.0.i237, 0 ; [#uses=1] + br i1 %tmp6.i238, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247, label %whilebody.i244 + +whilebody.i244: ; preds = %whilecond.i239 + %tmp8.i240 = add i32 %start.0.i237, -1 ; [#uses=3] + %tmp10.i241 = getelementptr i8* %str.1.2, i32 %tmp8.i240 ; [#uses=1] + %tmp11.i242 = load i8* %tmp10.i241 ; [#uses=1] + %tmp15.i243 = icmp eq i8 %tmp11.i242, 64 ; [#uses=1] + br i1 %tmp15.i243, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247, label %whilecond.i239 + +_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247: ; preds = %whilebody.i244, %whilecond.i239 + %tmp21248 = phi i32 [ %tmp8.i240, %whilebody.i244 ], [ %str.0.2, %whilecond.i239 ] ; [#uses=7] + %tmp25 = icmp eq i32 %tmp21248, %str.0.2 ; [#uses=1] + br i1 %tmp25, label %endif27, label %if26 + +if26: ; preds = %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 + %tmp38 = add i32 %tmp21248, 1 ; [#uses=2] + %tmp41 = getelementptr i8* %str.1.2, i32 %tmp38 ; [#uses=2] + %tmp42 = sub i32 %str.0.2, %tmp38 ; [#uses=2] + %tmp2.i.i214 = getelementptr i8* %str.1.2, i32 -1 ; [#uses=1] + br label %forcond.i.i219 + +forcond.i.i219: ; preds = %forbody.i.i223, %if26 + %len.0.i.i215 = phi i32 [ %tmp21248, %if26 ], [ %tmp4.i.i217, %forbody.i.i223 ] ; [#uses=2] + %p.0.i.i216 = phi i8* [ %tmp2.i.i214, %if26 ], [ %tmp7.i.i220, %forbody.i.i223 ] ; [#uses=1] + %tmp4.i.i217 = add i32 %len.0.i.i215, -1 ; [#uses=1] + %tmp5.i.i218 = icmp eq i32 %len.0.i.i215, 0 ; [#uses=1] + br i1 %tmp5.i.i218, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232, label %forbody.i.i223 + +forbody.i.i223: ; preds = %forcond.i.i219 + %tmp7.i.i220 = getelementptr i8* %p.0.i.i216, i32 1 ; [#uses=3] + %tmp8.i.i221 = load i8* %tmp7.i.i220 ; [#uses=1] + %tmp12.i.i222 = icmp eq i8 %tmp8.i.i221, 58 ; [#uses=1] + br i1 %tmp12.i.i222, label %if.i.i227, label %forcond.i.i219 + +if.i.i227: ; preds = %forbody.i.i223 + %tmp15.i.i224 = ptrtoint i8* %tmp7.i.i220 to i32 ; [#uses=1] + %tmp16.i.i225 = ptrtoint i8* %str.1.2 to i32 ; [#uses=1] + %tmp17.i.i226 = sub i32 %tmp15.i.i224, %tmp16.i.i225 ; [#uses=1] + br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232 + +_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232: ; preds = %if.i.i227, %forcond.i.i219 + %tmp1318.i229 = phi i32 [ %tmp17.i.i226, %if.i.i227 ], [ %tmp21248, %forcond.i.i219 ] ; [#uses=3] + %tmp51 = icmp eq i32 %tmp1318.i229, %tmp21248 ; [#uses=1] + %tmp55 = getelementptr i8* %.gc_mem, i32 16 ; [#uses=2] + br i1 %tmp51, label %else, label %if52 + +if52: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232 + %0 = bitcast i8* %tmp55 to i32* ; [#uses=1] + store i32 %tmp1318.i229, i32* %0 + %tmp62 = getelementptr i8* %.gc_mem, i32 20 ; [#uses=1] + %1 = bitcast i8* %tmp62 to i8** ; [#uses=1] + store i8* %str.1.2, i8** %1 + %tmp68 = add i32 %tmp1318.i229, 1 ; [#uses=2] + %tmp71 = getelementptr i8* %str.1.2, i32 %tmp68 ; [#uses=1] + %tmp72 = sub i32 %tmp21248, %tmp68 ; [#uses=1] + %tmp73 = getelementptr i8* %.gc_mem, i32 24 ; [#uses=1] + %2 = bitcast i8* %tmp73 to i32* ; [#uses=1] + store i32 %tmp72, i32* %2 + %tmp74 = getelementptr i8* %.gc_mem, i32 28 ; [#uses=1] + %3 = bitcast i8* %tmp74 to i8** ; [#uses=1] + store i8* %tmp71, i8** %3 + br label %endif27 + +else: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232 + %4 = bitcast i8* %tmp55 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %tmp21248, 0 ; <%"byte[]"> [#uses=1] + %insert150 = insertvalue %"byte[]" %insert, i8* %str.1.2, 1 ; <%"byte[]"> [#uses=1] + store %"byte[]" %insert150, %"byte[]"* %4 + br label %endif27 + +endif27: ; preds = %else, %if52, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 + %str.1.1 = phi i8* [ %tmp41, %if52 ], [ %tmp41, %else ], [ %str.1.2, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 ] ; [#uses=6] + %str.0.1 = phi i32 [ %tmp42, %if52 ], [ %tmp42, %else ], [ %str.0.2, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 ] ; [#uses=6] + %tmp2.i197 = icmp eq i32 %str.0.1, -1 ; [#uses=1] + br i1 %tmp2.i197, label %whilecond.i201, label %if.i198 + +if.i198: ; preds = %endif27 + br label %whilecond.i201 + +whilecond.i201: ; preds = %whilebody.i205, %if.i198, %endif27 + %start.0.i199 = phi i32 [ %str.0.1, %if.i198 ], [ %tmp8.i202, %whilebody.i205 ], [ -1, %endif27 ] ; [#uses=2] + %tmp6.i200 = icmp eq i32 %start.0.i199, 0 ; [#uses=1] + br i1 %tmp6.i200, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, label %whilebody.i205 + +whilebody.i205: ; preds = %whilecond.i201 + %tmp8.i202 = add i32 %start.0.i199, -1 ; [#uses=3] + %tmp10.i = getelementptr i8* %str.1.1, i32 %tmp8.i202 ; [#uses=1] + %tmp11.i203 = load i8* %tmp10.i ; [#uses=1] + %tmp15.i204 = icmp eq i8 %tmp11.i203, 58 ; [#uses=1] + br i1 %tmp15.i204, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, label %whilecond.i201 + +_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit: ; preds = %whilebody.i205, %whilecond.i201 + %tmp80206 = phi i32 [ %tmp8.i202, %whilebody.i205 ], [ %str.0.1, %whilecond.i201 ] ; [#uses=3] + %tmp84 = icmp eq i32 %tmp80206, %str.0.1 ; [#uses=1] + br i1 %tmp84, label %endif86, label %if85 + +if85: ; preds = %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit + %tmp92 = add i32 %tmp80206, 1 ; [#uses=2] + %tmp95 = getelementptr i8* %str.1.1, i32 %tmp92 ; [#uses=1] + %tmp96 = sub i32 %str.0.1, %tmp92 ; [#uses=2] + store i32 0, i32* %len.i + %insert.i = insertvalue %"byte[]" undef, i32 %tmp96, 0 ; <%"byte[]"> [#uses=1] + %insert14.i = insertvalue %"byte[]" %insert.i, i8* %tmp95, 1 ; <%"byte[]"> [#uses=1] + %tmp2.i191 = call fastcc i64 @_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl(%"byte[]" %insert14.i, i32 0, i32* %len.i) ; [#uses=1] + %tmp4.i = load i32* %len.i ; [#uses=1] + %tmp5.i192 = icmp ult i32 %tmp4.i, %tmp96 ; [#uses=1] + br i1 %tmp5.i192, label %if.i, label %_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit + +if.i: ; preds = %if85 + %.newclass_gc_alloc.i195 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4core9Exception24IllegalArgumentException7__ClassZ) + to label %.newclass_gc_alloc.i.noexc unwind label %landingpad ; [#uses=5] + +.newclass_gc_alloc.i.noexc: ; preds = %if.i + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i195 to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i195 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4core9Exception24IllegalArgumentException6__vtblZ, %object.Exception.__vtbl** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i195, i32 4 ; [#uses=1] + %5 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %5 + %tmp6.i = getelementptr i8* %.newclass_gc_alloc.i195, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp6.i, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%29* @_D5tango4core9Exception24IllegalArgumentException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %tmp2.i.i193196 = invoke fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc.i, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str244, i32 0, i32 0) }, %object.Exception* null) + to label %tmp2.i.i193.noexc unwind label %landingpad ; <%object.Exception*> [#uses=0] + +tmp2.i.i193.noexc: ; preds = %.newclass_gc_alloc.i.noexc + %tmp11.i = bitcast i8* %.newclass_gc_alloc.i195 to %object.Object* ; <%object.Object*> [#uses=1] + invoke void @_d_throw_exception(%object.Object* %tmp11.i) + to label %.noexc unwind label %landingpad + +.noexc: ; preds = %tmp2.i.i193.noexc + unreachable + +_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit: ; preds = %if85 + %tmp88 = getelementptr i8* %.gc_mem, i32 32 ; [#uses=1] + %6 = bitcast i8* %tmp88 to i32* ; [#uses=1] + %tmp101 = trunc i64 %tmp2.i191 to i32 ; [#uses=1] + store i32 %tmp101, i32* %6 + br label %endif86 + +endif86: ; preds = %_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit + %str.0.0 = phi i32 [ %tmp80206, %_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit ], [ %str.0.1, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit ] ; [#uses=4] + %tmp2.i.i175 = getelementptr i8* %str.1.1, i32 -1 ; [#uses=1] + br label %forcond.i.i180 + +forcond.i.i180: ; preds = %forbody.i.i184, %endif86 + %len.0.i.i176 = phi i32 [ %str.0.0, %endif86 ], [ %tmp4.i.i178, %forbody.i.i184 ] ; [#uses=2] + %p.0.i.i177 = phi i8* [ %tmp2.i.i175, %endif86 ], [ %tmp7.i.i181, %forbody.i.i184 ] ; [#uses=1] + %tmp4.i.i178 = add i32 %len.0.i.i176, -1 ; [#uses=1] + %tmp5.i.i179 = icmp eq i32 %len.0.i.i176, 0 ; [#uses=1] + br i1 %tmp5.i.i179, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit, label %forbody.i.i184 + +forbody.i.i184: ; preds = %forcond.i.i180 + %tmp7.i.i181 = getelementptr i8* %p.0.i.i177, i32 1 ; [#uses=3] + %tmp8.i.i182 = load i8* %tmp7.i.i181 ; [#uses=1] + %tmp12.i.i183 = icmp eq i8 %tmp8.i.i182, 47 ; [#uses=1] + br i1 %tmp12.i.i183, label %if.i.i188, label %forcond.i.i180 + +if.i.i188: ; preds = %forbody.i.i184 + %tmp15.i.i185 = ptrtoint i8* %tmp7.i.i181 to i32 ; [#uses=1] + %tmp16.i.i186 = ptrtoint i8* %str.1.1 to i32 ; [#uses=1] + %tmp17.i.i187 = sub i32 %tmp15.i.i185, %tmp16.i.i186 ; [#uses=1] + br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + +_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit: ; preds = %if.i.i188, %forcond.i.i180 + %tmp1318.i = phi i32 [ %tmp17.i.i187, %if.i.i188 ], [ %str.0.0, %forcond.i.i180 ] ; [#uses=4] + %tmp115 = icmp eq i32 %tmp1318.i, %str.0.0 ; [#uses=1] + br i1 %tmp115, label %endif117, label %if116 + +if116: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %tmp123 = add i32 %tmp1318.i, 1 ; [#uses=2] + %tmp126 = getelementptr i8* %str.1.1, i32 %tmp123 ; [#uses=1] + %tmp127 = sub i32 %str.0.0, %tmp123 ; [#uses=1] + %tmp128 = getelementptr i8* %.gc_mem, i32 8 ; [#uses=1] + %7 = bitcast i8* %tmp128 to i32* ; [#uses=1] + store i32 %tmp127, i32* %7 + %tmp129 = getelementptr i8* %.gc_mem, i32 12 ; [#uses=1] + %8 = bitcast i8* %tmp129 to i8** ; [#uses=1] + store i8* %tmp126, i8** %8 + br label %endif117 + +endif117: ; preds = %if116, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %tmp137 = bitcast i8* %.gc_mem to i32* ; [#uses=1] + store i32 %tmp1318.i, i32* %tmp137 + %tmp138 = getelementptr i8* %.gc_mem, i32 4 ; [#uses=1] + %9 = bitcast i8* %tmp138 to i8** ; [#uses=1] + store i8* %str.1.1, i8** %9 + %tmp143 = icmp eq i32 %tmp1318.i, 0 ; [#uses=1] + %retval = select i1 %tmp143, %tango.net.ftp.FtpClient.FtpAddress* null, %tango.net.ftp.FtpClient.FtpAddress* %.gc_mem3 ; <%tango.net.ftp.FtpClient.FtpAddress*> [#uses=1] + ret %tango.net.ftp.FtpClient.FtpAddress* %retval + +landingpad: ; preds = %tmp2.i.i193.noexc, %.newclass_gc_alloc.i.noexc, %if.i, %try + %10 = tail call i8* @llvm.eh.exception() ; [#uses=2] + %11 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %10, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D6Object7__ClassZ) ; [#uses=1] + %cond = icmp eq i32 %11, 1 ; [#uses=1] + br i1 %cond, label %catch, label %switchdefault + +catch: ; preds = %landingpad + ret %tango.net.ftp.FtpClient.FtpAddress* null + +switchdefault: ; preds = %landingpad + tail call void @_d_eh_resume_unwind(i8* %10) + unreachable +} + +declare fastcc %"byte[]" @_D6object6Object8toStringMFZAa(%object.Object*) + +declare fastcc i32 @_D6object6Object6toHashMFZk(%object.Object*) + +declare fastcc i32 @_D6object6Object5opCmpMFC6ObjectZi(%object.Object*, %object.Object*) + +declare fastcc i32 @_D6object6Object8opEqualsMFC6ObjectZi(%object.Object*, %object.Object*) + +declare fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception*, %"byte[]", %object.Exception*) + +declare fastcc void @_D6object9Exception8writeOutMFDFAaZvZv(%object.Exception*, %"void delegate(char[])") + +define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient12FtpException8toStringMFZAa(%tango.net.ftp.FtpClient.FtpException* nocapture %.this_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=1] + %.len = load i32* %tmp2 ; [#uses=2] + %tmp3 = add i32 %.len, 4 ; [#uses=2] + %.gc_mem = tail call noalias i8* @_d_newarrayiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp3) ; [#uses=4] + %tmp10 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 7, i32 0 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %.gc_mem, i8* %tmp10, i32 3, i32 1) + %tmp13 = getelementptr i8* %.gc_mem, i32 3 ; [#uses=1] + store i8 32, i8* %tmp13 + %tmp18 = getelementptr i8* %.gc_mem, i32 4 ; [#uses=1] + %tmp23 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 2, i32 1 ; [#uses=1] + %.ptr24 = load i8** %tmp23 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp18, i8* %.ptr24, i32 %.len, i32 1) + %insert = insertvalue %"byte[]" undef, i32 %tmp3, 0 ; <%"byte[]"> [#uses=1] + %insert30 = insertvalue %"byte[]" %insert, i8* %.gc_mem, 1 ; <%"byte[]"> [#uses=1] + ret %"byte[]" %insert30 +} + +define fastcc %tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException(%tango.net.ftp.FtpClient.FtpException* %.this_arg, %"byte[]" %message_arg, [3 x i8]* nocapture %code_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 7, i32 0 ; [#uses=1] + %tmp3 = getelementptr [3 x i8]* %code_arg, i32 0, i32 0 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp2, i8* %tmp3, i32 3, i32 1) + %tmp5 = bitcast %tango.net.ftp.FtpClient.FtpException* %.this_arg to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7 = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5, %"byte[]" %message_arg, %object.Exception* null) ; <%object.Exception*> [#uses=0] + ret %tango.net.ftp.FtpClient.FtpException* %.this_arg +} + +define fastcc %tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException5_ctorMFS5tango3net3ftp9FtpClient11FtpResponseZC5tango3net3ftp9FtpClient12FtpException(%tango.net.ftp.FtpClient.FtpException* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* nocapture byval %r_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 7, i32 0 ; [#uses=1] + %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %r_arg, i32 0, i32 0, i32 0 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp2, i8* %tmp4, i32 3, i32 1) + %tmp6 = bitcast %tango.net.ftp.FtpClient.FtpException* %.this_arg to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %r_arg, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp8 = load %"byte[]"* %tmp7 ; <%"byte[]"> [#uses=1] + %tmp9 = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp6, %"byte[]" %tmp8, %object.Exception* null) ; <%object.Exception*> [#uses=0] + ret %tango.net.ftp.FtpClient.FtpException* %.this_arg +} + +declare fastcc void @_D5tango3net3ftp6Telnet6Telnet8sendlineMFAvZv(%tango.net.ftp.Telnet.Telnet*, %"byte[]") + +declare fastcc void @_D5tango3net3ftp6Telnet6Telnet8sendDataMFAvZv(%tango.net.ftp.Telnet.Telnet*, %"byte[]") + +declare fastcc %"byte[]" @_D5tango3net3ftp6Telnet6Telnet8readLineMFZAa(%tango.net.ftp.Telnet.Telnet*) + +declare fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp6Telnet6Telnet19findAvailableServerMFAaiZC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32) + +declare fastcc void @_D5tango4time4Time8TimeSpan10fromMillisFlZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret, i64) + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %message_arg) noreturn { +entry: + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str66, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" %message_arg, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp6 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_throw_exception(%object.Object* %tmp6) + unreachable +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg) nounwind { +entry: + %tmp34 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 10, i32 0 ; [#uses=1] + %tmp = load i64* %tmp34, align 1 ; [#uses=1] + %0 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] + store i64 %tmp, i64* %0 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFS5tango4time4Time8TimeSpanZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %tango.time.Time.Time* nocapture byval %t_arg) nounwind { +entry: + %tmp34 = getelementptr %tango.time.Time.Time* %t_arg, i32 0, i32 0 ; [#uses=1] + %tmp = load i64* %tmp34, align 1 ; [#uses=1] + %0 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 10, i32 0 ; [#uses=1] + store i64 %tmp, i64* %0 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12shutdownTimeMFZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg) nounwind { +entry: + %tmp1.0 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 10, i32 0 ; [#uses=1] + %tmp = load i64* %tmp1.0, align 1 ; [#uses=1] + %tmp5.i = shl i64 %tmp, 1 ; [#uses=1] + %0 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] + store i64 %tmp5.i, i64* %0 + ret void +} + +define fastcc %"FtpFeature[]" @_D5tango3net3ftp9FtpClient13FTPConnection17supportedFeaturesMFZAS5tango3net3ftp9FtpClient10FtpFeature(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] + %.len = load i32* %tmp3 ; [#uses=1] + %tmp4 = icmp eq i32 %.len, 0 ; [#uses=1] + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] + %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp5 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] + %tmp6 = icmp eq %tango.net.ftp.FtpClient.FtpFeature* %.ptr, null ; [#uses=1] + %tmp7 = and i1 %tmp4, %tmp6 ; [#uses=1] + br i1 %tmp7, label %endif, label %if + +if: ; preds = %entry + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] + %tmp10 = load %"FtpFeature[]"* %tmp9 ; <%"FtpFeature[]"> [#uses=1] + ret %"FtpFeature[]" %tmp10 + +endif: ; preds = %entry + %tmp12 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp13 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp12 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.getFeatures at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp13, i32 0, i32 34 ; [#uses=1] + %this.getFeatures = load void (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.getFeatures at vtbl", align 4 ; [#uses=1] + tail call fastcc void %this.getFeatures(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + %tmp16 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] + %tmp17 = load %"FtpFeature[]"* %tmp16 ; <%"FtpFeature[]"> [#uses=1] + ret %"FtpFeature[]" %tmp17 +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFS5tango3net3ftp9FtpClient11FtpResponseZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* nocapture byval %fr_arg) { +entry: + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 5 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %fr_arg, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp5 = load %"byte[]"* %tmp4 ; <%"byte[]"> [#uses=1] + tail call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %tmp5) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7connectMFS5tango3net3ftp9FtpClient10FtpAddressZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpAddress* nocapture byval %fad_arg) { +entry: + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.connect at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 16 ; [#uses=1] + %this.connect = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)** %"this.connect at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 0 ; <%"byte[]"*> [#uses=1] + %tmp5 = load %"byte[]"* %tmp4 ; <%"byte[]"> [#uses=1] + %tmp6 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 2 ; <%"byte[]"*> [#uses=1] + %tmp7 = load %"byte[]"* %tmp6 ; <%"byte[]"> [#uses=1] + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 3 ; <%"byte[]"*> [#uses=1] + %tmp9 = load %"byte[]"* %tmp8 ; <%"byte[]"> [#uses=1] + %tmp10 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 4 ; [#uses=1] + %tmp11 = load i32* %tmp10 ; [#uses=1] + tail call fastcc void %this.connect(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %tmp5, %"byte[]" %tmp7, %"byte[]" %tmp9, i32 %tmp11) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7connectMFAaAaAakZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %hostname_arg, %"byte[]" %username_arg, %"byte[]" %password_arg, i32 %port_arg) { +entry: + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %__arrayArg120 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp44 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %__arrayArg121 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp73 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %username_arg100 = extractvalue %"byte[]" %username_arg, 0 ; [#uses=2] + %username_arg101 = extractvalue %"byte[]" %username_arg, 1 ; [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp2 = load %tango.net.SocketConduit.SocketConduit** %tmp1 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=3] + %tmp3 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp2, null ; [#uses=1] + br i1 %tmp3, label %endif, label %if + +if: ; preds = %entry + %tmp7 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp2 to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] + %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %tmp2 to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] + %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] + %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] + %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] + call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp7) + br label %endif + +endif: ; preds = %if, %entry + %tmp9 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet* ; <%tango.net.ftp.Telnet.Telnet*> [#uses=1] + %tmp10 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet.__vtbl** ; <%tango.net.ftp.Telnet.Telnet.__vtbl**> [#uses=1] + %tmp11 = load %tango.net.ftp.Telnet.Telnet.__vtbl** %tmp10 ; <%tango.net.ftp.Telnet.Telnet.__vtbl*> [#uses=1] + %"(cast(Telnet)this).findAvailableServer at vtbl" = getelementptr %tango.net.ftp.Telnet.Telnet.__vtbl* %tmp11, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)**> [#uses=1] + %"(cast(Telnet)this).findAvailableServer" = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)** %"(cast(Telnet)this).findAvailableServer at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)*> [#uses=1] + %tmp15 = call fastcc %tango.net.SocketConduit.SocketConduit* %"(cast(Telnet)this).findAvailableServer"(%tango.net.ftp.Telnet.Telnet* %tmp9, %"byte[]" %hostname_arg, i32 %port_arg) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=0] + %tmp22 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=7] + %tmp23 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp23, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str67, i32 0, i32 0) }) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %endif + %tmp26 = icmp eq i32 %username_arg100, 0 ; [#uses=1] + br i1 %tmp26, label %if27, label %endif28 + +if27: ; preds = %postinvoke + ret void + +endif28: ; preds = %postinvoke + %tmp31 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp31, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp33 = getelementptr [1 x %"byte[]"]* %__arrayArg120, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + %insert = insertvalue %"byte[]" undef, i32 %username_arg100, 0 ; <%"byte[]"> [#uses=1] + %insert99 = insertvalue %"byte[]" %insert, i8* %username_arg101, 1 ; <%"byte[]"> [#uses=1] + store %"byte[]" %insert99, %"byte[]"* %tmp33, align 8 + %tmp36 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp33, 1 ; <%"char[][]"> [#uses=1] + invoke fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str68, i32 0, i32 0) }, %"char[][]" %tmp36) + to label %postinvoke37 unwind label %landingpad + +postinvoke37: ; preds = %endif28 + %tmp40 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl41" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp40, i32 0, i32 37 ; [#uses=1] + %this.readResponse43 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl41", align 4 ; [#uses=1] + invoke fastcc void %this.readResponse43(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp44, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke45 unwind label %landingpad + +postinvoke45: ; preds = %postinvoke37 + %tmp46 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=5] + %tmp47 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp44, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp46, i8* %tmp47, i32 12, i32 4) + %tmp50 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp46, 1 ; <%"byte[]"> [#uses=1] + %tmp52 = invoke i32 @_adEq(%"byte[]" %tmp50, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str69, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly + to label %postinvoke51 unwind label %landingpad ; [#uses=1] + +postinvoke51: ; preds = %postinvoke45 + %tmp53 = icmp eq i32 %tmp52, 0 ; [#uses=1] + br i1 %tmp53, label %endif55, label %if54 + +if54: ; preds = %postinvoke51 + %tmp58 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl59" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp58, i32 0, i32 35 ; [#uses=1] + %this.sendCommand61 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl59", align 4 ; [#uses=1] + %tmp62 = getelementptr [1 x %"byte[]"]* %__arrayArg121, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %password_arg, %"byte[]"* %tmp62, align 8 + %tmp65 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp62, 1 ; <%"char[][]"> [#uses=1] + invoke fastcc void %this.sendCommand61(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str70, i32 0, i32 0) }, %"char[][]" %tmp65) + to label %postinvoke66 unwind label %landingpad + +postinvoke66: ; preds = %if54 + %tmp69 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl70" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp69, i32 0, i32 37 ; [#uses=1] + %this.readResponse72 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl70", align 4 ; [#uses=1] + invoke fastcc void %this.readResponse72(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp73, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke74 unwind label %landingpad + +postinvoke74: ; preds = %postinvoke66 + %tmp76 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp73, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp46, i8* %tmp76, i32 12, i32 4) + br label %endif55 + +endif55: ; preds = %postinvoke74, %postinvoke51 + %tmp79 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp46, 1 ; <%"byte[]"> [#uses=1] + %tmp81 = invoke i32 @_adEq(%"byte[]" %tmp79, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str71, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly + to label %postinvoke80 unwind label %landingpad ; [#uses=1] + +postinvoke80: ; preds = %endif55 + %tmp82 = icmp eq i32 %tmp81, 0 ; [#uses=1] + br i1 %tmp82, label %andand, label %endtrycatch + +andand: ; preds = %postinvoke80 + %tmp86 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp46, 1 ; <%"byte[]"> [#uses=1] + %tmp88 = invoke i32 @_adEq(%"byte[]" %tmp86, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str72, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly + to label %postinvoke87 unwind label %landingpad ; [#uses=1] + +postinvoke87: ; preds = %andand + %tmp89 = icmp eq i32 %tmp88, 0 ; [#uses=1] + br i1 %tmp89, label %if91, label %endtrycatch + +if91: ; preds = %postinvoke87 + %tmp95 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp95, i32 0, i32 14 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) + to label %endtrycatch unwind label %landingpad + +landingpad: ; preds = %if91, %andand, %endif55, %postinvoke66, %if54, %postinvoke45, %postinvoke37, %endif28, %endif + %0 = call i8* @llvm.eh.exception() ; [#uses=3] + %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D6Object7__ClassZ) ; [#uses=1] + %cond = icmp eq i32 %1, 1 ; [#uses=1] + br i1 %cond, label %catch, label %switchdefault + +catch: ; preds = %landingpad + %2 = bitcast i8* %0 to %object.Object* ; <%object.Object*> [#uses=1] + %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.close at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 17 ; [#uses=1] + %this.close = load void (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.close at vtbl", align 4 ; [#uses=1] + call fastcc void %this.close(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + call void @_d_throw_exception(%object.Object* %2) + unreachable + +switchdefault: ; preds = %landingpad + call void @_d_eh_resume_unwind(i8* %0) + unreachable + +endtrycatch: ; preds = %if91, %postinvoke87, %postinvoke80 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection5closeMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp2 = load %tango.net.SocketConduit.SocketConduit** %tmp1 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp3 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp2, null ; [#uses=1] + br i1 %tmp3, label %endif, label %if + +if: ; preds = %entry + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp5 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp2) + br label %endif + +endif: ; preds = %if, %entry + %tmp12 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=4] + %tmp13 = load %tango.net.SocketConduit.SocketConduit** %tmp12 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + %tmp14 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp13, null ; [#uses=1] + br i1 %tmp14, label %endif16, label %try + +try: ; preds = %endif + %tmp18 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp19 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp18 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp19, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str73, i32 0, i32 0) }, %"char[][]" zeroinitializer) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %try + %tmp23 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp18 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp23, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str74, i32 0, i32 0) }) + to label %endtrycatch unwind label %landingpad + +landingpad: ; preds = %postinvoke, %try + %0 = call i8* @llvm.eh.exception() ; [#uses=2] + %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=1] + %cond = icmp eq i32 %1, 1 ; [#uses=1] + br i1 %cond, label %endtrycatch, label %switchdefault + +switchdefault: ; preds = %landingpad + call void @_d_eh_resume_unwind(i8* %0) + unreachable + +endtrycatch: ; preds = %landingpad, %postinvoke + %tmp28 = load %tango.net.SocketConduit.SocketConduit** %tmp12 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp29 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp28 to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] + %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %tmp28 to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] + %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] + %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] + %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] + call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp29) + %tmp31 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] + %tmp32 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] + %.len = load i32* %tmp32 ; [#uses=1] + %tmp33 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] + %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp33 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] + %.tmp = bitcast %tango.net.ftp.FtpClient.FtpFeature* %.ptr to i8* ; [#uses=1] + call void @_d_delarray(i32 %.len, i8* %.tmp) + store %"FtpFeature[]" zeroinitializer, %"FtpFeature[]"* %tmp31 + %tmp36 = load %tango.net.SocketConduit.SocketConduit** %tmp12 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + %.tmp37 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp36 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp37) + store %tango.net.SocketConduit.SocketConduit* null, %tango.net.SocketConduit.SocketConduit** %tmp12 + ret void + +endif16: ; preds = %endif + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection10setPassiveMFZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] + store i32 1, i32* %tmp2 + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 1 ; <%tango.net.Socket.Address**> [#uses=2] + %tmp6 = load %tango.net.Socket.Address** %tmp5 ; <%tango.net.Socket.Address*> [#uses=1] + %.tmp = bitcast %tango.net.Socket.Address* %tmp6 to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_delclass(%object.Object* %.tmp) + store %tango.net.Socket.Address* null, %tango.net.Socket.Address** %tmp5 + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 2 ; <%tango.net.Socket.Address**> [#uses=2] + %tmp10 = load %tango.net.Socket.Address** %tmp9 ; <%tango.net.Socket.Address*> [#uses=1] + %.tmp11 = bitcast %tango.net.Socket.Address* %tmp10 to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_delclass(%object.Object* %.tmp11) + store %tango.net.Socket.Address* null, %tango.net.Socket.Address** %tmp9 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection9setActiveMFAatAatZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %ip_arg, i16 zeroext %port_arg, %"byte[]" %listen_ip_arg, i16 zeroext %listen_port_arg) { +entry: + %listen_ip_arg64 = extractvalue %"byte[]" %listen_ip_arg, 0 ; [#uses=2] + %listen_ip_arg65 = extractvalue %"byte[]" %listen_ip_arg, 1 ; [#uses=2] + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] + store i32 0, i32* %tmp2 + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 1 ; <%tango.net.Socket.Address**> [#uses=1] + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=4] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp6 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp6, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) + %tmp12 = zext i16 %port_arg to i32 ; [#uses=1] + %tmp13 = tail call fastcc %tango.net.Socket.IPv4Address* @_D5tango3net6Socket11IPv4Address5_ctorMFAaiZC5tango3net6Socket11IPv4Address(%tango.net.Socket.IPv4Address* %.newclass_gc, %"byte[]" %ip_arg, i32 %tmp12) ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %tmp14 = bitcast %tango.net.Socket.IPv4Address* %tmp13 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] + store %tango.net.Socket.Address* %tmp14, %tango.net.Socket.Address** %tmp5 + %tmp17 = icmp eq i16 %listen_port_arg, 0 ; [#uses=1] + %listen_port.0 = select i1 %tmp17, i16 %port_arg, i16 %listen_port_arg ; [#uses=2] + %tmp22 = insertvalue %"byte[]" undef, i32 %listen_ip_arg64, 0 ; <%"byte[]"> [#uses=1] + %tmp23 = insertvalue %"byte[]" %tmp22, i8* %listen_ip_arg65, 1 ; <%"byte[]"> [#uses=1] + %tmp24 = tail call i32 @_adEq(%"byte[]" %tmp23, %"byte[]" zeroinitializer, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp25 = icmp eq i32 %tmp24, 0 ; [#uses=1] + %tmp30 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 2 ; <%tango.net.Socket.Address**> [#uses=2] + %.newclass_gc_alloc31 = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=7] + %vtbl33 = bitcast i8* %.newclass_gc_alloc31 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl33 + %monitor34 = getelementptr i8* %.newclass_gc_alloc31, i32 4 ; [#uses=1] + %1 = bitcast i8* %monitor34 to i8** ; [#uses=1] + store i8* null, i8** %1 + %tmp35 = getelementptr i8* %.newclass_gc_alloc31, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp35, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) + br i1 %tmp25, label %else, label %if26 + +if26: ; preds = %entry + %tmp2.i = getelementptr i8* %.newclass_gc_alloc31, i32 20 ; [#uses=1] + %2 = bitcast i8* %tmp2.i to i32* ; [#uses=1] + store i32 0, i32* %2 + %tmp7.i = getelementptr i8* %.newclass_gc_alloc31, i32 18 ; [#uses=1] + %3 = bitcast i8* %tmp7.i to i16* ; [#uses=1] + store i16 %listen_port.0, i16* %3 + %tmp41 = bitcast i8* %.newclass_gc_alloc31 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] + store %tango.net.Socket.Address* %tmp41, %tango.net.Socket.Address** %tmp30 + ret void + +else: ; preds = %entry + %.newclass_gc32 = bitcast i8* %.newclass_gc_alloc31 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %listen_ip_arg64, 0 ; <%"byte[]"> [#uses=1] + %insert59 = insertvalue %"byte[]" %insert, i8* %listen_ip_arg65, 1 ; <%"byte[]"> [#uses=1] + %tmp55 = zext i16 %listen_port.0 to i32 ; [#uses=1] + %tmp56 = tail call fastcc %tango.net.Socket.IPv4Address* @_D5tango3net6Socket11IPv4Address5_ctorMFAaiZC5tango3net6Socket11IPv4Address(%tango.net.Socket.IPv4Address* %.newclass_gc32, %"byte[]" %insert59, i32 %tmp55) ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %tmp57 = bitcast %tango.net.Socket.IPv4Address* %tmp56 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] + store %tango.net.Socket.Address* %tmp57, %tango.net.Socket.Address** %tmp30 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection2cdMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %dir_arg) { +entry: + %__arrayArg123 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg123, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %dir_arg, %"byte[]"* %tmp4, align 8 + %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str75, i32 0, i32 0) }, %"char[][]" %tmp7) + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str76, i32 0, i32 0) }) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection4cdupMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %fr = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str77, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 37 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %fr, i32 0, i32 0, i32 0 ; [#uses=3] + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp8, i8* %tmp9, i32 12, i32 4) + %tmp12 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp8, 1 ; <%"byte[]"> [#uses=1] + %tmp13 = call i32 @_adEq(%"byte[]" %tmp12, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str78, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp14 = icmp eq i32 %tmp13, 0 ; [#uses=1] + br i1 %tmp14, label %oror, label %if.critedge + +oror: ; preds = %entry + %tmp17 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp8, 1 ; <%"byte[]"> [#uses=1] + %tmp18 = call i32 @_adEq(%"byte[]" %tmp17, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str79, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp19 = icmp eq i32 %tmp18, 0 ; [#uses=1] + br i1 %tmp19, label %else, label %if + +if.critedge: ; preds = %entry + ret void + +if: ; preds = %oror + ret void + +else: ; preds = %oror + %tmp22 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp22, i32 0, i32 14 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] + call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %fr) + ret void +} + +define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient13FTPConnection3cwdMFZAa(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str80, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str81, i32 0, i32 0) }) + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=1] + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp8, i8* %tmp9, i32 12, i32 4) + %tmp12 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parse257 at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp12, i32 0, i32 38 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)**> [#uses=1] + %this.parse257 = load %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.parse257 at vtbl", align 4 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*> [#uses=1] + %tmp14 = call fastcc %"byte[]" %this.parse257(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) ; <%"byte[]"> [#uses=1] + ret %"byte[]" %tmp14 +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection5chmodMFAaiZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, i32 %mode_arg) { +entry: + %.nongc_mem182.i = alloca [18 x i8], align 1 ; <[18 x i8]*> [#uses=2] + %__arrayArg126 = alloca [2 x %"byte[]"], align 8 ; <[2 x %"byte[]"]*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp3 = sext i32 %mode_arg to i64 ; [#uses=1] + %.nongc_mem182.sub.i = getelementptr [18 x i8]* %.nongc_mem182.i, i32 0, i32 0 ; [#uses=2] + switch i32 111, label %default37.i [ + i32 100, label %case8.i + i32 68, label %case8.i + i32 103, label %case8.i + i32 71, label %case8.i + i32 117, label %switchend.i + i32 85, label %switchend.i + i32 98, label %case28.i + i32 66, label %case28.i + i32 111, label %case31.i + i32 79, label %case31.i + i32 120, label %case33.i + i32 88, label %case35.i + ] + +case8.i: ; preds = %entry, %entry, %entry, %entry + br i1 undef, label %if11.i, label %switchend.i + +if11.i: ; preds = %case8.i + br label %switchend.i + +case28.i: ; preds = %entry, %entry + br label %switchend.i + +case31.i: ; preds = %entry, %entry + br label %switchend.i + +case33.i: ; preds = %entry + br label %switchend.i + +case35.i: ; preds = %entry + br label %switchend.i + +default37.i: ; preds = %entry + call void @llvm.memcpy.i32(i8* %.nongc_mem182.sub.i, i8* getelementptr ([18 x i8]* @.str263, i32 0, i32 0), i32 17, i32 1) + %tmp38.i = getelementptr [18 x i8]* %.nongc_mem182.i, i32 0, i32 17 ; [#uses=1] + store i8 111, i8* %tmp38.i + %.gc_mem40.i = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 20) ; [#uses=2] + call void @llvm.memcpy.i32(i8* %.gc_mem40.i, i8* %.nongc_mem182.sub.i, i32 18, i32 1) + %tmp41.i = getelementptr i8* %.gc_mem40.i, i32 18 ; [#uses=1] + %tmp41181.i = bitcast i8* %tmp41.i to i16* ; [#uses=1] + %tmp.i = load i16* bitcast ([3 x i8]* @.str264 to i16*), align 2 ; [#uses=1] + store i16 %tmp.i, i16* %tmp41181.i, align 1 + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +switchend.i: ; preds = %case35.i, %case33.i, %case31.i, %case28.i, %if11.i, %case8.i, %entry, %entry + %index.1.i = phi i32 [ 7, %case35.i ], [ 6, %case33.i ], [ 5, %case31.i ], [ 4, %case28.i ], [ 0, %entry ], [ 0, %entry ], [ 1, %if11.i ], [ 0, %case8.i ] ; [#uses=3] + %pre.0.i = phi i8 [ -1, %case35.i ], [ -1, %case33.i ], [ -1, %case31.i ], [ -1, %case28.i ], [ 35, %entry ], [ 35, %if11.i ], [ 35, %entry ], [ 35, %case8.i ] ; [#uses=1] + %tmp48.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %index.1.i, i32 2 ; <%"byte[]"*> [#uses=1] + %tmp49.i = load %"byte[]"* %tmp48.i ; <%"byte[]"> [#uses=1] + %tmp49178.i = extractvalue %"byte[]" %tmp49.i, 1 ; [#uses=2] + %tmp51.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %index.1.i, i32 0 ; [#uses=1] + %tmp52.i = load i32* %tmp51.i ; [#uses=3] + %tmp58.i19 = icmp sgt i32 %mode_arg, -1 ; [#uses=1] + br i1 %tmp58.i19, label %if59.i, label %dowhile82.i + +if59.i: ; preds = %switchend.i + br label %dowhile.i + +dowhile.i: ; preds = %andand.i, %if59.i + %p.0.i = phi i8* [ getelementptr ([4 x i8]* @.str82, i32 0, i32 3), %if59.i ], [ %tmp65.i, %andand.i ] ; [#uses=1] + %v.0.i = phi i32 [ %mode_arg, %if59.i ], [ %tmp75.i, %andand.i ] ; [#uses=2] + %len.0.i = phi i32 [ 3, %if59.i ], [ %tmp78.i, %andand.i ] ; [#uses=3] + %tmp65.i = getelementptr i8* %p.0.i, i32 -1 ; [#uses=2] + %tmp68.i = urem i32 %v.0.i, %tmp52.i ; [#uses=1] + %tmp71.i = getelementptr i8* %tmp49178.i, i32 %tmp68.i ; [#uses=1] + %tmp72.i = load i8* %tmp71.i ; [#uses=1] + store i8 %tmp72.i, i8* %tmp65.i + %tmp75.i = udiv i32 %v.0.i, %tmp52.i ; [#uses=2] + %tmp76.i = icmp eq i32 %tmp75.i, 0 ; [#uses=1] + br i1 %tmp76.i, label %endif60.i, label %andand.i + +andand.i: ; preds = %dowhile.i + %tmp78.i = add i32 %len.0.i, -1 ; [#uses=2] + %tmp79.i = icmp eq i32 %len.0.i, 1 ; [#uses=1] + br i1 %tmp79.i, label %endif60.i, label %dowhile.i + +dowhile82.i: ; preds = %andand100.i, %switchend.i + %p.2.i = phi i8* [ %tmp86.i, %andand100.i ], [ getelementptr ([4 x i8]* @.str82, i32 0, i32 3), %switchend.i ] ; [#uses=1] + %v80.0.i = phi i64 [ %tmp99.i, %andand100.i ], [ %tmp3, %switchend.i ] ; [#uses=2] + %len.2.i = phi i32 [ %tmp104.i, %andand100.i ], [ 3, %switchend.i ] ; [#uses=3] + %tmp86.i = getelementptr i8* %p.2.i, i32 -1 ; [#uses=2] + %tmp88.i = zext i32 %tmp52.i to i64 ; [#uses=2] + %tmp90.i = urem i64 %v80.0.i, %tmp88.i ; [#uses=1] + %tmp91.i = trunc i64 %tmp90.i to i32 ; [#uses=1] + %tmp94.i = getelementptr i8* %tmp49178.i, i32 %tmp91.i ; [#uses=1] + %tmp95.i = load i8* %tmp94.i ; [#uses=1] + store i8 %tmp95.i, i8* %tmp86.i + %tmp99.i = udiv i64 %v80.0.i, %tmp88.i ; [#uses=2] + %tmp102.i = icmp eq i64 %tmp99.i, 0 ; [#uses=1] + br i1 %tmp102.i, label %endif60.i, label %andand100.i + +andand100.i: ; preds = %dowhile82.i + %tmp104.i = add i32 %len.2.i, -1 ; [#uses=2] + %tmp105.i = icmp eq i32 %len.2.i, 1 ; [#uses=1] + br i1 %tmp105.i, label %endif60.i, label %dowhile82.i + +endif60.i: ; preds = %andand100.i, %dowhile82.i, %andand.i, %dowhile.i + %len.1.i = phi i32 [ %tmp78.i, %andand.i ], [ %len.0.i, %dowhile.i ], [ %tmp104.i, %andand100.i ], [ %len.2.i, %dowhile82.i ] ; [#uses=2] + %tmp109.i = icmp eq i8 %pre.0.i, 35 ; [#uses=1] + br i1 %tmp109.i, label %condtrue.i, label %condend.i + +condtrue.i: ; preds = %endif60.i + %tmp111.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %index.1.i, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp112.i = load %"byte[]"* %tmp111.i ; <%"byte[]"> [#uses=1] + br label %condend.i + +condend.i: ; preds = %condtrue.i, %endif60.i + %condtmp.0.i = phi %"byte[]" [ %tmp112.i, %condtrue.i ], [ zeroinitializer, %endif60.i ] ; <%"byte[]"> [#uses=2] + %condtmp.0175.i = extractvalue %"byte[]" %condtmp.0.i, 0 ; [#uses=3] + %tmp117.i = icmp ugt i32 %len.1.i, %condtmp.0175.i ; [#uses=1] + br i1 %tmp117.i, label %endif127.i, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +endif127.i: ; preds = %condend.i + %condtmp.0176.i = extractvalue %"byte[]" %condtmp.0.i, 1 ; [#uses=1] + %tmp123.i = add i32 %condtmp.0175.i, 1 ; [#uses=1] + %tmp124.i = sub i32 %len.1.i, %tmp123.i ; [#uses=1] + %tmp156.i = getelementptr [4 x i8]* @.str82, i32 0, i32 %tmp124.i ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp156.i, i8* %condtmp.0176.i, i32 %condtmp.0175.i, i32 1) + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit: ; preds = %endif127.i, %condend.i, %default37.i + %tmp6 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp6 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp9 = getelementptr [2 x %"byte[]"]* %__arrayArg126, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str82, i32 0, i32 0) }, %"byte[]"* %tmp9, align 8 + %tmp11 = getelementptr [2 x %"byte[]"]* %__arrayArg126, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] + store %"byte[]" %path_arg, %"byte[]"* %tmp11, align 8 + %tmp14 = insertvalue %"char[][]" { i32 2, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 10, i8* getelementptr ([11 x i8]* @.str84, i32 0, i32 0) }, %"char[][]" %tmp14) + %tmp17 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp6 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp17, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str85, i32 0, i32 0) }) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection3delMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %__arrayArg127 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg127, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp4, align 8 + %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str86, i32 0, i32 0) }, %"char[][]" %tmp7) + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str87, i32 0, i32 0) }) + %tmp12 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=2] + %tmp13 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp12, i8* %tmp13, i32 12, i32 4) + %tmp16 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp12, 1 ; <%"byte[]"> [#uses=1] + %tmp17 = call i32 @_adEq(%"byte[]" %tmp16, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str88, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp18 = icmp eq i32 %tmp17, 0 ; [#uses=1] + br i1 %tmp18, label %if, label %endif + +if: ; preds = %entry + %tmp22 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.rm at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp22, i32 0, i32 25 ; [#uses=1] + %this.rm = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.rm at vtbl", align 4 ; [#uses=1] + call fastcc void %this.rm(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) + ret void + +endif: ; preds = %entry + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection2rmMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %__arrayArg128 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg128, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp4, align 8 + %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str89, i32 0, i32 0) }, %"char[][]" %tmp7) + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str90, i32 0, i32 0) }) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection6renameMFAaAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %old_path_arg, %"byte[]" %new_path_arg) { +entry: + %__arrayArg129 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %__arrayArg130 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp28 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=4] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg129, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %old_path_arg, %"byte[]"* %tmp4, align 8 + %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str91, i32 0, i32 0) }, %"char[][]" %tmp7) + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str92, i32 0, i32 0) }) + %tmp14 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl15" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp14, i32 0, i32 35 ; [#uses=1] + %this.sendCommand17 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl15", align 4 ; [#uses=1] + %tmp18 = getelementptr [1 x %"byte[]"]* %__arrayArg130, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %new_path_arg, %"byte[]"* %tmp18, align 8 + %tmp21 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp18, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand17(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str93, i32 0, i32 0) }, %"char[][]" %tmp21) + %tmp24 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl25" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp24, i32 0, i32 36 ; [#uses=1] + %this.readResponse27 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl25", align 4 ; [#uses=1] + call fastcc void %this.readResponse27(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp28, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str94, i32 0, i32 0) }) + ret void +} + +define fastcc i32 @_D5tango3net3ftp9FtpClient13FTPConnection5existMFAaZi(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %file_arg) { +entry: + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 8 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=2] + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp9 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.getFileInfo at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 52 ; [#uses=1] + %this.getFileInfo = load void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.getFileInfo at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.getFileInfo(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %file_arg) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %entry + %.rettmp.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 1 ; [#uses=1] + %tmp40 = load i32* %.rettmp.1, align 8 ; [#uses=2] + switch i32 %tmp40, label %oror27 [ + i32 1, label %if18 + i32 4, label %if33.critedge37 + i32 2, label %if33.critedge + ] + +if18: ; preds = %postinvoke + ret i32 1 + +oror27: ; preds = %postinvoke + %tmp31 = icmp eq i32 %tmp40, 3 ; [#uses=1] + %retval = select i1 %tmp31, i32 2, i32 0 ; [#uses=1] + ret i32 %retval + +if33.critedge: ; preds = %postinvoke + ret i32 2 + +if33.critedge37: ; preds = %postinvoke + ret i32 2 + +landingpad: ; preds = %entry + %0 = call i8* @llvm.eh.exception() ; [#uses=3] + %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=1] + %cond = icmp eq i32 %1, 1 ; [#uses=1] + br i1 %cond, label %catch, label %switchdefault + +catch: ; preds = %landingpad + %tmp3 = getelementptr i8* %0, i32 36 ; [#uses=1] + %tmp4 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp3, 1 ; <%"byte[]"> [#uses=1] + %tmp5 = call i32 @_adEq(%"byte[]" %tmp4, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str95, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=0] + ret i32 0 + +switchdefault: ; preds = %landingpad + call void @_d_eh_resume_unwind(i8* %0) + unreachable +} + +define fastcc i32 @_D5tango3net3ftp9FtpClient13FTPConnection4sizeMFAaE5tango3net3ftp9FtpClient9FtpFormatZk(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, i32 %format_arg) { +entry: + %__arrayArg131 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.type at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 29 ; [#uses=1] + %this.type = load void (%tango.net.ftp.FtpClient.FTPConnection*, i32)** %"this.type at vtbl", align 4 ; [#uses=1] + call fastcc void %this.type(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp9 = getelementptr [1 x %"byte[]"]* %__arrayArg131, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp9, align 8 + %tmp12 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str96, i32 0, i32 0) }, %"char[][]" %tmp12) + %tmp15 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp15, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str97, i32 0, i32 0) }) + %.rettmp.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 0 ; [#uses=1] + %tmp = load i32* %.rettmp.1.0, align 4 ; [#uses=1] + %.rettmp.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 1 ; [#uses=1] + %tmp54 = load i8** %.rettmp.1.1, align 4 ; [#uses=6] + br label %whilecond + +whilecond: ; preds = %endif, %entry + %end_pos.0 = phi i32 [ 0, %entry ], [ %tmp39, %endif ] ; [#uses=6] + %tmp22 = icmp ult i32 %end_pos.0, %tmp ; [#uses=1] + br i1 %tmp22, label %whilebody, label %endwhile + +whilebody: ; preds = %whilecond + %tmp26 = getelementptr i8* %tmp54, i32 %end_pos.0 ; [#uses=1] + %tmp27 = load i8* %tmp26 ; [#uses=1] + %tmp27.off = add i8 %tmp27, -48 ; [#uses=1] + %or.cond = icmp ugt i8 %tmp27.off, 9 ; [#uses=1] + br i1 %or.cond, label %endwhile, label %endif + +endif: ; preds = %whilebody + %tmp39 = add i32 %end_pos.0, 1 ; [#uses=1] + br label %whilecond + +endwhile: ; preds = %whilebody, %whilecond + %tmp4.i.i = icmp eq i32 %end_pos.0, 0 ; [#uses=1] + br i1 %tmp4.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %forcond.i.i + +forcond.i.i: ; preds = %forinc.i.i, %endwhile + %sign.1.i = phi i1 [ false, %endwhile ], [ %sign.0.i, %forinc.i.i ] ; [#uses=4] + %len.0.i.i = phi i32 [ %tmp33.i.i, %forinc.i.i ], [ %end_pos.0, %endwhile ] ; [#uses=3] + %p.0.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp54, %endwhile ] ; [#uses=6] + %c.0.in.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp54, %endwhile ] ; [#uses=1] + %c.0.i.i = load i8* %c.0.in.i.i ; [#uses=2] + %tmp8.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp8.i.i, label %endfor.i.i, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + switch i8 %c.0.i.i, label %endfor.i.i [ + i8 32, label %forinc.i.i + i8 9, label %forinc.i.i + i8 45, label %if20.i.i + i8 43, label %if26.i.i + ] + +if20.i.i: ; preds = %forbody.i.i + br label %forinc.i.i + +if26.i.i: ; preds = %forbody.i.i + br label %forinc.i.i + +forinc.i.i: ; preds = %if26.i.i, %if20.i.i, %forbody.i.i, %forbody.i.i + %sign.0.i = phi i1 [ false, %if26.i.i ], [ true, %if20.i.i ], [ %sign.1.i, %forbody.i.i ], [ %sign.1.i, %forbody.i.i ] ; [#uses=1] + %tmp30.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] + %tmp33.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + br label %forcond.i.i + +endfor.i.i: ; preds = %forbody.i.i, %forcond.i.i + %tmp37.i.i = icmp eq i8 %c.0.i.i, 48 ; [#uses=1] + %tmp39.i.i = icmp sgt i32 %len.0.i.i, 1 ; [#uses=1] + %or.cond.i.i = and i1 %tmp37.i.i, %tmp39.i.i ; [#uses=1] + br i1 %or.cond.i.i, label %if40.i.i, label %endif41.i.i + +if40.i.i: ; preds = %endfor.i.i + %tmp43.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] + %tmp44.i.i = load i8* %tmp43.i.i ; [#uses=1] + %tmp45.i.i = zext i8 %tmp44.i.i to i32 ; [#uses=1] + switch i32 %tmp45.i.i, label %endif41.i.i [ + i32 120, label %case46.i.i + i32 88, label %case46.i.i + i32 98, label %case51.i.i + i32 66, label %case51.i.i + i32 111, label %case56.i.i + i32 79, label %case56.i.i + ] + +case46.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp48.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] + br label %endif41.i.i + +case51.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp53.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] + br label %endif41.i.i + +case56.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp58.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] + br label %endif41.i.i + +endif41.i.i: ; preds = %case56.i.i, %case51.i.i, %case46.i.i, %if40.i.i, %endfor.i.i + %r.0.i.i = phi i32 [ 0, %if40.i.i ], [ 8, %case56.i.i ], [ 2, %case51.i.i ], [ 16, %case46.i.i ], [ 0, %endfor.i.i ] ; [#uses=2] + %p.2.i.i = phi i8* [ %tmp43.i.i, %if40.i.i ], [ %tmp58.i.i, %case56.i.i ], [ %tmp53.i.i, %case51.i.i ], [ %tmp48.i.i, %case46.i.i ], [ %p.0.i.i, %endfor.i.i ] ; [#uses=2] + %tmp63.i.i = icmp eq i32 %r.0.i.i, 0 ; [#uses=1] + br i1 %tmp63.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %if70.i.i + +if70.i.i: ; preds = %endif41.i.i + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i: ; preds = %if70.i.i, %endif41.i.i, %endwhile + %sign.2.i = phi i1 [ false, %endwhile ], [ %sign.1.i, %if70.i.i ], [ %sign.1.i, %endif41.i.i ] ; [#uses=1] + %radix.0.i = phi i32 [ 0, %endwhile ], [ %r.0.i.i, %if70.i.i ], [ 10, %endif41.i.i ] ; [#uses=2] + %p.1.i.i = phi i8* [ %p.2.i.i, %if70.i.i ], [ %tmp54, %endwhile ], [ %p.2.i.i, %endif41.i.i ] ; [#uses=1] + %tmp84.i.i = ptrtoint i8* %p.1.i.i to i32 ; [#uses=1] + %tmp85.i.i = ptrtoint i8* %tmp54 to i32 ; [#uses=1] + %tmp86.i.i = sub i32 %tmp84.i.i, %tmp85.i.i ; [#uses=2] + %tmp6.i = sub i32 %end_pos.0, %tmp86.i.i ; [#uses=1] + br label %foreachcond.i.i + +foreachcond.i.i: ; preds = %if55.i.i, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + %value.0.i.i = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp65.i.i, %if55.i.i ] ; [#uses=3] + %foreachkey.0.i.i = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp70.i.i, %if55.i.i ] ; [#uses=3] + %tmp3.i.i = icmp ult i32 %foreachkey.0.i.i, %tmp6.i ; [#uses=1] + br i1 %tmp3.i.i, label %foreachbody.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +foreachbody.i.i: ; preds = %foreachcond.i.i + %tmp5.sum.i = add i32 %tmp86.i.i, %foreachkey.0.i.i ; [#uses=1] + %tmp5.i.i = getelementptr i8* %tmp54, i32 %tmp5.sum.i ; [#uses=1] + %tmp6.i.i = load i8* %tmp5.i.i ; [#uses=6] + %tmp6.off84.i.i = add i8 %tmp6.i.i, -48 ; [#uses=1] + %or.cond.i28.i = icmp ugt i8 %tmp6.off84.i.i, 9 ; [#uses=1] + br i1 %or.cond.i28.i, label %else.i.i, label %endif.i.i + +else.i.i: ; preds = %foreachbody.i.i + %tmp6.off83.i.i = add i8 %tmp6.i.i, -97 ; [#uses=1] + %or.cond81.i.i = icmp ugt i8 %tmp6.off83.i.i, 25 ; [#uses=1] + br i1 %or.cond81.i.i, label %else24.i.i, label %if22.i.i + +if22.i.i: ; preds = %else.i.i + %tmp27.i.i = add i8 %tmp6.i.i, -39 ; [#uses=1] + br label %endif.i.i + +else24.i.i: ; preds = %else.i.i + %tmp6.off.i.i = add i8 %tmp6.i.i, -65 ; [#uses=1] + %or.cond82.i.i = icmp ugt i8 %tmp6.off.i.i, 25 ; [#uses=1] + br i1 %or.cond82.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, label %if39.i.i + +if39.i.i: ; preds = %else24.i.i + %tmp44.i29.i = add i8 %tmp6.i.i, -7 ; [#uses=1] + br label %endif.i.i + +endif.i.i: ; preds = %if39.i.i, %if22.i.i, %foreachbody.i.i + %c.0.i30.i = phi i8 [ %tmp27.i.i, %if22.i.i ], [ %tmp44.i29.i, %if39.i.i ], [ %tmp6.i.i, %foreachbody.i.i ] ; [#uses=1] + %tmp48.i31.i = zext i8 %c.0.i30.i to i32 ; [#uses=1] + %tmp49.i.i = add i32 %tmp48.i31.i, 208 ; [#uses=1] + %tmp52.i.i = and i32 %tmp49.i.i, 255 ; [#uses=2] + %tmp54.i.i = icmp ult i32 %tmp52.i.i, %radix.0.i ; [#uses=1] + br i1 %tmp54.i.i, label %if55.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +if55.i.i: ; preds = %endif.i.i + %tmp59.i.i = zext i32 %radix.0.i to i64 ; [#uses=1] + %tmp61.i.i = mul i64 %value.0.i.i, %tmp59.i.i ; [#uses=1] + %tmp64.i.i = zext i32 %tmp52.i.i to i64 ; [#uses=1] + %tmp65.i.i = add i64 %tmp61.i.i, %tmp64.i.i ; [#uses=1] + %tmp70.i.i = add i32 %foreachkey.0.i.i, 1 ; [#uses=1] + br label %foreachcond.i.i + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit: ; preds = %endif.i.i, %else24.i.i, %foreachcond.i.i + %negval.i = sub i64 0, %value.0.i.i ; [#uses=1] + %condtmp.0.i = select i1 %sign.2.i, i64 %negval.i, i64 %value.0.i.i ; [#uses=1] + %tmp49 = trunc i64 %condtmp.0.i to i32 ; [#uses=1] + ret i32 %tmp49 +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection4typeMFE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) { +entry: + %__arrayArg132 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %__arrayArg133 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = icmp eq i32 %format_arg, 0 ; [#uses=1] + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=2] + br i1 %tmp1, label %if, label %else + +if: ; preds = %entry + %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg132, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str99, i32 0, i32 0) }, %"byte[]"* %tmp6, align 8 + %tmp8 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str98, i32 0, i32 0) }, %"char[][]" %tmp8) + br label %endif + +else: ; preds = %entry + %tmp15 = getelementptr [1 x %"byte[]"]* %__arrayArg133, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str101, i32 0, i32 0) }, %"byte[]"* %tmp15, align 8 + %tmp17 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp15, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str100, i32 0, i32 0) }, %"char[][]" %tmp17) + br label %endif + +endif: ; preds = %else, %if + %tmp20 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp20, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str102, i32 0, i32 0) }) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection8modifiedMFAaZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %file_arg) { +entry: + %__arrayArg134 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] + %.rettmp18 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg134, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %file_arg, %"byte[]"* %tmp4, align 8 + %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str103, i32 0, i32 0) }, %"char[][]" %tmp7) + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str104, i32 0, i32 0) }) + %.rettmp.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 0 ; [#uses=1] + %tmp = load i32* %.rettmp.1.0, align 4 ; [#uses=1] + %.rettmp.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 1 ; [#uses=1] + %tmp27 = load i8** %.rettmp.1.1, align 4 ; [#uses=1] + %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parseTimeval at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 31 ; [#uses=1] + %this.parseTimeval = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseTimeval at vtbl", align 4 ; [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %tmp, 0 ; <%"byte[]"> [#uses=1] + %insert29 = insertvalue %"byte[]" %insert, i8* %tmp27, 1 ; <%"byte[]"> [#uses=1] + call fastcc void %this.parseTimeval(%tango.time.Time.Time* noalias nocapture sret %.rettmp18, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert29) + %tmp2234 = getelementptr %tango.time.Time.Time* %.rettmp18, i32 0, i32 0 ; [#uses=1] + %tmp36 = load i64* %tmp2234, align 8 ; [#uses=1] + %0 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] + store i64 %tmp36, i64* %0 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12parseTimevalMFAaZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %timeval_arg) { +entry: + %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %timeval_arg43 = extractvalue %"byte[]" %timeval_arg, 0 ; [#uses=1] + %timeval_arg44 = extractvalue %"byte[]" %timeval_arg, 1 ; [#uses=6] + %tmp1 = icmp ult i32 %timeval_arg43, 14 ; [#uses=1] + br i1 %tmp1, label %if, label %endif + +if: ; preds = %entry + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp2 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str106, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str105, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp7 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp7) + unreachable + +endif: ; preds = %entry + %1 = load %tango.time.chrono.Gregorian.Gregorian** @_D5tango4time6chrono9Gregorian9Gregorian7genericC5tango4time6chrono9Gregorian9Gregorian ; <%tango.time.chrono.Gregorian.Gregorian*> [#uses=2] + %tmp8 = bitcast %tango.time.chrono.Gregorian.Gregorian* %1 to %tango.time.chrono.Calendar.Calendar* ; <%tango.time.chrono.Calendar.Calendar*> [#uses=1] + %tmp9 = bitcast %tango.time.chrono.Gregorian.Gregorian* %1 to %tango.time.chrono.Calendar.Calendar.__vtbl** ; <%tango.time.chrono.Calendar.Calendar.__vtbl**> [#uses=1] + %tmp10 = load %tango.time.chrono.Calendar.Calendar.__vtbl** %tmp9 ; <%tango.time.chrono.Calendar.Calendar.__vtbl*> [#uses=1] + %"generic.toTime at vtbl" = getelementptr %tango.time.chrono.Calendar.Calendar.__vtbl* %tmp10, i32 0, i32 7 ; [#uses=1] + %generic.toTime = load void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32)** %"generic.toTime at vtbl", align 4 ; [#uses=1] + br label %foreachcond.i + +foreachcond.i: ; preds = %if.i, %endif + %value.0.i = phi i32 [ 0, %endif ], [ %tmp19.i, %if.i ] ; [#uses=2] + %foreachkey.0.i = phi i32 [ 0, %endif ], [ %tmp21.i, %if.i ] ; [#uses=3] + %tmp3.i = icmp ult i32 %foreachkey.0.i, 4 ; [#uses=1] + br i1 %tmp3.i, label %foreachbody.i, label %foreachcond.i125 + +foreachbody.i: ; preds = %foreachcond.i + %tmp5.i47 = getelementptr i8* %timeval_arg44, i32 %foreachkey.0.i ; [#uses=1] + %tmp6.i = load i8* %tmp5.i47 ; [#uses=2] + %tmp6.off.i = add i8 %tmp6.i, -48 ; [#uses=1] + %or.cond.i = icmp ugt i8 %tmp6.off.i, 9 ; [#uses=1] + br i1 %or.cond.i, label %foreachcond.i125, label %if.i + +if.i: ; preds = %foreachbody.i + %tmp15.i = mul i32 %value.0.i, 10 ; [#uses=1] + %tmp17.i = zext i8 %tmp6.i to i32 ; [#uses=1] + %tmp18.i = add i32 %tmp17.i, -48 ; [#uses=1] + %tmp19.i = add i32 %tmp15.i, %tmp18.i ; [#uses=1] + %tmp21.i = add i32 %foreachkey.0.i, 1 ; [#uses=1] + br label %foreachcond.i + +foreachcond.i125: ; preds = %if.i136, %foreachbody.i, %foreachcond.i + %value.0.i122 = phi i32 [ %tmp19.i134, %if.i136 ], [ 0, %foreachcond.i ], [ 0, %foreachbody.i ] ; [#uses=2] + %foreachkey.0.i123 = phi i32 [ %tmp21.i135, %if.i136 ], [ 0, %foreachcond.i ], [ 0, %foreachbody.i ] ; [#uses=3] + %tmp3.i124 = icmp ult i32 %foreachkey.0.i123, 2 ; [#uses=1] + br i1 %tmp3.i124, label %foreachbody.i130, label %foreachcond.i107 + +foreachbody.i130: ; preds = %foreachcond.i125 + %tmp18.sum = add i32 %foreachkey.0.i123, 4 ; [#uses=1] + %tmp5.i126 = getelementptr i8* %timeval_arg44, i32 %tmp18.sum ; [#uses=1] + %tmp6.i127 = load i8* %tmp5.i126 ; [#uses=2] + %tmp6.off.i128 = add i8 %tmp6.i127, -48 ; [#uses=1] + %or.cond.i129 = icmp ugt i8 %tmp6.off.i128, 9 ; [#uses=1] + br i1 %or.cond.i129, label %foreachcond.i107, label %if.i136 + +if.i136: ; preds = %foreachbody.i130 + %tmp15.i131 = mul i32 %value.0.i122, 10 ; [#uses=1] + %tmp17.i132 = zext i8 %tmp6.i127 to i32 ; [#uses=1] + %tmp18.i133 = add i32 %tmp17.i132, -48 ; [#uses=1] + %tmp19.i134 = add i32 %tmp15.i131, %tmp18.i133 ; [#uses=1] + %tmp21.i135 = add i32 %foreachkey.0.i123, 1 ; [#uses=1] + br label %foreachcond.i125 + +foreachcond.i107: ; preds = %if.i118, %foreachbody.i130, %foreachcond.i125 + %value.0.i104 = phi i32 [ %tmp19.i116, %if.i118 ], [ 0, %foreachcond.i125 ], [ 0, %foreachbody.i130 ] ; [#uses=2] + %foreachkey.0.i105 = phi i32 [ %tmp21.i117, %if.i118 ], [ 0, %foreachcond.i125 ], [ 0, %foreachbody.i130 ] ; [#uses=3] + %tmp3.i106 = icmp ult i32 %foreachkey.0.i105, 2 ; [#uses=1] + br i1 %tmp3.i106, label %foreachbody.i112, label %foreachcond.i89 + +foreachbody.i112: ; preds = %foreachcond.i107 + %tmp23.sum = add i32 %foreachkey.0.i105, 6 ; [#uses=1] + %tmp5.i108 = getelementptr i8* %timeval_arg44, i32 %tmp23.sum ; [#uses=1] + %tmp6.i109 = load i8* %tmp5.i108 ; [#uses=2] + %tmp6.off.i110 = add i8 %tmp6.i109, -48 ; [#uses=1] + %or.cond.i111 = icmp ugt i8 %tmp6.off.i110, 9 ; [#uses=1] + br i1 %or.cond.i111, label %foreachcond.i89, label %if.i118 + +if.i118: ; preds = %foreachbody.i112 + %tmp15.i113 = mul i32 %value.0.i104, 10 ; [#uses=1] + %tmp17.i114 = zext i8 %tmp6.i109 to i32 ; [#uses=1] + %tmp18.i115 = add i32 %tmp17.i114, -48 ; [#uses=1] + %tmp19.i116 = add i32 %tmp15.i113, %tmp18.i115 ; [#uses=1] + %tmp21.i117 = add i32 %foreachkey.0.i105, 1 ; [#uses=1] + br label %foreachcond.i107 + +foreachcond.i89: ; preds = %if.i100, %foreachbody.i112, %foreachcond.i107 + %value.0.i86 = phi i32 [ %tmp19.i98, %if.i100 ], [ 0, %foreachcond.i107 ], [ 0, %foreachbody.i112 ] ; [#uses=2] + %foreachkey.0.i87 = phi i32 [ %tmp21.i99, %if.i100 ], [ 0, %foreachcond.i107 ], [ 0, %foreachbody.i112 ] ; [#uses=3] + %tmp3.i88 = icmp ult i32 %foreachkey.0.i87, 2 ; [#uses=1] + br i1 %tmp3.i88, label %foreachbody.i94, label %foreachcond.i71 + +foreachbody.i94: ; preds = %foreachcond.i89 + %tmp28.sum = add i32 %foreachkey.0.i87, 8 ; [#uses=1] + %tmp5.i90 = getelementptr i8* %timeval_arg44, i32 %tmp28.sum ; [#uses=1] + %tmp6.i91 = load i8* %tmp5.i90 ; [#uses=2] + %tmp6.off.i92 = add i8 %tmp6.i91, -48 ; [#uses=1] + %or.cond.i93 = icmp ugt i8 %tmp6.off.i92, 9 ; [#uses=1] + br i1 %or.cond.i93, label %foreachcond.i71, label %if.i100 + +if.i100: ; preds = %foreachbody.i94 + %tmp15.i95 = mul i32 %value.0.i86, 10 ; [#uses=1] + %tmp17.i96 = zext i8 %tmp6.i91 to i32 ; [#uses=1] + %tmp18.i97 = add i32 %tmp17.i96, -48 ; [#uses=1] + %tmp19.i98 = add i32 %tmp15.i95, %tmp18.i97 ; [#uses=1] + %tmp21.i99 = add i32 %foreachkey.0.i87, 1 ; [#uses=1] + br label %foreachcond.i89 + +foreachcond.i71: ; preds = %if.i82, %foreachbody.i94, %foreachcond.i89 + %value.0.i68 = phi i32 [ %tmp19.i80, %if.i82 ], [ 0, %foreachcond.i89 ], [ 0, %foreachbody.i94 ] ; [#uses=2] + %foreachkey.0.i69 = phi i32 [ %tmp21.i81, %if.i82 ], [ 0, %foreachcond.i89 ], [ 0, %foreachbody.i94 ] ; [#uses=3] + %tmp3.i70 = icmp ult i32 %foreachkey.0.i69, 2 ; [#uses=1] + br i1 %tmp3.i70, label %foreachbody.i76, label %foreachcond.i53 + +foreachbody.i76: ; preds = %foreachcond.i71 + %tmp33.sum = add i32 %foreachkey.0.i69, 10 ; [#uses=1] + %tmp5.i72 = getelementptr i8* %timeval_arg44, i32 %tmp33.sum ; [#uses=1] + %tmp6.i73 = load i8* %tmp5.i72 ; [#uses=2] + %tmp6.off.i74 = add i8 %tmp6.i73, -48 ; [#uses=1] + %or.cond.i75 = icmp ugt i8 %tmp6.off.i74, 9 ; [#uses=1] + br i1 %or.cond.i75, label %foreachcond.i53, label %if.i82 + +if.i82: ; preds = %foreachbody.i76 + %tmp15.i77 = mul i32 %value.0.i68, 10 ; [#uses=1] + %tmp17.i78 = zext i8 %tmp6.i73 to i32 ; [#uses=1] + %tmp18.i79 = add i32 %tmp17.i78, -48 ; [#uses=1] + %tmp19.i80 = add i32 %tmp15.i77, %tmp18.i79 ; [#uses=1] + %tmp21.i81 = add i32 %foreachkey.0.i69, 1 ; [#uses=1] + br label %foreachcond.i71 + +foreachcond.i53: ; preds = %if.i64, %foreachbody.i76, %foreachcond.i71 + %value.0.i50 = phi i32 [ %tmp19.i62, %if.i64 ], [ 0, %foreachcond.i71 ], [ 0, %foreachbody.i76 ] ; [#uses=2] + %foreachkey.0.i51 = phi i32 [ %tmp21.i63, %if.i64 ], [ 0, %foreachcond.i71 ], [ 0, %foreachbody.i76 ] ; [#uses=3] + %tmp3.i52 = icmp ult i32 %foreachkey.0.i51, 2 ; [#uses=1] + br i1 %tmp3.i52, label %foreachbody.i58, label %_D5tango4text7convert7Integer11__T4atoiTaZ4atoiFAaiZk.exit65 + +foreachbody.i58: ; preds = %foreachcond.i53 + %tmp38.sum = add i32 %foreachkey.0.i51, 12 ; [#uses=1] + %tmp5.i54 = getelementptr i8* %timeval_arg44, i32 %tmp38.sum ; [#uses=1] + %tmp6.i55 = load i8* %tmp5.i54 ; [#uses=2] + %tmp6.off.i56 = add i8 %tmp6.i55, -48 ; [#uses=1] + %or.cond.i57 = icmp ugt i8 %tmp6.off.i56, 9 ; [#uses=1] + br i1 %or.cond.i57, label %_D5tango4text7convert7Integer11__T4atoiTaZ4atoiFAaiZk.exit65, label %if.i64 + +if.i64: ; preds = %foreachbody.i58 + %tmp15.i59 = mul i32 %value.0.i50, 10 ; [#uses=1] + %tmp17.i60 = zext i8 %tmp6.i55 to i32 ; [#uses=1] + %tmp18.i61 = add i32 %tmp17.i60, -48 ; [#uses=1] + %tmp19.i62 = add i32 %tmp15.i59, %tmp18.i61 ; [#uses=1] + %tmp21.i63 = add i32 %foreachkey.0.i51, 1 ; [#uses=1] + br label %foreachcond.i53 + +_D5tango4text7convert7Integer11__T4atoiTaZ4atoiFAaiZk.exit65: ; preds = %foreachbody.i58, %foreachcond.i53 + call fastcc void %generic.toTime(%tango.time.Time.Time* noalias nocapture sret %.rettmp, %tango.time.chrono.Calendar.Calendar* %tmp8, i32 %value.0.i, i32 %value.0.i122, i32 %value.0.i104, i32 %value.0.i86, i32 %value.0.i68, i32 %value.0.i50, i32 0) + %tmp4245 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] + %tmp = load i64* %tmp4245, align 8 ; [#uses=1] + %2 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] + store i64 %tmp, i64* %2 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection4noopMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str109, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str110, i32 0, i32 0) }) + ret void +} + +define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient13FTPConnection5mkdirMFAaZAa(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %__arrayArg136 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg136, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp4, align 8 + %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str111, i32 0, i32 0) }, %"char[][]" %tmp7) + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str112, i32 0, i32 0) }) + %tmp12 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=1] + %tmp13 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp12, i8* %tmp13, i32 12, i32 4) + %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parse257 at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 38 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)**> [#uses=1] + %this.parse257 = load %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.parse257 at vtbl", align 4 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*> [#uses=1] + %tmp18 = call fastcc %"byte[]" %this.parse257(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) ; <%"byte[]"> [#uses=1] + ret %"byte[]" %tmp18 +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection11getFeaturesMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %.frame.i = alloca %nest.splitLines, align 8 ; <%nest.splitLines*> [#uses=5] + %.rettmp.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] + %.rettmp8.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str113, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 37 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=2] + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp8, i8* %tmp9, i32 12, i32 4) + %tmp12 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp8, 1 ; <%"byte[]"> [#uses=1] + %tmp13 = call i32 @_adEq(%"byte[]" %tmp12, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str114, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp14 = icmp eq i32 %tmp13, 0 ; [#uses=1] + br i1 %tmp14, label %if, label %else + +if: ; preds = %entry + %tmp17 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] + %tmp18 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] + %.len = load i32* %tmp18 ; [#uses=1] + %tmp19 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] + %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp19 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] + %.tmp = bitcast %tango.net.ftp.FtpClient.FtpFeature* %.ptr to i8* ; [#uses=1] + call void @_d_delarray(i32 %.len, i8* %.tmp) + store %"FtpFeature[]" zeroinitializer, %"FtpFeature[]"* %tmp17 + ret void + +else: ; preds = %entry + %tmp20 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp21 = load %"byte[]"* %tmp20 ; <%"byte[]"> [#uses=4] + %count.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 0 ; [#uses=3] + %result.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1 ; <%"char[][]"*> [#uses=1] + store i32 0, i32* %count.i, align 8 + %src_arg8.i.i = extractvalue %"byte[]" %tmp21, 0 ; [#uses=1] + %src_arg9.i.i = extractvalue %"byte[]" %tmp21, 1 ; [#uses=1] + %0 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %src_arg8.i.i, i32* %0, align 8 + %.sret_arg10.1.i.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %src_arg9.i.i, i8** %.sret_arg10.1.i.i, align 4 + %tmp1.i = bitcast %nest.splitLines* %.frame.i to i8* ; [#uses=2] + %tmp2.i = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func.i = insertvalue %"int delegate(ref char[])" %tmp2.i, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody41MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp3.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, %"int delegate(ref char[])" %.func.i) ; [#uses=0] + %tmp4.i = load i32* %count.i, align 8 ; [#uses=2] + %.gc_mem.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_AAa6__initZ to %object.TypeInfo*), i32 %tmp4.i) ; [#uses=1] + %.gc_mem5.i = bitcast i8* %.gc_mem.i to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp6.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 0 ; [#uses=1] + store i32 %tmp4.i, i32* %tmp6.i + %tmp7.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 1 ; <%"byte[]"**> [#uses=1] + store %"byte[]"* %.gc_mem5.i, %"byte[]"** %tmp7.i + store i32 0, i32* %count.i, align 8 + %src_arg8.i15.i = extractvalue %"byte[]" %tmp21, 0 ; [#uses=1] + %src_arg9.i16.i = extractvalue %"byte[]" %tmp21, 1 ; [#uses=1] + %1 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %src_arg8.i15.i, i32* %1, align 8 + %.sret_arg10.1.i17.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %src_arg9.i16.i, i8** %.sret_arg10.1.i17.i, align 4 + %tmp11.i = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func12.i = insertvalue %"int delegate(ref char[])" %tmp11.i, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody42MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp13.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, %"int delegate(ref char[])" %.func12.i) ; [#uses=0] + %tmp14.i = load %"char[][]"* %result.i ; <%"char[][]"> [#uses=2] + %tmp22109 = extractvalue %"char[][]" %tmp14.i, 0 ; [#uses=2] + %tmp22110 = extractvalue %"char[][]" %tmp14.i, 1 ; <%"byte[]"*> [#uses=4] + %tmp27 = add i32 %tmp22109, -1 ; [#uses=3] + %.gc_mem = call noalias i8* @_d_newarrayiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D47TypeInfo_AS5tango3net3ftp9FtpClient10FtpFeature6__initZ to %object.TypeInfo*), i32 %tmp27) ; [#uses=2] + %.gc_mem28 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpFeature* ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] + %tmp29 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] + store i32 %tmp27, i32* %tmp29 + %tmp30 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=3] + store %tango.net.ftp.FtpClient.FtpFeature* %.gc_mem28, %tango.net.ftp.FtpClient.FtpFeature** %tmp30 + %tmp36 = bitcast i8* %.gc_mem to %"byte[]"* ; <%"byte[]"*> [#uses=1] + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str115, i32 0, i32 0) }, %"byte[]"* %tmp36 + br label %forcond + +forcond: ; preds = %forinc, %else + %i.0 = phi i32 [ 1, %else ], [ %tmp103, %forinc ] ; [#uses=9] + %tmp41 = icmp ult i32 %i.0, %tmp27 ; [#uses=1] + br i1 %tmp41, label %forbody, label %endfor + +forbody: ; preds = %forcond + %tmp45 = getelementptr %"byte[]"* %tmp22110, i32 %i.0 ; <%"byte[]"*> [#uses=1] + %tmp46 = load %"byte[]"* %tmp45 ; <%"byte[]"> [#uses=2] + %source_arg16.i = extractvalue %"byte[]" %tmp46, 0 ; [#uses=2] + %source_arg17.i = extractvalue %"byte[]" %tmp46, 1 ; [#uses=2] + %tmp2.i.i = getelementptr i8* %source_arg17.i, i32 -1 ; [#uses=1] + br label %forcond.i.i + +forcond.i.i: ; preds = %forbody.i.i, %forbody + %len.0.i.i = phi i32 [ %source_arg16.i, %forbody ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] + %p.0.i.i = phi i8* [ %tmp2.i.i, %forbody ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] + %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] + %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] + %tmp12.i.i = icmp eq i8 %tmp8.i.i, 32 ; [#uses=1] + br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i + +if.i.i: ; preds = %forbody.i.i + %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] + %tmp16.i.i = ptrtoint i8* %source_arg17.i to i32 ; [#uses=1] + %tmp17.i.i = sub i32 %tmp15.i.i, %tmp16.i.i ; [#uses=1] + br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + +_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit: ; preds = %if.i.i, %forcond.i.i + %tmp1318.i = phi i32 [ %tmp17.i.i, %if.i.i ], [ %source_arg16.i, %forcond.i.i ] ; [#uses=3] + %.ptr51 = load %tango.net.ftp.FtpClient.FtpFeature** %tmp30 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=2] + %tmp59 = getelementptr %"byte[]"* %tmp22110, i32 %i.0, i32 1 ; [#uses=2] + %.ptr60 = load i8** %tmp59 ; [#uses=1] + %tmp64 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr51, i32 %i.0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp1318.i, i32* %tmp64 + %tmp65 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr51, i32 %i.0, i32 0, i32 1 ; [#uses=1] + store i8* %.ptr60, i8** %tmp65 + %tmp70 = getelementptr %"byte[]"* %tmp22110, i32 %i.0, i32 0 ; [#uses=1] + %.len71 = load i32* %tmp70 ; [#uses=2] + %tmp72 = add i32 %.len71, -1 ; [#uses=1] + %tmp74 = icmp ult i32 %tmp1318.i, %tmp72 ; [#uses=1] + br i1 %tmp74, label %if75, label %forinc + +if75: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %.ptr80 = load %tango.net.ftp.FtpClient.FtpFeature** %tmp30 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=2] + %.ptr89 = load i8** %tmp59 ; [#uses=1] + %tmp91 = add i32 %tmp1318.i, 1 ; [#uses=2] + %tmp98 = getelementptr i8* %.ptr89, i32 %tmp91 ; [#uses=1] + %tmp99 = sub i32 %.len71, %tmp91 ; [#uses=1] + %tmp100 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr80, i32 %i.0, i32 1, i32 0 ; [#uses=1] + store i32 %tmp99, i32* %tmp100 + %tmp101 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr80, i32 %i.0, i32 1, i32 1 ; [#uses=1] + store i8* %tmp98, i8** %tmp101 + br label %forinc + +forinc: ; preds = %if75, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %tmp103 = add i32 %i.0, 1 ; [#uses=1] + br label %forcond + +endfor: ; preds = %forcond + %.tmp108 = bitcast %"byte[]"* %tmp22110 to i8* ; [#uses=1] + call void @_d_delarray(i32 %tmp22109, i8* %.tmp108) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection11sendCommandMFAaAAaXv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg, %"char[][]" %parameters_arg) { +entry: + %parameters_arg55 = extractvalue %"char[][]" %parameters_arg, 0 ; [#uses=1] + %parameters_arg56 = extractvalue %"char[][]" %parameters_arg, 1 ; <%"byte[]"*> [#uses=1] + %command_arg53 = extractvalue %"byte[]" %command_arg, 0 ; [#uses=1] + %command_arg54 = extractvalue %"byte[]" %command_arg, 1 ; [#uses=1] + br label %foreachcond + +foreachcond: ; preds = %foreachbody, %entry + %socketCommand.0.0 = phi i32 [ %command_arg53, %entry ], [ %tmp17, %foreachbody ] ; [#uses=6] + %socketCommand.1.0 = phi i8* [ %command_arg54, %entry ], [ %.gc_mem22, %foreachbody ] ; [#uses=2] + %foreachkey.0 = phi i32 [ 0, %entry ], [ %tmp28, %foreachbody ] ; [#uses=3] + %tmp4 = icmp ult i32 %foreachkey.0, %parameters_arg55 ; [#uses=1] + br i1 %tmp4, label %foreachbody, label %foreachend + +foreachbody: ; preds = %foreachcond + %tmp6 = getelementptr %"byte[]"* %parameters_arg56, i32 %foreachkey.0 ; <%"byte[]"*> [#uses=1] + %tmp7 = load %"byte[]"* %tmp6 ; <%"byte[]"> [#uses=2] + %tmp751 = extractvalue %"byte[]" %tmp7, 0 ; [#uses=2] + %tmp752 = extractvalue %"byte[]" %tmp7, 1 ; [#uses=1] + %tmp10 = add i32 %tmp751, 1 ; [#uses=3] + %.nongc_mem = alloca i8, i32 %tmp10, align 1 ; [#uses=3] + store i8 32, i8* %.nongc_mem, align 1 + %tmp13 = getelementptr i8* %.nongc_mem, i32 1 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp13, i8* %tmp752, i32 %tmp751, i32 1) + %tmp17 = add i32 %socketCommand.0.0, %tmp10 ; [#uses=2] + %.gc_mem22 = tail call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp17, i32 %socketCommand.0.0, i8* %socketCommand.1.0) ; [#uses=2] + %tmp23 = getelementptr i8* %.gc_mem22, i32 %socketCommand.0.0 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp23, i8* %.nongc_mem, i32 %tmp10, i32 1) + %tmp28 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +foreachend: ; preds = %foreachcond + %tmp31 = add i32 %socketCommand.0.0, 2 ; [#uses=2] + %.gc_mem36 = tail call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp31, i32 %socketCommand.0.0, i8* %socketCommand.1.0) ; [#uses=2] + %tmp37 = getelementptr i8* %.gc_mem36, i32 %socketCommand.0.0 ; [#uses=1] + %tmp3757 = bitcast i8* %tmp37 to i16* ; [#uses=1] + %tmp = load i16* bitcast ([3 x i8]* @.str117 to i16*), align 2 ; [#uses=1] + store i16 %tmp, i16* %tmp3757, align 1 + %tmp41 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet* ; <%tango.net.ftp.Telnet.Telnet*> [#uses=1] + %tmp42 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet.__vtbl** ; <%tango.net.ftp.Telnet.Telnet.__vtbl**> [#uses=1] + %tmp43 = load %tango.net.ftp.Telnet.Telnet.__vtbl** %tmp42 ; <%tango.net.ftp.Telnet.Telnet.__vtbl*> [#uses=1] + %"(cast(Telnet)this).sendData at vtbl" = getelementptr %tango.net.ftp.Telnet.Telnet.__vtbl* %tmp43, i32 0, i32 7 ; [#uses=1] + %"(cast(Telnet)this).sendData" = load void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")** %"(cast(Telnet)this).sendData at vtbl", align 4 ; [#uses=1] + %tmp49 = insertvalue %"byte[]" undef, i32 %tmp31, 0 ; <%"byte[]"> [#uses=1] + %tmp50 = insertvalue %"byte[]" %tmp49, i8* %.gc_mem36, 1 ; <%"byte[]"> [#uses=1] + tail call fastcc void %"(cast(Telnet)this).sendData"(%tango.net.ftp.Telnet.Telnet* %tmp41, %"byte[]" %tmp50) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFAaZS5tango3net3ftp9FtpClient11FtpResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %expected_code_arg) { +entry: + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %expected_code_arg26 = extractvalue %"byte[]" %expected_code_arg, 0 ; [#uses=1] + %expected_code_arg27 = extractvalue %"byte[]" %expected_code_arg, 1 ; [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 37 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=3] + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp4, i8* %tmp5, i32 12, i32 4) + %tmp12 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp4, 1 ; <%"byte[]"> [#uses=1] + %tmp13 = insertvalue %"byte[]" undef, i32 %expected_code_arg26, 0 ; <%"byte[]"> [#uses=1] + %tmp14 = insertvalue %"byte[]" %tmp13, i8* %expected_code_arg27, 1 ; <%"byte[]"> [#uses=1] + %tmp15 = call i32 @_adEq(%"byte[]" %tmp12, %"byte[]" %tmp14, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp16 = icmp eq i32 %tmp15, 0 ; [#uses=1] + br i1 %tmp16, label %if, label %endif + +if: ; preds = %entry + %tmp20 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp20, i32 0, i32 14 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] + call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) + br label %endif + +endif: ; preds = %if, %entry + %tmp22 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.sret_arg, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp22, i8* %tmp4, i32 12, i32 1) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFZS5tango3net3ftp9FtpClient11FtpResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp2 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=4] + %.rettmp6 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + call fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) + call fastcc void @_D5tango4time4Time8TimeSpan10fromMillisFlZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret %.rettmp2, i64 2500) + %tmp1.i = getelementptr %tango.time.Time.Time* %.rettmp2, i32 0, i32 0 ; [#uses=1] + %tmp2.i = load i64* %tmp1.i, align 8 ; [#uses=1] + %tmp4.i = mul i64 %tmp2.i, 10 ; [#uses=1] + %tmp1.i177 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] + %tmp3.i = load i64* %tmp1.i177, align 8 ; [#uses=1] + %tmp5.i = add i64 %tmp3.i, %tmp4.i ; [#uses=1] + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=6] + call void @llvm.memcpy.i32(i8* %tmp5, i8* getelementptr (%tango.net.ftp.FtpClient.FtpResponse* @_D5tango3net3ftp9FtpClient11FtpResponse6__initZ, i32 0, i32 0, i32 0), i32 12, i32 4) + br label %whilecond + +whilecond: ; preds = %andand153, %andand139, %endif, %entry + call fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp6) + %tmp1.i181 = getelementptr %tango.time.Time.Time* %.rettmp6, i32 0, i32 0 ; [#uses=1] + %tmp3.i183 = load i64* %tmp1.i181, align 8 ; [#uses=1] + %tmp5.i185 = icmp slt i64 %tmp3.i183, %tmp5.i ; [#uses=1] + br i1 %tmp5.i185, label %whilebody, label %endwhile + +whilebody: ; preds = %whilecond + %tmp10 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp11 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp10 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readLine at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp11, i32 0, i32 8 ; <%"byte[]" (%tango.net.ftp.Telnet.Telnet*)**> [#uses=1] + %this.readLine = load %"byte[]" (%tango.net.ftp.Telnet.Telnet*)** %"this.readLine at vtbl", align 4 ; <%"byte[]" (%tango.net.ftp.Telnet.Telnet*)*> [#uses=1] + %tmp13 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet* ; <%tango.net.ftp.Telnet.Telnet*> [#uses=1] + %tmp14 = call fastcc %"byte[]" %this.readLine(%tango.net.ftp.Telnet.Telnet* %tmp13) ; <%"byte[]"> [#uses=2] + %tmp14168 = extractvalue %"byte[]" %tmp14, 0 ; [#uses=9] + %tmp14169 = extractvalue %"byte[]" %tmp14, 1 ; [#uses=9] + %tmp16 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1, i32 0 ; [#uses=6] + %.len = load i32* %tmp16 ; [#uses=4] + %tmp17 = icmp eq i32 %.len, 0 ; [#uses=1] + br i1 %tmp17, label %if, label %else + +if: ; preds = %whilebody + %tmp20 = icmp ult i32 %tmp14168, 4 ; [#uses=1] + br i1 %tmp20, label %if21, label %endif22 + +if21: ; preds = %if + call void @llvm.memcpy.i32(i8* %tmp5, i8* getelementptr ([4 x i8]* @.str118, i32 0, i32 0), i32 3, i32 1) + br label %endwhile + +endif22: ; preds = %if + call void @llvm.memcpy.i32(i8* %tmp5, i8* %tmp14169, i32 3, i32 1) + %tmp34 = getelementptr i8* %tmp14169, i32 4 ; [#uses=1] + %tmp35 = add i32 %tmp14168, -4 ; [#uses=1] + store i32 %tmp35, i32* %tmp16 + %tmp37 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1, i32 1 ; [#uses=1] + store i8* %tmp34, i8** %tmp37 + br label %endif + +else: ; preds = %whilebody + %tmp41 = add i32 %.len, 1 ; [#uses=11] + %tmp44 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1, i32 1 ; [#uses=5] + %.ptr45 = load i8** %tmp44 ; [#uses=1] + %.gc_mem = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp41, i32 %.len, i8* %.ptr45) ; [#uses=5] + %tmp46 = getelementptr i8* %.gc_mem, i32 %.len ; [#uses=1] + store i8 10, i8* %tmp46, align 1 + store i32 %tmp41, i32* %tmp16 + store i8* %.gc_mem, i8** %tmp44 + %tmp51 = icmp ugt i32 %tmp14168, 4 ; [#uses=1] + br i1 %tmp51, label %andand, label %else65 + +andand: ; preds = %else + %tmp59 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp14169, 1 ; <%"byte[]"> [#uses=1] + %tmp60 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp5, 1 ; <%"byte[]"> [#uses=1] + %tmp61 = call i32 @_adEq(%"byte[]" %tmp59, %"byte[]" %tmp60, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp62 = icmp eq i32 %tmp61, 0 ; [#uses=1] + br i1 %tmp62, label %else65, label %if63 + +if63: ; preds = %andand + %tmp71 = getelementptr i8* %tmp14169, i32 4 ; [#uses=1] + %tmp72 = add i32 %tmp14168, -4 ; [#uses=2] + %tmp75 = add i32 %tmp41, %tmp72 ; [#uses=2] + %.gc_mem80 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp75, i32 %tmp41, i8* %.gc_mem) ; [#uses=2] + %tmp81 = getelementptr i8* %.gc_mem80, i32 %tmp41 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp81, i8* %tmp71, i32 %tmp72, i32 1) + store i32 %tmp75, i32* %tmp16 + store i8* %.gc_mem80, i8** %tmp44 + br label %endif + +else65: ; preds = %andand, %else + %tmp87 = icmp ugt i32 %tmp14168, 2 ; [#uses=1] + br i1 %tmp87, label %andand88, label %else99 + +andand88: ; preds = %else65 + %tmp93 = load i8* %tmp14169 ; [#uses=1] + %tmp95 = icmp eq i8 %tmp93, 32 ; [#uses=1] + br i1 %tmp95, label %if97, label %else99 + +if97: ; preds = %andand88 + %tmp105 = getelementptr i8* %tmp14169, i32 1 ; [#uses=1] + %tmp106 = add i32 %tmp14168, -1 ; [#uses=2] + %tmp109 = add i32 %tmp41, %tmp106 ; [#uses=2] + %.gc_mem114 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp109, i32 %tmp41, i8* %.gc_mem) ; [#uses=2] + %tmp115 = getelementptr i8* %.gc_mem114, i32 %tmp41 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp115, i8* %tmp105, i32 %tmp106, i32 1) + store i32 %tmp109, i32* %tmp16 + store i8* %.gc_mem114, i8** %tmp44 + br label %endif + +else99: ; preds = %andand88, %else65 + %tmp124 = add i32 %tmp41, %tmp14168 ; [#uses=2] + %.gc_mem129 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp124, i32 %tmp41, i8* %.gc_mem) ; [#uses=2] + %tmp132 = getelementptr i8* %.gc_mem129, i32 %tmp41 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp132, i8* %tmp14169, i32 %tmp14168, i32 1) + store i32 %tmp124, i32* %tmp16 + store i8* %.gc_mem129, i8** %tmp44 + br label %endif + +endif: ; preds = %else99, %if97, %if63, %endif22 + %tmp138 = icmp ult i32 %tmp14168, 4 ; [#uses=1] + br i1 %tmp138, label %whilecond, label %andand139 + +andand139: ; preds = %endif + %tmp148 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp14169, 1 ; <%"byte[]"> [#uses=1] + %tmp149 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp5, 1 ; <%"byte[]"> [#uses=1] + %tmp150 = call i32 @_adEq(%"byte[]" %tmp148, %"byte[]" %tmp149, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp151 = icmp eq i32 %tmp150, 0 ; [#uses=1] + br i1 %tmp151, label %whilecond, label %andand153 + +andand153: ; preds = %andand139 + %tmp157 = getelementptr i8* %tmp14169, i32 3 ; [#uses=1] + %tmp158 = load i8* %tmp157 ; [#uses=1] + %tmp160 = icmp eq i8 %tmp158, 32 ; [#uses=1] + br i1 %tmp160, label %endwhile, label %whilecond + +endwhile: ; preds = %andand153, %if21, %whilecond + %tmp165 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.sret_arg, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp165, i8* %tmp5, i32 12, i32 1) + ret void +} + +define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient13FTPConnection8parse257MFS5tango3net3ftp9FtpClient11FtpResponseZAa(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response_arg) { +entry: + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response_arg, i32 0, i32 1, i32 0 ; [#uses=3] + %.len = load i32* %tmp1 ; [#uses=2] + %.gc_mem = tail call noalias i8* @_d_newarrayiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %.len) ; [#uses=3] + %.len6 = load i32* %tmp1 ; [#uses=1] + %tmp7 = icmp ugt i32 %.len6, 2 ; [#uses=1] + br i1 %tmp7, label %whilecond, label %if + +if: ; preds = %entry + %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp9 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 14 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] + tail call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response_arg) + br label %whilecond + +whilecond: ; preds = %endif25, %if, %entry + %pos.1 = phi i32 [ 1, %if ], [ %tmp70, %endif25 ], [ 1, %entry ] ; [#uses=4] + %len.1 = phi i32 [ 0, %if ], [ %len.0, %endif25 ], [ 0, %entry ] ; [#uses=5] + %.len14 = load i32* %tmp1 ; [#uses=2] + %tmp16 = icmp ult i32 %pos.1, %.len14 ; [#uses=1] + br i1 %tmp16, label %whilebody, label %endwhile + +whilebody: ; preds = %whilecond + %tmp18 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response_arg, i32 0, i32 1, i32 1 ; [#uses=1] + %.ptr = load i8** %tmp18 ; [#uses=2] + %tmp20 = getelementptr i8* %.ptr, i32 %pos.1 ; [#uses=1] + %tmp21 = load i8* %tmp20 ; [#uses=2] + %tmp23 = icmp eq i8 %tmp21, 34 ; [#uses=1] + br i1 %tmp23, label %if24, label %else + +if24: ; preds = %whilebody + %tmp27 = add i32 %pos.1, 1 ; [#uses=3] + %tmp31 = icmp eq i32 %tmp27, %.len14 ; [#uses=1] + br i1 %tmp31, label %endwhile, label %endif33 + +endif33: ; preds = %if24 + %tmp39 = getelementptr i8* %.ptr, i32 %tmp27 ; [#uses=1] + %tmp40 = load i8* %tmp39 ; [#uses=2] + %tmp42 = icmp eq i8 %tmp40, 34 ; [#uses=1] + br i1 %tmp42, label %if43, label %endwhile + +if43: ; preds = %endif33 + %tmp50 = getelementptr i8* %.gc_mem, i32 %len.1 ; [#uses=1] + store i8 %tmp40, i8* %tmp50 + br label %endif25 + +else: ; preds = %whilebody + %tmp62 = getelementptr i8* %.gc_mem, i32 %len.1 ; [#uses=1] + store i8 %tmp21, i8* %tmp62 + br label %endif25 + +endif25: ; preds = %else, %if43 + %pos.0 = phi i32 [ %tmp27, %if43 ], [ %pos.1, %else ] ; [#uses=1] + %len.0 = add i32 %len.1, 1 ; [#uses=1] + %tmp70 = add i32 %pos.0, 1 ; [#uses=1] + br label %whilecond + +endwhile: ; preds = %endif33, %if24, %whilecond + %.gc_mem76 = tail call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %len.1, i32 %.len, i8* %.gc_mem) ; [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %len.1, 0 ; <%"byte[]"> [#uses=1] + %insert82 = insertvalue %"byte[]" %insert, i8* %.gc_mem76, 1 ; <%"byte[]"> [#uses=1] + ret %"byte[]" %insert82 +} + +define fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp9FtpClient13FTPConnection13getDataSocketMFZC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %tmp63207 = alloca [64 x i8], align 1 ; <[64 x i8]*> [#uses=1] + %__arrayArg139 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %__arrayArg138 = alloca [3 x %"byte[]"], align 8 ; <[3 x %"byte[]"]*> [#uses=3] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp145208 = alloca [64 x i8], align 1 ; <[64 x i8]*> [#uses=1] + %foo = alloca [20 x i8], align 1 ; <[20 x i8]*> [#uses=12] + %__arrayArg140 = alloca [7 x %"byte[]"], align 8 ; <[7 x %"byte[]"]*> [#uses=7] + %__arrayArg141 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp204 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp145208.sub = getelementptr [64 x i8]* %tmp145208, i32 0, i32 0 ; [#uses=1] + %tmp63207.sub = getelementptr [64 x i8]* %tmp63207, i32 0, i32 0 ; [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp2 = load %tango.net.SocketConduit.SocketConduit** %tmp1 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp3 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp2, null ; [#uses=1] + br i1 %tmp3, label %endif, label %if + +if: ; preds = %entry + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp5 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp2) + br label %endif + +endif: ; preds = %if, %entry + %tmp13 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] + %tmp14 = load i32* %tmp13 ; [#uses=1] + switch i32 %tmp14, label %default15 [ + i32 1, label %endif.case_crit_edge + i32 0, label %case25 + ] + +endif.case_crit_edge: ; preds = %endif + %tmp21.pre = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + br label %case + +default15: ; preds = %endif + %tmp17 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp17 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 5 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] + call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 23, i8* getelementptr ([24 x i8]* @.str120, i32 0, i32 0) }) + br label %case + +case: ; preds = %default15, %endif.case_crit_edge + %tmp21.pre-phi = phi %tango.net.ftp.FtpClient.FTPConnection.__vtbl** [ %tmp21.pre, %endif.case_crit_edge ], [ %tmp17, %default15 ] ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp22 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp21.pre-phi ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.connectPassive at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp22, i32 0, i32 40 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)**> [#uses=1] + %this.connectPassive = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.connectPassive at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*> [#uses=1] + %tmp24 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.connectPassive(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + ret %tango.net.SocketConduit.SocketConduit* %tmp24 + +case25: ; preds = %endif + %tmp28 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 1 ; <%tango.net.Socket.Address**> [#uses=1] + %tmp29 = load %tango.net.Socket.Address** %tmp28 ; <%tango.net.Socket.Address*> [#uses=1] + %tmp30 = bitcast %tango.net.Socket.Address* %tmp29 to %object.Object* ; <%object.Object*> [#uses=1] + %tmp31 = call %object.Object* @_d_dynamic_cast(%object.Object* %tmp30, %object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) nounwind readonly ; <%object.Object*> [#uses=3] + %tmp32 = bitcast %object.Object* %tmp31 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=8] + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net13SocketConduit13SocketConduit7__ClassZ) ; [#uses=5] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.SocketConduit.SocketConduit* ; <%tango.net.SocketConduit.SocketConduit*> [#uses=4] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.SocketConduit.SocketConduit.__vtbl** ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=3] + store %tango.net.SocketConduit.SocketConduit.__vtbl* @_D5tango3net13SocketConduit13SocketConduit6__vtblZ, %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp33 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp33, i8* bitcast (%15** getelementptr (%tango.net.SocketConduit.SocketConduit* bitcast (%23* @_D5tango3net13SocketConduit13SocketConduit6__initZ to %tango.net.SocketConduit.SocketConduit*), i32 0, i32 2) to i8*), i32 40, i32 1) + %tmp1.i.i.i = getelementptr i8* %.newclass_gc_alloc, i32 28 ; [#uses=1] + %1 = bitcast i8* %tmp1.i.i.i to %tango.net.Socket.Socket** ; <%tango.net.Socket.Socket**> [#uses=1] + %.newclass_gc_alloc.i.i.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket6Socket7__ClassZ) ; [#uses=7] + %.newclass_gc.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i to %tango.net.Socket.Socket* ; <%tango.net.Socket.Socket*> [#uses=2] + %vtbl.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i to %tango.net.Socket.Socket.__vtbl** ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + store %tango.net.Socket.Socket.__vtbl* @_D5tango3net6Socket6Socket6__vtblZ, %tango.net.Socket.Socket.__vtbl** %vtbl.i.i.i + %monitor.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 4 ; [#uses=1] + %2 = bitcast i8* %monitor.i.i.i to i8** ; [#uses=1] + store i8* null, i8** %2 + %tmp2.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i.i.i, i8* bitcast (i32* getelementptr (%tango.net.Socket.Socket* bitcast (%25* @_D5tango3net6Socket6Socket6__initZ to %tango.net.Socket.Socket*), i32 0, i32 2) to i8*), i32 16, i32 1) + %tmp1.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 12 ; [#uses=1] + %3 = bitcast i8* %tmp1.i.i.i.i to i32* ; [#uses=1] + store i32 1, i32* %3 + %tmp4.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 16 ; [#uses=1] + %4 = bitcast i8* %tmp4.i.i.i.i to i32* ; [#uses=1] + store i32 2, i32* %4 + %tmp7.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 20 ; [#uses=1] + %5 = bitcast i8* %tmp7.i.i.i.i to i32* ; [#uses=1] + store i32 6, i32* %5 + call fastcc void @_D5tango3net6Socket6Socket10initializeMFT5tango3net6Socket8socket_tZv(%tango.net.Socket.Socket* %.newclass_gc.i.i.i, i32 -1) + store %tango.net.Socket.Socket* %.newclass_gc.i.i.i, %tango.net.Socket.Socket** %1 + %tmp40 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"listener.bind at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp40, i32 0, i32 19 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)**> [#uses=1] + %listener.bind = load %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)** %"listener.bind at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*> [#uses=1] + %tmp44 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 2 ; <%tango.net.Socket.Address**> [#uses=1] + %tmp45 = load %tango.net.Socket.Address** %tmp44 ; <%tango.net.Socket.Address*> [#uses=1] + %tmp46 = call fastcc %tango.net.SocketConduit.SocketConduit* %listener.bind(%tango.net.SocketConduit.SocketConduit* %.newclass_gc, %tango.net.Socket.Address* %tmp45) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=0] + %tmp49 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"listener.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp49, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %listener.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"listener.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp51 = call fastcc %tango.net.Socket.Socket* %listener.socket(%tango.net.SocketConduit.SocketConduit* %.newclass_gc) ; <%tango.net.Socket.Socket*> [#uses=2] + %tmp52 = getelementptr %tango.net.Socket.Socket* %tmp51, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp53 = load %tango.net.Socket.Socket.__vtbl** %tmp52 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"listener.socket().listen at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp53, i32 0, i32 13 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)**> [#uses=1] + %"listener.socket().listen" = load %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)** %"listener.socket().listen at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*> [#uses=1] + %tmp55 = call fastcc %tango.net.Socket.Socket* %"listener.socket().listen"(%tango.net.Socket.Socket* %tmp51, i32 32) ; <%tango.net.Socket.Socket*> [#uses=0] + %tmp57 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=5] + %tmp58 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.is_supported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp58, i32 0, i32 42 ; [#uses=1] + %this.is_supported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.is_supported at vtbl", align 4 ; [#uses=1] + %tmp60 = call fastcc i1 %this.is_supported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str122, i32 0, i32 0) }) ; [#uses=1] + br i1 %tmp60, label %if61, label %else + +if61: ; preds = %case25 + %tmp66 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp66, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp68 = getelementptr [1 x %"byte[]"]* %__arrayArg139, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + %tmp70 = insertvalue %"byte[]" { i32 64, i8* undef }, i8* %tmp63207.sub, 1 ; <%"byte[]"> [#uses=1] + %tmp71 = getelementptr [3 x %"byte[]"]* %__arrayArg138, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" { i32 9, i8* getelementptr ([10 x i8]* @.str124, i32 0, i32 0) }, %"byte[]"* %tmp71, align 8 + %tmp72 = getelementptr [3 x %"byte[]"]* %__arrayArg138, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp74 = bitcast %object.Object* %tmp31 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=2] + %tmp75 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp74 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.toAddrString at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp75, i32 0, i32 10 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)**> [#uses=1] + %data_addr.toAddrString = load %"byte[]" (%tango.net.Socket.IPv4Address*)** %"data_addr.toAddrString at vtbl", align 4 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)*> [#uses=1] + %tmp77 = call fastcc %"byte[]" %data_addr.toAddrString(%tango.net.Socket.IPv4Address* %tmp32) ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp77, %"byte[]"* %tmp72, align 8 + %tmp78 = getelementptr [3 x %"byte[]"]* %__arrayArg138, i32 0, i32 2 ; <%"byte[]"*> [#uses=1] + %tmp81 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp74 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.toPortString at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp81, i32 0, i32 11 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)**> [#uses=1] + %data_addr.toPortString = load %"byte[]" (%tango.net.Socket.IPv4Address*)** %"data_addr.toPortString at vtbl", align 4 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)*> [#uses=1] + %tmp83 = call fastcc %"byte[]" %data_addr.toPortString(%tango.net.Socket.IPv4Address* %tmp32) ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp83, %"byte[]"* %tmp78, align 8 + %tmp85 = insertvalue %"char[][]" { i32 3, %"byte[]"* undef }, %"byte[]"* %tmp71, 1 ; <%"char[][]"> [#uses=1] + %tmp86 = call fastcc %"byte[]" @_D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa(%"byte[]" %tmp70, %"char[][]" %tmp85) ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp86, %"byte[]"* %tmp68, align 8 + %tmp88 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp68, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str123, i32 0, i32 0) }, %"char[][]" %tmp88) + %tmp91 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp91, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str125, i32 0, i32 0) }) + ret %tango.net.SocketConduit.SocketConduit* %.newclass_gc + +else: ; preds = %case25 + %tmp94 = bitcast %object.Object* %tmp31 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=6] + %tmp95 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.addr at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp95, i32 0, i32 9 ; [#uses=1] + %data_addr.addr = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl", align 4 ; [#uses=1] + %tmp97 = call fastcc i32 %data_addr.addr(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] + %tmp98 = lshr i32 %tmp97, 24 ; [#uses=1] + %tmp102 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.addr at vtbl103" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp102, i32 0, i32 9 ; [#uses=1] + %data_addr.addr105 = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl103", align 4 ; [#uses=1] + %tmp106 = call fastcc i32 %data_addr.addr105(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] + %tmp107 = lshr i32 %tmp106, 16 ; [#uses=1] + %tmp108 = and i32 %tmp107, 255 ; [#uses=1] + %tmp111 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.addr at vtbl112" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp111, i32 0, i32 9 ; [#uses=1] + %data_addr.addr114 = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl112", align 4 ; [#uses=1] + %tmp115 = call fastcc i32 %data_addr.addr114(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] + %tmp116 = lshr i32 %tmp115, 8 ; [#uses=1] + %tmp117 = and i32 %tmp116, 255 ; [#uses=1] + %tmp120 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.addr at vtbl121" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp120, i32 0, i32 9 ; [#uses=1] + %data_addr.addr123 = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl121", align 4 ; [#uses=1] + %tmp124 = call fastcc i32 %data_addr.addr123(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] + %tmp126 = and i32 %tmp124, 255 ; [#uses=1] + %tmp129 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.port at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp129, i32 0, i32 8 ; [#uses=1] + %data_addr.port = load i16 (%tango.net.Socket.IPv4Address*)** %"data_addr.port at vtbl", align 4 ; [#uses=1] + %tmp131 = call fastcc zeroext i16 %data_addr.port(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] + %tmp132 = zext i16 %tmp131 to i32 ; [#uses=1] + %tmp133210 = lshr i32 %tmp132, 8 ; [#uses=1] + %tmp137 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"data_addr.port at vtbl138" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp137, i32 0, i32 8 ; [#uses=1] + %data_addr.port140 = load i16 (%tango.net.Socket.IPv4Address*)** %"data_addr.port at vtbl138", align 4 ; [#uses=1] + %tmp141 = call fastcc zeroext i16 %data_addr.port140(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] + %tmp142 = zext i16 %tmp141 to i32 ; [#uses=1] + %tmp144 = and i32 %tmp142, 255 ; [#uses=1] + %tmp147 = insertvalue %"byte[]" { i32 64, i8* undef }, i8* %tmp145208.sub, 1 ; <%"byte[]"> [#uses=1] + %tmp148 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" { i32 17, i8* getelementptr ([18 x i8]* @.str126, i32 0, i32 0) }, %"byte[]"* %tmp148, align 8 + %tmp149 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp49.i = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i = extractvalue %"byte[]" %tmp49.i, 1 ; [#uses=1] + %tmp52.i = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i = getelementptr [20 x i8]* %foo, i32 0, i32 3 ; [#uses=1] + br i1 false, label %dowhile82.i, label %if59.i + +if59.i: ; preds = %else + br label %dowhile.i + +dowhile.i: ; preds = %andand.i, %if59.i + %p.0.i = phi i8* [ %tmp56.i, %if59.i ], [ %tmp65.i, %andand.i ] ; [#uses=1] + %v.0.i = phi i32 [ %tmp98, %if59.i ], [ %tmp75.i, %andand.i ] ; [#uses=2] + %len.0.i = phi i32 [ 3, %if59.i ], [ %tmp78.i, %andand.i ] ; [#uses=3] + %tmp65.i = getelementptr i8* %p.0.i, i32 -1 ; [#uses=2] + %tmp68.i = urem i32 %v.0.i, %tmp52.i ; [#uses=1] + %tmp71.i = getelementptr i8* %tmp49178.i, i32 %tmp68.i ; [#uses=1] + %tmp72.i = load i8* %tmp71.i ; [#uses=1] + store i8 %tmp72.i, i8* %tmp65.i + %tmp75.i = udiv i32 %v.0.i, %tmp52.i ; [#uses=2] + %tmp76.i = icmp eq i32 %tmp75.i, 0 ; [#uses=1] + br i1 %tmp76.i, label %condtrue.i, label %andand.i + +andand.i: ; preds = %dowhile.i + %tmp78.i = add i32 %len.0.i, -1 ; [#uses=2] + %tmp79.i = icmp eq i32 %len.0.i, 1 ; [#uses=1] + br i1 %tmp79.i, label %condtrue.i, label %dowhile.i + +dowhile82.i: ; preds = %andand100.i, %else + br i1 undef, label %condtrue.i, label %andand100.i + +andand100.i: ; preds = %dowhile82.i + br i1 undef, label %condtrue.i, label %dowhile82.i + +condtrue.i: ; preds = %andand100.i, %dowhile82.i, %andand.i, %dowhile.i + %len.1.i = phi i32 [ %tmp78.i, %andand.i ], [ %len.0.i, %dowhile.i ], [ undef, %andand100.i ], [ undef, %dowhile82.i ] ; [#uses=2] + %tmp112.i = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i = extractvalue %"byte[]" %tmp112.i, 0 ; [#uses=3] + %tmp117.i = icmp ugt i32 %len.1.i, %condtmp.0175.i ; [#uses=1] + br i1 %tmp117.i, label %if118.i, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +if118.i: ; preds = %condtrue.i + %condtmp.0176.i = extractvalue %"byte[]" %tmp112.i, 1 ; [#uses=1] + %tmp123.i = add i32 %condtmp.0175.i, 1 ; [#uses=1] + %tmp124.i = sub i32 %len.1.i, %tmp123.i ; [#uses=2] + %tmp156.i = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp124.i ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i, i8* %condtmp.0176.i, i32 %condtmp.0175.i, i32 1) + %tmp170.i = sub i32 3, %tmp124.i ; [#uses=1] + %tmp171.i = insertvalue %"byte[]" undef, i32 %tmp170.i, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i = insertvalue %"byte[]" %tmp171.i, i8* %tmp156.i, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit: ; preds = %if118.i, %condtrue.i + %tmp6.i.i408 = phi %"byte[]" [ %tmp172.i, %if118.i ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i.i408, %"byte[]"* %tmp149, align 8 + %tmp155 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 2 ; <%"byte[]"*> [#uses=1] + %tmp49.i423 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i424 = extractvalue %"byte[]" %tmp49.i423, 1 ; [#uses=1] + %tmp52.i426 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i427 = getelementptr [20 x i8]* %foo, i32 0, i32 6 ; [#uses=1] + br i1 false, label %dowhile82.i456, label %if59.i431 + +if59.i431: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + br label %dowhile.i441 + +dowhile.i441: ; preds = %andand.i444, %if59.i431 + %p.0.i432 = phi i8* [ %tmp56.i427, %if59.i431 ], [ %tmp65.i435, %andand.i444 ] ; [#uses=1] + %v.0.i433 = phi i32 [ %tmp108, %if59.i431 ], [ %tmp75.i439, %andand.i444 ] ; [#uses=2] + %len.0.i434 = phi i32 [ 3, %if59.i431 ], [ %tmp78.i442, %andand.i444 ] ; [#uses=3] + %tmp65.i435 = getelementptr i8* %p.0.i432, i32 -1 ; [#uses=2] + %tmp68.i436 = urem i32 %v.0.i433, %tmp52.i426 ; [#uses=1] + %tmp71.i437 = getelementptr i8* %tmp49178.i424, i32 %tmp68.i436 ; [#uses=1] + %tmp72.i438 = load i8* %tmp71.i437 ; [#uses=1] + store i8 %tmp72.i438, i8* %tmp65.i435 + %tmp75.i439 = udiv i32 %v.0.i433, %tmp52.i426 ; [#uses=2] + %tmp76.i440 = icmp eq i32 %tmp75.i439, 0 ; [#uses=1] + br i1 %tmp76.i440, label %condtrue.i466, label %andand.i444 + +andand.i444: ; preds = %dowhile.i441 + %tmp78.i442 = add i32 %len.0.i434, -1 ; [#uses=2] + %tmp79.i443 = icmp eq i32 %len.0.i434, 1 ; [#uses=1] + br i1 %tmp79.i443, label %condtrue.i466, label %dowhile.i441 + +dowhile82.i456: ; preds = %andand100.i459, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + br i1 undef, label %condtrue.i466, label %andand100.i459 + +andand100.i459: ; preds = %dowhile82.i456 + br i1 undef, label %condtrue.i466, label %dowhile82.i456 + +condtrue.i466: ; preds = %andand100.i459, %dowhile82.i456, %andand.i444, %dowhile.i441 + %len.1.i461 = phi i32 [ %tmp78.i442, %andand.i444 ], [ %len.0.i434, %dowhile.i441 ], [ undef, %andand100.i459 ], [ undef, %dowhile82.i456 ] ; [#uses=2] + %tmp112.i465 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i468 = extractvalue %"byte[]" %tmp112.i465, 0 ; [#uses=3] + %tmp117.i470 = icmp ugt i32 %len.1.i461, %condtmp.0175.i468 ; [#uses=1] + br i1 %tmp117.i470, label %if118.i474, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 + +if118.i474: ; preds = %condtrue.i466 + %condtmp.0176.i469 = extractvalue %"byte[]" %tmp112.i465, 1 ; [#uses=1] + %tmp123.i472 = add i32 %condtmp.0175.i468, 1 ; [#uses=1] + %tmp124.i473 = sub i32 %len.1.i461, %tmp123.i472 ; [#uses=2] + %tmp157.sum788 = add i32 %tmp124.i473, 3 ; [#uses=1] + %tmp156.i476 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp157.sum788 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i476, i8* %condtmp.0176.i469, i32 %condtmp.0175.i468, i32 1) + %tmp170.i477 = sub i32 3, %tmp124.i473 ; [#uses=1] + %tmp171.i478 = insertvalue %"byte[]" undef, i32 %tmp170.i477, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i479 = insertvalue %"byte[]" %tmp171.i478, i8* %tmp156.i476, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482: ; preds = %if118.i474, %condtrue.i466 + %tmp6.i.i248483 = phi %"byte[]" [ %tmp172.i479, %if118.i474 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i466 ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i.i248483, %"byte[]"* %tmp155, align 8 + %tmp161 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 3 ; <%"byte[]"*> [#uses=1] + %tmp49.i498 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i499 = extractvalue %"byte[]" %tmp49.i498, 1 ; [#uses=1] + %tmp52.i501 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i502 = getelementptr [20 x i8]* %foo, i32 0, i32 9 ; [#uses=1] + br i1 false, label %dowhile82.i531, label %if59.i506 + +if59.i506: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 + br label %dowhile.i516 + +dowhile.i516: ; preds = %andand.i519, %if59.i506 + %p.0.i507 = phi i8* [ %tmp56.i502, %if59.i506 ], [ %tmp65.i510, %andand.i519 ] ; [#uses=1] + %v.0.i508 = phi i32 [ %tmp117, %if59.i506 ], [ %tmp75.i514, %andand.i519 ] ; [#uses=2] + %len.0.i509 = phi i32 [ 3, %if59.i506 ], [ %tmp78.i517, %andand.i519 ] ; [#uses=3] + %tmp65.i510 = getelementptr i8* %p.0.i507, i32 -1 ; [#uses=2] + %tmp68.i511 = urem i32 %v.0.i508, %tmp52.i501 ; [#uses=1] + %tmp71.i512 = getelementptr i8* %tmp49178.i499, i32 %tmp68.i511 ; [#uses=1] + %tmp72.i513 = load i8* %tmp71.i512 ; [#uses=1] + store i8 %tmp72.i513, i8* %tmp65.i510 + %tmp75.i514 = udiv i32 %v.0.i508, %tmp52.i501 ; [#uses=2] + %tmp76.i515 = icmp eq i32 %tmp75.i514, 0 ; [#uses=1] + br i1 %tmp76.i515, label %condtrue.i541, label %andand.i519 + +andand.i519: ; preds = %dowhile.i516 + %tmp78.i517 = add i32 %len.0.i509, -1 ; [#uses=2] + %tmp79.i518 = icmp eq i32 %len.0.i509, 1 ; [#uses=1] + br i1 %tmp79.i518, label %condtrue.i541, label %dowhile.i516 + +dowhile82.i531: ; preds = %andand100.i534, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 + br i1 undef, label %condtrue.i541, label %andand100.i534 + +andand100.i534: ; preds = %dowhile82.i531 + br i1 undef, label %condtrue.i541, label %dowhile82.i531 + +condtrue.i541: ; preds = %andand100.i534, %dowhile82.i531, %andand.i519, %dowhile.i516 + %len.1.i536 = phi i32 [ %tmp78.i517, %andand.i519 ], [ %len.0.i509, %dowhile.i516 ], [ undef, %andand100.i534 ], [ undef, %dowhile82.i531 ] ; [#uses=2] + %tmp112.i540 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i543 = extractvalue %"byte[]" %tmp112.i540, 0 ; [#uses=3] + %tmp117.i545 = icmp ugt i32 %len.1.i536, %condtmp.0175.i543 ; [#uses=1] + br i1 %tmp117.i545, label %if118.i549, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 + +if118.i549: ; preds = %condtrue.i541 + %condtmp.0176.i544 = extractvalue %"byte[]" %tmp112.i540, 1 ; [#uses=1] + %tmp123.i547 = add i32 %condtmp.0175.i543, 1 ; [#uses=1] + %tmp124.i548 = sub i32 %len.1.i536, %tmp123.i547 ; [#uses=2] + %tmp163.sum787 = add i32 %tmp124.i548, 6 ; [#uses=1] + %tmp156.i551 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp163.sum787 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i551, i8* %condtmp.0176.i544, i32 %condtmp.0175.i543, i32 1) + %tmp170.i552 = sub i32 3, %tmp124.i548 ; [#uses=1] + %tmp171.i553 = insertvalue %"byte[]" undef, i32 %tmp170.i552, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i554 = insertvalue %"byte[]" %tmp171.i553, i8* %tmp156.i551, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557: ; preds = %if118.i549, %condtrue.i541 + %tmp6.i.i286558 = phi %"byte[]" [ %tmp172.i554, %if118.i549 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i541 ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i.i286558, %"byte[]"* %tmp161, align 8 + %tmp167 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 4 ; <%"byte[]"*> [#uses=1] + %tmp49.i573 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i574 = extractvalue %"byte[]" %tmp49.i573, 1 ; [#uses=1] + %tmp52.i576 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i577 = getelementptr [20 x i8]* %foo, i32 0, i32 12 ; [#uses=1] + br i1 false, label %dowhile82.i606, label %if59.i581 + +if59.i581: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 + br label %dowhile.i591 + +dowhile.i591: ; preds = %andand.i594, %if59.i581 + %p.0.i582 = phi i8* [ %tmp56.i577, %if59.i581 ], [ %tmp65.i585, %andand.i594 ] ; [#uses=1] + %v.0.i583 = phi i32 [ %tmp126, %if59.i581 ], [ %tmp75.i589, %andand.i594 ] ; [#uses=2] + %len.0.i584 = phi i32 [ 3, %if59.i581 ], [ %tmp78.i592, %andand.i594 ] ; [#uses=3] + %tmp65.i585 = getelementptr i8* %p.0.i582, i32 -1 ; [#uses=2] + %tmp68.i586 = urem i32 %v.0.i583, %tmp52.i576 ; [#uses=1] + %tmp71.i587 = getelementptr i8* %tmp49178.i574, i32 %tmp68.i586 ; [#uses=1] + %tmp72.i588 = load i8* %tmp71.i587 ; [#uses=1] + store i8 %tmp72.i588, i8* %tmp65.i585 + %tmp75.i589 = udiv i32 %v.0.i583, %tmp52.i576 ; [#uses=2] + %tmp76.i590 = icmp eq i32 %tmp75.i589, 0 ; [#uses=1] + br i1 %tmp76.i590, label %condtrue.i616, label %andand.i594 + +andand.i594: ; preds = %dowhile.i591 + %tmp78.i592 = add i32 %len.0.i584, -1 ; [#uses=2] + %tmp79.i593 = icmp eq i32 %len.0.i584, 1 ; [#uses=1] + br i1 %tmp79.i593, label %condtrue.i616, label %dowhile.i591 + +dowhile82.i606: ; preds = %andand100.i609, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 + br i1 undef, label %condtrue.i616, label %andand100.i609 + +andand100.i609: ; preds = %dowhile82.i606 + br i1 undef, label %condtrue.i616, label %dowhile82.i606 + +condtrue.i616: ; preds = %andand100.i609, %dowhile82.i606, %andand.i594, %dowhile.i591 + %len.1.i611 = phi i32 [ %tmp78.i592, %andand.i594 ], [ %len.0.i584, %dowhile.i591 ], [ undef, %andand100.i609 ], [ undef, %dowhile82.i606 ] ; [#uses=2] + %tmp112.i615 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i618 = extractvalue %"byte[]" %tmp112.i615, 0 ; [#uses=3] + %tmp117.i620 = icmp ugt i32 %len.1.i611, %condtmp.0175.i618 ; [#uses=1] + br i1 %tmp117.i620, label %if118.i624, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 + +if118.i624: ; preds = %condtrue.i616 + %condtmp.0176.i619 = extractvalue %"byte[]" %tmp112.i615, 1 ; [#uses=1] + %tmp123.i622 = add i32 %condtmp.0175.i618, 1 ; [#uses=1] + %tmp124.i623 = sub i32 %len.1.i611, %tmp123.i622 ; [#uses=2] + %tmp169.sum786 = add i32 %tmp124.i623, 9 ; [#uses=1] + %tmp156.i626 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp169.sum786 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i626, i8* %condtmp.0176.i619, i32 %condtmp.0175.i618, i32 1) + %tmp170.i627 = sub i32 3, %tmp124.i623 ; [#uses=1] + %tmp171.i628 = insertvalue %"byte[]" undef, i32 %tmp170.i627, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i629 = insertvalue %"byte[]" %tmp171.i628, i8* %tmp156.i626, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632: ; preds = %if118.i624, %condtrue.i616 + %tmp6.i.i400633 = phi %"byte[]" [ %tmp172.i629, %if118.i624 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i616 ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i.i400633, %"byte[]"* %tmp167, align 8 + %tmp173 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 5 ; <%"byte[]"*> [#uses=1] + %tmp49.i723 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i724 = extractvalue %"byte[]" %tmp49.i723, 1 ; [#uses=1] + %tmp52.i726 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i727 = getelementptr [20 x i8]* %foo, i32 0, i32 15 ; [#uses=1] + br i1 false, label %dowhile82.i756, label %if59.i731 + +if59.i731: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 + br label %dowhile.i741 + +dowhile.i741: ; preds = %andand.i744, %if59.i731 + %p.0.i732 = phi i8* [ %tmp56.i727, %if59.i731 ], [ %tmp65.i735, %andand.i744 ] ; [#uses=1] + %v.0.i733 = phi i32 [ %tmp133210, %if59.i731 ], [ %tmp75.i739, %andand.i744 ] ; [#uses=2] + %len.0.i734 = phi i32 [ 3, %if59.i731 ], [ %tmp78.i742, %andand.i744 ] ; [#uses=3] + %tmp65.i735 = getelementptr i8* %p.0.i732, i32 -1 ; [#uses=2] + %tmp68.i736 = urem i32 %v.0.i733, %tmp52.i726 ; [#uses=1] + %tmp71.i737 = getelementptr i8* %tmp49178.i724, i32 %tmp68.i736 ; [#uses=1] + %tmp72.i738 = load i8* %tmp71.i737 ; [#uses=1] + store i8 %tmp72.i738, i8* %tmp65.i735 + %tmp75.i739 = udiv i32 %v.0.i733, %tmp52.i726 ; [#uses=2] + %tmp76.i740 = icmp eq i32 %tmp75.i739, 0 ; [#uses=1] + br i1 %tmp76.i740, label %condtrue.i766, label %andand.i744 + +andand.i744: ; preds = %dowhile.i741 + %tmp78.i742 = add i32 %len.0.i734, -1 ; [#uses=2] + %tmp79.i743 = icmp eq i32 %len.0.i734, 1 ; [#uses=1] + br i1 %tmp79.i743, label %condtrue.i766, label %dowhile.i741 + +dowhile82.i756: ; preds = %andand100.i759, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 + br i1 undef, label %condtrue.i766, label %andand100.i759 + +andand100.i759: ; preds = %dowhile82.i756 + br i1 undef, label %condtrue.i766, label %dowhile82.i756 + +condtrue.i766: ; preds = %andand100.i759, %dowhile82.i756, %andand.i744, %dowhile.i741 + %len.1.i761 = phi i32 [ %tmp78.i742, %andand.i744 ], [ %len.0.i734, %dowhile.i741 ], [ undef, %andand100.i759 ], [ undef, %dowhile82.i756 ] ; [#uses=2] + %tmp112.i765 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i768 = extractvalue %"byte[]" %tmp112.i765, 0 ; [#uses=3] + %tmp117.i770 = icmp ugt i32 %len.1.i761, %condtmp.0175.i768 ; [#uses=1] + br i1 %tmp117.i770, label %if118.i774, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 + +if118.i774: ; preds = %condtrue.i766 + %condtmp.0176.i769 = extractvalue %"byte[]" %tmp112.i765, 1 ; [#uses=1] + %tmp123.i772 = add i32 %condtmp.0175.i768, 1 ; [#uses=1] + %tmp124.i773 = sub i32 %len.1.i761, %tmp123.i772 ; [#uses=2] + %tmp175.sum785 = add i32 %tmp124.i773, 12 ; [#uses=1] + %tmp156.i776 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp175.sum785 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i776, i8* %condtmp.0176.i769, i32 %condtmp.0175.i768, i32 1) + %tmp170.i777 = sub i32 3, %tmp124.i773 ; [#uses=1] + %tmp171.i778 = insertvalue %"byte[]" undef, i32 %tmp170.i777, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i779 = insertvalue %"byte[]" %tmp171.i778, i8* %tmp156.i776, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782: ; preds = %if118.i774, %condtrue.i766 + %tmp6.i.i362783 = phi %"byte[]" [ %tmp172.i779, %if118.i774 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i766 ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i.i362783, %"byte[]"* %tmp173, align 8 + %tmp179 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 6 ; <%"byte[]"*> [#uses=1] + %tmp49.i648 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i649 = extractvalue %"byte[]" %tmp49.i648, 1 ; [#uses=1] + %tmp52.i651 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i652 = getelementptr [20 x i8]* %foo, i32 0, i32 18 ; [#uses=1] + br i1 false, label %dowhile82.i681, label %if59.i656 + +if59.i656: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 + br label %dowhile.i666 + +dowhile.i666: ; preds = %andand.i669, %if59.i656 + %p.0.i657 = phi i8* [ %tmp56.i652, %if59.i656 ], [ %tmp65.i660, %andand.i669 ] ; [#uses=1] + %v.0.i658 = phi i32 [ %tmp144, %if59.i656 ], [ %tmp75.i664, %andand.i669 ] ; [#uses=2] + %len.0.i659 = phi i32 [ 3, %if59.i656 ], [ %tmp78.i667, %andand.i669 ] ; [#uses=3] + %tmp65.i660 = getelementptr i8* %p.0.i657, i32 -1 ; [#uses=2] + %tmp68.i661 = urem i32 %v.0.i658, %tmp52.i651 ; [#uses=1] + %tmp71.i662 = getelementptr i8* %tmp49178.i649, i32 %tmp68.i661 ; [#uses=1] + %tmp72.i663 = load i8* %tmp71.i662 ; [#uses=1] + store i8 %tmp72.i663, i8* %tmp65.i660 + %tmp75.i664 = udiv i32 %v.0.i658, %tmp52.i651 ; [#uses=2] + %tmp76.i665 = icmp eq i32 %tmp75.i664, 0 ; [#uses=1] + br i1 %tmp76.i665, label %condtrue.i691, label %andand.i669 + +andand.i669: ; preds = %dowhile.i666 + %tmp78.i667 = add i32 %len.0.i659, -1 ; [#uses=2] + %tmp79.i668 = icmp eq i32 %len.0.i659, 1 ; [#uses=1] + br i1 %tmp79.i668, label %condtrue.i691, label %dowhile.i666 + +dowhile82.i681: ; preds = %andand100.i684, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 + br i1 undef, label %condtrue.i691, label %andand100.i684 + +andand100.i684: ; preds = %dowhile82.i681 + br i1 undef, label %condtrue.i691, label %dowhile82.i681 + +condtrue.i691: ; preds = %andand100.i684, %dowhile82.i681, %andand.i669, %dowhile.i666 + %len.1.i686 = phi i32 [ %tmp78.i667, %andand.i669 ], [ %len.0.i659, %dowhile.i666 ], [ undef, %andand100.i684 ], [ undef, %dowhile82.i681 ] ; [#uses=2] + %tmp112.i690 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i693 = extractvalue %"byte[]" %tmp112.i690, 0 ; [#uses=3] + %tmp117.i695 = icmp ugt i32 %len.1.i686, %condtmp.0175.i693 ; [#uses=1] + br i1 %tmp117.i695, label %if118.i699, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit707 + +if118.i699: ; preds = %condtrue.i691 + %condtmp.0176.i694 = extractvalue %"byte[]" %tmp112.i690, 1 ; [#uses=1] + %tmp123.i697 = add i32 %condtmp.0175.i693, 1 ; [#uses=1] + %tmp124.i698 = sub i32 %len.1.i686, %tmp123.i697 ; [#uses=2] + %tmp181.sum784 = add i32 %tmp124.i698, 15 ; [#uses=1] + %tmp156.i701 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp181.sum784 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i701, i8* %condtmp.0176.i694, i32 %condtmp.0175.i693, i32 1) + %tmp170.i702 = sub i32 3, %tmp124.i698 ; [#uses=1] + %tmp171.i703 = insertvalue %"byte[]" undef, i32 %tmp170.i702, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i704 = insertvalue %"byte[]" %tmp171.i703, i8* %tmp156.i701, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit707 + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit707: ; preds = %if118.i699, %condtrue.i691 + %tmp6.i.i324708 = phi %"byte[]" [ %tmp172.i704, %if118.i699 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i691 ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i.i324708, %"byte[]"* %tmp179, align 8 + %tmp186 = insertvalue %"char[][]" { i32 7, %"byte[]"* undef }, %"byte[]"* %tmp148, 1 ; <%"char[][]"> [#uses=1] + %tmp187 = call fastcc %"byte[]" @_D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa(%"byte[]" %tmp147, %"char[][]" %tmp186) ; <%"byte[]"> [#uses=1] + %tmp190 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl191" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp190, i32 0, i32 35 ; [#uses=1] + %this.sendCommand193 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl191", align 4 ; [#uses=1] + %tmp194 = getelementptr [1 x %"byte[]"]* %__arrayArg141, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %tmp187, %"byte[]"* %tmp194, align 8 + %tmp197 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp194, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand193(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str127, i32 0, i32 0) }, %"char[][]" %tmp197) + %tmp200 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl201" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp200, i32 0, i32 36 ; [#uses=1] + %this.readResponse203 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl201", align 4 ; [#uses=1] + call fastcc void %this.readResponse203(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp204, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str128, i32 0, i32 0) }) + ret %tango.net.SocketConduit.SocketConduit* %.newclass_gc +} + +define fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp9FtpClient13FTPConnection14connectPassiveMFZC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] + %.rettmp70 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] + %.rettmp161 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=6] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.is_supported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 42 ; [#uses=1] + %this.is_supported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.is_supported at vtbl", align 4 ; [#uses=1] + %tmp4 = call fastcc i1 %this.is_supported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str129, i32 0, i32 0) }) ; [#uses=1] + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=2] + br i1 %tmp4, label %if, label %else + +if: ; preds = %entry + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str130, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp11 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp11, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str131, i32 0, i32 0) }) + %.rettmp.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 0 ; [#uses=1] + %tmp359 = load i32* %.rettmp.1.0, align 4 ; [#uses=3] + %.rettmp.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 1 ; [#uses=1] + %tmp360 = load i8** %.rettmp.1.1, align 4 ; [#uses=5] + %tmp16 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp17 = load %tango.net.SocketConduit.SocketConduit** %tmp16 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp18 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp17, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp19 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp18 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"this.socket_.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp19, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %this.socket_.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"this.socket_.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp21 = call fastcc %tango.net.Socket.Socket* %this.socket_.socket(%tango.net.SocketConduit.SocketConduit* %tmp17) ; <%tango.net.Socket.Socket*> [#uses=2] + %tmp22 = getelementptr %tango.net.Socket.Socket* %tmp21, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp23 = load %tango.net.Socket.Socket.__vtbl** %tmp22 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"this.socket_.socket().remoteAddress at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp23, i32 0, i32 23 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)**> [#uses=1] + %"this.socket_.socket().remoteAddress" = load %tango.net.Socket.Address* (%tango.net.Socket.Socket*)** %"this.socket_.socket().remoteAddress at vtbl", align 4 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)*> [#uses=1] + %tmp25 = call fastcc %tango.net.Socket.Address* %"this.socket_.socket().remoteAddress"(%tango.net.Socket.Socket* %tmp21) ; <%tango.net.Socket.Address*> [#uses=1] + %tmp26 = bitcast %tango.net.Socket.Address* %tmp25 to %object.Object* ; <%object.Object*> [#uses=1] + %tmp27 = call %object.Object* @_d_dynamic_cast(%object.Object* %tmp26, %object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) nounwind readonly ; <%object.Object*> [#uses=2] + %tmp28 = bitcast %object.Object* %tmp27 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %tmp30 = bitcast %object.Object* %tmp27 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + %tmp31 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp30 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"remote.addr at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp31, i32 0, i32 9 ; [#uses=1] + %remote.addr = load i32 (%tango.net.Socket.IPv4Address*)** %"remote.addr at vtbl", align 4 ; [#uses=1] + %tmp33 = call fastcc i32 %remote.addr(%tango.net.Socket.IPv4Address* %tmp28) ; [#uses=1] + %tmp4.i.i = icmp eq i32 %tmp359, 0 ; [#uses=1] + br i1 %tmp4.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %forcond.i.i + +forcond.i.i: ; preds = %forinc.i.i, %if + %sign.1.i = phi i1 [ false, %if ], [ %sign.0.i, %forinc.i.i ] ; [#uses=4] + %len.0.i.i = phi i32 [ %tmp33.i.i, %forinc.i.i ], [ %tmp359, %if ] ; [#uses=3] + %p.0.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp360, %if ] ; [#uses=6] + %c.0.in.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp360, %if ] ; [#uses=1] + %c.0.i.i = load i8* %c.0.in.i.i ; [#uses=2] + %tmp8.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp8.i.i, label %endfor.i.i, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + switch i8 %c.0.i.i, label %endfor.i.i [ + i8 32, label %forinc.i.i + i8 9, label %forinc.i.i + i8 45, label %if20.i.i + i8 43, label %if26.i.i + ] + +if20.i.i: ; preds = %forbody.i.i + br label %forinc.i.i + +if26.i.i: ; preds = %forbody.i.i + br label %forinc.i.i + +forinc.i.i: ; preds = %if26.i.i, %if20.i.i, %forbody.i.i, %forbody.i.i + %sign.0.i = phi i1 [ false, %if26.i.i ], [ true, %if20.i.i ], [ %sign.1.i, %forbody.i.i ], [ %sign.1.i, %forbody.i.i ] ; [#uses=1] + %tmp30.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] + %tmp33.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + br label %forcond.i.i + +endfor.i.i: ; preds = %forbody.i.i, %forcond.i.i + %tmp37.i.i = icmp eq i8 %c.0.i.i, 48 ; [#uses=1] + %tmp39.i.i = icmp sgt i32 %len.0.i.i, 1 ; [#uses=1] + %or.cond.i.i = and i1 %tmp37.i.i, %tmp39.i.i ; [#uses=1] + br i1 %or.cond.i.i, label %if40.i.i, label %endif41.i.i + +if40.i.i: ; preds = %endfor.i.i + %tmp43.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] + %tmp44.i.i = load i8* %tmp43.i.i ; [#uses=1] + %tmp45.i.i = zext i8 %tmp44.i.i to i32 ; [#uses=1] + switch i32 %tmp45.i.i, label %endif41.i.i [ + i32 120, label %case46.i.i + i32 88, label %case46.i.i + i32 98, label %case51.i.i + i32 66, label %case51.i.i + i32 111, label %case56.i.i + i32 79, label %case56.i.i + ] + +case46.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp48.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] + br label %endif41.i.i + +case51.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp53.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] + br label %endif41.i.i + +case56.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp58.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] + br label %endif41.i.i + +endif41.i.i: ; preds = %case56.i.i, %case51.i.i, %case46.i.i, %if40.i.i, %endfor.i.i + %r.0.i.i = phi i32 [ 0, %if40.i.i ], [ 8, %case56.i.i ], [ 2, %case51.i.i ], [ 16, %case46.i.i ], [ 0, %endfor.i.i ] ; [#uses=2] + %p.2.i.i = phi i8* [ %tmp43.i.i, %if40.i.i ], [ %tmp58.i.i, %case56.i.i ], [ %tmp53.i.i, %case51.i.i ], [ %tmp48.i.i, %case46.i.i ], [ %p.0.i.i, %endfor.i.i ] ; [#uses=2] + %tmp63.i.i = icmp eq i32 %r.0.i.i, 0 ; [#uses=1] + br i1 %tmp63.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %if70.i.i + +if70.i.i: ; preds = %endif41.i.i + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i: ; preds = %if70.i.i, %endif41.i.i, %if + %sign.2.i = phi i1 [ false, %if ], [ %sign.1.i, %if70.i.i ], [ %sign.1.i, %endif41.i.i ] ; [#uses=1] + %radix.0.i = phi i32 [ 0, %if ], [ %r.0.i.i, %if70.i.i ], [ 10, %endif41.i.i ] ; [#uses=2] + %p.1.i.i = phi i8* [ %p.2.i.i, %if70.i.i ], [ %tmp360, %if ], [ %p.2.i.i, %endif41.i.i ] ; [#uses=1] + %tmp84.i.i = ptrtoint i8* %p.1.i.i to i32 ; [#uses=1] + %tmp85.i.i = ptrtoint i8* %tmp360 to i32 ; [#uses=1] + %tmp86.i.i = sub i32 %tmp84.i.i, %tmp85.i.i ; [#uses=2] + %tmp6.i = sub i32 %tmp359, %tmp86.i.i ; [#uses=1] + br label %foreachcond.i.i + +foreachcond.i.i: ; preds = %if55.i.i, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + %value.0.i.i = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp65.i.i, %if55.i.i ] ; [#uses=3] + %foreachkey.0.i.i = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp70.i.i, %if55.i.i ] ; [#uses=3] + %tmp3.i.i = icmp ult i32 %foreachkey.0.i.i, %tmp6.i ; [#uses=1] + br i1 %tmp3.i.i, label %foreachbody.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +foreachbody.i.i: ; preds = %foreachcond.i.i + %tmp5.sum.i = add i32 %tmp86.i.i, %foreachkey.0.i.i ; [#uses=1] + %tmp5.i.i = getelementptr i8* %tmp360, i32 %tmp5.sum.i ; [#uses=1] + %tmp6.i.i = load i8* %tmp5.i.i ; [#uses=6] + %tmp6.off84.i.i = add i8 %tmp6.i.i, -48 ; [#uses=1] + %or.cond.i28.i = icmp ugt i8 %tmp6.off84.i.i, 9 ; [#uses=1] + br i1 %or.cond.i28.i, label %else.i.i, label %endif.i.i + +else.i.i: ; preds = %foreachbody.i.i + %tmp6.off83.i.i = add i8 %tmp6.i.i, -97 ; [#uses=1] + %or.cond81.i.i = icmp ugt i8 %tmp6.off83.i.i, 25 ; [#uses=1] + br i1 %or.cond81.i.i, label %else24.i.i, label %if22.i.i + +if22.i.i: ; preds = %else.i.i + %tmp27.i.i = add i8 %tmp6.i.i, -39 ; [#uses=1] + br label %endif.i.i + +else24.i.i: ; preds = %else.i.i + %tmp6.off.i.i = add i8 %tmp6.i.i, -65 ; [#uses=1] + %or.cond82.i.i = icmp ugt i8 %tmp6.off.i.i, 25 ; [#uses=1] + br i1 %or.cond82.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, label %if39.i.i + +if39.i.i: ; preds = %else24.i.i + %tmp44.i29.i = add i8 %tmp6.i.i, -7 ; [#uses=1] + br label %endif.i.i + +endif.i.i: ; preds = %if39.i.i, %if22.i.i, %foreachbody.i.i + %c.0.i30.i = phi i8 [ %tmp27.i.i, %if22.i.i ], [ %tmp44.i29.i, %if39.i.i ], [ %tmp6.i.i, %foreachbody.i.i ] ; [#uses=1] + %tmp48.i31.i = zext i8 %c.0.i30.i to i32 ; [#uses=1] + %tmp49.i.i = add i32 %tmp48.i31.i, 208 ; [#uses=1] + %tmp52.i.i = and i32 %tmp49.i.i, 255 ; [#uses=2] + %tmp54.i.i = icmp ult i32 %tmp52.i.i, %radix.0.i ; [#uses=1] + br i1 %tmp54.i.i, label %if55.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +if55.i.i: ; preds = %endif.i.i + %tmp59.i.i = zext i32 %radix.0.i to i64 ; [#uses=1] + %tmp61.i.i = mul i64 %value.0.i.i, %tmp59.i.i ; [#uses=1] + %tmp64.i.i = zext i32 %tmp52.i.i to i64 ; [#uses=1] + %tmp65.i.i = add i64 %tmp61.i.i, %tmp64.i.i ; [#uses=1] + %tmp70.i.i = add i32 %foreachkey.0.i.i, 1 ; [#uses=1] + br label %foreachcond.i.i + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit: ; preds = %endif.i.i, %else24.i.i, %foreachcond.i.i + %negval.i = sub i64 0, %value.0.i.i ; [#uses=1] + %condtmp.0.i = select i1 %sign.2.i, i64 %negval.i, i64 %value.0.i.i ; [#uses=1] + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=6] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp38 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp38, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) + %tmp44 = trunc i64 %condtmp.0.i to i16 ; [#uses=1] + %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] + %1 = bitcast i8* %tmp2.i to i32* ; [#uses=1] + store i32 %tmp33, i32* %1 + %tmp7.i = getelementptr i8* %.newclass_gc_alloc, i32 18 ; [#uses=1] + %2 = bitcast i8* %tmp7.i to i16* ; [#uses=1] + store i16 %tmp44, i16* %2 + %tmp46 = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] + br label %try + +else: ; preds = %entry + %"this.is_supported at vtbl50" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 42 ; [#uses=1] + %this.is_supported52 = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.is_supported at vtbl50", align 4 ; [#uses=1] + %tmp53 = call fastcc i1 %this.is_supported52(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str132, i32 0, i32 0) }) ; [#uses=1] + %tmp59 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl60" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp59, i32 0, i32 35 ; [#uses=1] + %this.sendCommand62 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl60", align 4 ; [#uses=2] + br i1 %tmp53, label %if54, label %else56 + +if54: ; preds = %else + call fastcc void %this.sendCommand62(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str133, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp66 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl67" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp66, i32 0, i32 36 ; [#uses=1] + %this.readResponse69 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl67", align 4 ; [#uses=1] + call fastcc void %this.readResponse69(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp70, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str134, i32 0, i32 0) }) + %.rettmp70.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp70, i32 0, i32 1, i32 0 ; [#uses=1] + %tmp345 = load i32* %.rettmp70.1.0, align 4 ; [#uses=2] + %.rettmp70.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp70, i32 0, i32 1, i32 1 ; [#uses=1] + %tmp346 = load i8** %.rettmp70.1.1, align 4 ; [#uses=2] + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ) ; [#uses=4] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.RegExpT!(char).RegExpT"* ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=3] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"**> [#uses=3] + store %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ, %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %3 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %3 + %tmp.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i, i8* bitcast (%"Act[]"* getelementptr (%"tango.text.Regex.RegExpT!(char).RegExpT"* bitcast (%30* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ to %"tango.text.Regex.RegExpT!(char).RegExpT"*), i32 0, i32 2) to i8*), i32 36, i32 1) + %tmp2.i.i = call fastcc %"tango.text.Regex.RegExpT!(char).RegExpT"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT5_ctorMFAabbbZC5tango4text5Regex14__T7RegExpTTaZ7RegExpT(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str135, i32 0, i32 0) }, i1 false, i1 true, i1 false) ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=0] + %tmp76 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.test at vtbl" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp76, i32 0, i32 7 ; [#uses=1] + %r.test = load i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")** %"r.test at vtbl", align 4 ; [#uses=1] + br label %foreachcond.i.i460 + +foreachcond.i.i460: ; preds = %foreachnext.i.i, %if54 + %pos.0.i.i = phi i32 [ 0, %if54 ], [ %tmp12.i.i, %foreachnext.i.i ] ; [#uses=4] + %tmp3.i.i459 = icmp ult i32 %pos.0.i.i, %tmp345 ; [#uses=1] + br i1 %tmp3.i.i459, label %foreachbody.i.i463, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit + +foreachbody.i.i463: ; preds = %foreachcond.i.i460 + %tmp5.i.i461 = getelementptr i8* %tmp346, i32 %pos.0.i.i ; [#uses=1] + %tmp6.i.i462 = load i8* %tmp5.i.i461 ; [#uses=1] + %tmp4.i.i.i = icmp eq i8 %tmp6.i.i462, 10 ; [#uses=1] + br i1 %tmp4.i.i.i, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit, label %foreachnext.i.i + +foreachnext.i.i: ; preds = %foreachbody.i.i463 + %tmp12.i.i = add i32 %pos.0.i.i, 1 ; [#uses=1] + br label %foreachcond.i.i460 + +_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit: ; preds = %foreachbody.i.i463, %foreachcond.i.i460 + %tmp23.i = phi i32 [ %pos.0.i.i, %foreachbody.i.i463 ], [ %tmp345, %foreachcond.i.i460 ] ; [#uses=1] + %tmp85 = insertvalue %"byte[]" undef, i32 %tmp23.i, 0 ; <%"byte[]"> [#uses=1] + %tmp86 = insertvalue %"byte[]" %tmp85, i8* %tmp346, 1 ; <%"byte[]"> [#uses=1] + %tmp87 = call fastcc i1 %r.test(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, %"byte[]" %tmp86) ; [#uses=1] + br i1 %tmp87, label %endif89, label %if88 + +if88: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit + %.newclass_gc_alloc90 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl92 = bitcast i8* %.newclass_gc_alloc90 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl92 + %monitor93 = getelementptr i8* %.newclass_gc_alloc90, i32 4 ; [#uses=1] + %4 = bitcast i8* %monitor93 to i8** ; [#uses=1] + store i8* null, i8** %4 + %tmp94 = getelementptr i8* %.newclass_gc_alloc90, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp94, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i549 = getelementptr i8* %.newclass_gc_alloc90, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i549, i8* getelementptr ([4 x i8]* @.str137, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc90 to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i550 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str136, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp99 = bitcast i8* %.newclass_gc_alloc90 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp99) + unreachable + +endif89: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit + %tmp102 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp103 = load %tango.net.SocketConduit.SocketConduit** %tmp102 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp104 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp103, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp105 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp104 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"this.socket_.socket at vtbl106" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp105, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %this.socket_.socket108 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"this.socket_.socket at vtbl106", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp109 = call fastcc %tango.net.Socket.Socket* %this.socket_.socket108(%tango.net.SocketConduit.SocketConduit* %tmp103) ; <%tango.net.Socket.Socket*> [#uses=2] + %tmp110 = getelementptr %tango.net.Socket.Socket* %tmp109, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp111 = load %tango.net.Socket.Socket.__vtbl** %tmp110 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"this.socket_.socket().remoteAddress at vtbl112" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp111, i32 0, i32 23 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)**> [#uses=1] + %"this.socket_.socket().remoteAddress114" = load %tango.net.Socket.Address* (%tango.net.Socket.Socket*)** %"this.socket_.socket().remoteAddress at vtbl112", align 4 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)*> [#uses=1] + %tmp115 = call fastcc %tango.net.Socket.Address* %"this.socket_.socket().remoteAddress114"(%tango.net.Socket.Socket* %tmp109) ; <%tango.net.Socket.Address*> [#uses=1] + %tmp116 = bitcast %tango.net.Socket.Address* %tmp115 to %object.Object* ; <%object.Object*> [#uses=1] + %tmp117 = call %object.Object* @_d_dynamic_cast(%object.Object* %tmp116, %object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) nounwind readonly ; <%object.Object*> [#uses=2] + %tmp118 = bitcast %object.Object* %tmp117 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %tmp121 = bitcast %object.Object* %tmp117 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + %tmp122 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp121 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] + %"remote.addr at vtbl123" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp122, i32 0, i32 9 ; [#uses=1] + %remote.addr125 = load i32 (%tango.net.Socket.IPv4Address*)** %"remote.addr at vtbl123", align 4 ; [#uses=1] + %tmp126 = call fastcc i32 %remote.addr125(%tango.net.Socket.IPv4Address* %tmp118) ; [#uses=1] + %tmp130 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp130, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp132 = call fastcc %"byte[]" %r.match(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, i32 1) ; <%"byte[]"> [#uses=2] + %digits_arg26.i551 = extractvalue %"byte[]" %tmp132, 0 ; [#uses=3] + %digits_arg27.i552 = extractvalue %"byte[]" %tmp132, 1 ; [#uses=5] + %tmp4.i.i553 = icmp eq i32 %digits_arg26.i551, 0 ; [#uses=1] + br i1 %tmp4.i.i553, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597, label %forcond.i.i560 + +forcond.i.i560: ; preds = %forinc.i.i567, %endif89 + %sign.1.i554 = phi i1 [ false, %endif89 ], [ %sign.0.i564, %forinc.i.i567 ] ; [#uses=4] + %len.0.i.i555 = phi i32 [ %tmp33.i.i566, %forinc.i.i567 ], [ %digits_arg26.i551, %endif89 ] ; [#uses=3] + %p.0.i.i556 = phi i8* [ %tmp30.i.i565, %forinc.i.i567 ], [ %digits_arg27.i552, %endif89 ] ; [#uses=6] + %c.0.in.i.i557 = phi i8* [ %tmp30.i.i565, %forinc.i.i567 ], [ %digits_arg27.i552, %endif89 ] ; [#uses=1] + %c.0.i.i558 = load i8* %c.0.in.i.i557 ; [#uses=2] + %tmp8.i.i559 = icmp eq i32 %len.0.i.i555, 0 ; [#uses=1] + br i1 %tmp8.i.i559, label %endfor.i.i571, label %forbody.i.i561 + +forbody.i.i561: ; preds = %forcond.i.i560 + switch i8 %c.0.i.i558, label %endfor.i.i571 [ + i8 32, label %forinc.i.i567 + i8 9, label %forinc.i.i567 + i8 45, label %if20.i.i562 + i8 43, label %if26.i.i563 + ] + +if20.i.i562: ; preds = %forbody.i.i561 + br label %forinc.i.i567 + +if26.i.i563: ; preds = %forbody.i.i561 + br label %forinc.i.i567 + +forinc.i.i567: ; preds = %if26.i.i563, %if20.i.i562, %forbody.i.i561, %forbody.i.i561 + %sign.0.i564 = phi i1 [ false, %if26.i.i563 ], [ true, %if20.i.i562 ], [ %sign.1.i554, %forbody.i.i561 ], [ %sign.1.i554, %forbody.i.i561 ] ; [#uses=1] + %tmp30.i.i565 = getelementptr i8* %p.0.i.i556, i32 1 ; [#uses=2] + %tmp33.i.i566 = add i32 %len.0.i.i555, -1 ; [#uses=1] + br label %forcond.i.i560 + +endfor.i.i571: ; preds = %forbody.i.i561, %forcond.i.i560 + %tmp37.i.i568 = icmp eq i8 %c.0.i.i558, 48 ; [#uses=1] + %tmp39.i.i569 = icmp sgt i32 %len.0.i.i555, 1 ; [#uses=1] + %or.cond.i.i570 = and i1 %tmp37.i.i568, %tmp39.i.i569 ; [#uses=1] + br i1 %or.cond.i.i570, label %if40.i.i575, label %endif41.i.i585 + +if40.i.i575: ; preds = %endfor.i.i571 + %tmp43.i.i572 = getelementptr i8* %p.0.i.i556, i32 1 ; [#uses=2] + %tmp44.i.i573 = load i8* %tmp43.i.i572 ; [#uses=1] + %tmp45.i.i574 = zext i8 %tmp44.i.i573 to i32 ; [#uses=1] + switch i32 %tmp45.i.i574, label %endif41.i.i585 [ + i32 120, label %case46.i.i577 + i32 88, label %case46.i.i577 + i32 98, label %case51.i.i579 + i32 66, label %case51.i.i579 + i32 111, label %case56.i.i581 + i32 79, label %case56.i.i581 + ] + +case46.i.i577: ; preds = %if40.i.i575, %if40.i.i575 + %tmp48.i.i576 = getelementptr i8* %p.0.i.i556, i32 2 ; [#uses=1] + br label %endif41.i.i585 + +case51.i.i579: ; preds = %if40.i.i575, %if40.i.i575 + %tmp53.i.i578 = getelementptr i8* %p.0.i.i556, i32 2 ; [#uses=1] + br label %endif41.i.i585 + +case56.i.i581: ; preds = %if40.i.i575, %if40.i.i575 + %tmp58.i.i580 = getelementptr i8* %p.0.i.i556, i32 2 ; [#uses=1] + br label %endif41.i.i585 + +endif41.i.i585: ; preds = %case56.i.i581, %case51.i.i579, %case46.i.i577, %if40.i.i575, %endfor.i.i571 + %r.0.i.i582 = phi i32 [ 0, %if40.i.i575 ], [ 8, %case56.i.i581 ], [ 2, %case51.i.i579 ], [ 16, %case46.i.i577 ], [ 0, %endfor.i.i571 ] ; [#uses=2] + %p.2.i.i583 = phi i8* [ %tmp43.i.i572, %if40.i.i575 ], [ %tmp58.i.i580, %case56.i.i581 ], [ %tmp53.i.i578, %case51.i.i579 ], [ %tmp48.i.i576, %case46.i.i577 ], [ %p.0.i.i556, %endfor.i.i571 ] ; [#uses=2] + %tmp63.i.i584 = icmp eq i32 %r.0.i.i582, 0 ; [#uses=1] + br i1 %tmp63.i.i584, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597, label %if70.i.i589 + +if70.i.i589: ; preds = %endif41.i.i585 + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597: ; preds = %if70.i.i589, %endif41.i.i585, %endif89 + %sign.2.i590 = phi i1 [ false, %endif89 ], [ %sign.1.i554, %if70.i.i589 ], [ %sign.1.i554, %endif41.i.i585 ] ; [#uses=1] + %radix.0.i591 = phi i32 [ 0, %endif89 ], [ %r.0.i.i582, %if70.i.i589 ], [ 10, %endif41.i.i585 ] ; [#uses=2] + %p.1.i.i592 = phi i8* [ %p.2.i.i583, %if70.i.i589 ], [ %digits_arg27.i552, %endif89 ], [ %p.2.i.i583, %endif41.i.i585 ] ; [#uses=1] + %tmp84.i.i593 = ptrtoint i8* %p.1.i.i592 to i32 ; [#uses=1] + %tmp85.i.i594 = ptrtoint i8* %digits_arg27.i552 to i32 ; [#uses=1] + %tmp86.i.i595 = sub i32 %tmp84.i.i593, %tmp85.i.i594 ; [#uses=2] + %tmp6.i596 = sub i32 %digits_arg26.i551, %tmp86.i.i595 ; [#uses=1] + br label %foreachcond.i.i602 + +foreachcond.i.i602: ; preds = %if55.i.i631, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 + %value.0.i.i598 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 ], [ %tmp65.i.i628, %if55.i.i631 ] ; [#uses=3] + %foreachkey.0.i.i600 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 ], [ %tmp70.i.i630, %if55.i.i631 ] ; [#uses=3] + %tmp3.i.i601 = icmp ult i32 %foreachkey.0.i.i600, %tmp6.i596 ; [#uses=1] + br i1 %tmp3.i.i601, label %foreachbody.i.i608, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635 + +foreachbody.i.i608: ; preds = %foreachcond.i.i602 + %tmp5.sum.i603 = add i32 %tmp86.i.i595, %foreachkey.0.i.i600 ; [#uses=1] + %tmp5.i.i604 = getelementptr i8* %digits_arg27.i552, i32 %tmp5.sum.i603 ; [#uses=1] + %tmp6.i.i605 = load i8* %tmp5.i.i604 ; [#uses=6] + %tmp6.off84.i.i606 = add i8 %tmp6.i.i605, -48 ; [#uses=1] + %or.cond.i28.i607 = icmp ugt i8 %tmp6.off84.i.i606, 9 ; [#uses=1] + br i1 %or.cond.i28.i607, label %else.i.i611, label %endif.i.i624 + +else.i.i611: ; preds = %foreachbody.i.i608 + %tmp6.off83.i.i609 = add i8 %tmp6.i.i605, -97 ; [#uses=1] + %or.cond81.i.i610 = icmp ugt i8 %tmp6.off83.i.i609, 25 ; [#uses=1] + br i1 %or.cond81.i.i610, label %else24.i.i616, label %if22.i.i613 + +if22.i.i613: ; preds = %else.i.i611 + %tmp27.i.i612 = add i8 %tmp6.i.i605, -39 ; [#uses=1] + br label %endif.i.i624 + +else24.i.i616: ; preds = %else.i.i611 + %tmp6.off.i.i614 = add i8 %tmp6.i.i605, -65 ; [#uses=1] + %or.cond82.i.i615 = icmp ugt i8 %tmp6.off.i.i614, 25 ; [#uses=1] + br i1 %or.cond82.i.i615, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635, label %if39.i.i618 + +if39.i.i618: ; preds = %else24.i.i616 + %tmp44.i29.i617 = add i8 %tmp6.i.i605, -7 ; [#uses=1] + br label %endif.i.i624 + +endif.i.i624: ; preds = %if39.i.i618, %if22.i.i613, %foreachbody.i.i608 + %c.0.i30.i619 = phi i8 [ %tmp27.i.i612, %if22.i.i613 ], [ %tmp44.i29.i617, %if39.i.i618 ], [ %tmp6.i.i605, %foreachbody.i.i608 ] ; [#uses=1] + %tmp48.i31.i620 = zext i8 %c.0.i30.i619 to i32 ; [#uses=1] + %tmp49.i.i621 = add i32 %tmp48.i31.i620, 208 ; [#uses=1] + %tmp52.i.i622 = and i32 %tmp49.i.i621, 255 ; [#uses=2] + %tmp54.i.i623 = icmp ult i32 %tmp52.i.i622, %radix.0.i591 ; [#uses=1] + br i1 %tmp54.i.i623, label %if55.i.i631, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635 + +if55.i.i631: ; preds = %endif.i.i624 + %tmp59.i.i625 = zext i32 %radix.0.i591 to i64 ; [#uses=1] + %tmp61.i.i626 = mul i64 %value.0.i.i598, %tmp59.i.i625 ; [#uses=1] + %tmp64.i.i627 = zext i32 %tmp52.i.i622 to i64 ; [#uses=1] + %tmp65.i.i628 = add i64 %tmp61.i.i626, %tmp64.i.i627 ; [#uses=1] + %tmp70.i.i630 = add i32 %foreachkey.0.i.i600, 1 ; [#uses=1] + br label %foreachcond.i.i602 + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635: ; preds = %endif.i.i624, %else24.i.i616, %foreachcond.i.i602 + %negval.i633 = sub i64 0, %value.0.i.i598 ; [#uses=1] + %condtmp.0.i634 = select i1 %sign.2.i590, i64 %negval.i633, i64 %value.0.i.i598 ; [#uses=1] + %.newclass_gc_alloc135 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=6] + %vtbl137 = bitcast i8* %.newclass_gc_alloc135 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl137 + %monitor138 = getelementptr i8* %.newclass_gc_alloc135, i32 4 ; [#uses=1] + %5 = bitcast i8* %monitor138 to i8** ; [#uses=1] + store i8* null, i8** %5 + %tmp139 = getelementptr i8* %.newclass_gc_alloc135, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp139, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) + %tmp145 = trunc i64 %condtmp.0.i634 to i16 ; [#uses=1] + %tmp2.i636 = getelementptr i8* %.newclass_gc_alloc135, i32 20 ; [#uses=1] + %6 = bitcast i8* %tmp2.i636 to i32* ; [#uses=1] + store i32 %tmp126, i32* %6 + %tmp7.i637 = getelementptr i8* %.newclass_gc_alloc135, i32 18 ; [#uses=1] + %7 = bitcast i8* %tmp7.i637 to i16* ; [#uses=1] + store i16 %tmp145, i16* %7 + %tmp147 = bitcast i8* %.newclass_gc_alloc135 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] + br label %try + +else56: ; preds = %else + call fastcc void %this.sendCommand62(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str138, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp157 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl158" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp157, i32 0, i32 36 ; [#uses=1] + %this.readResponse160 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl158", align 4 ; [#uses=1] + call fastcc void %this.readResponse160(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp161, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str139, i32 0, i32 0) }) + %.rettmp161.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp161, i32 0, i32 1, i32 0 ; [#uses=1] + %tmp = load i32* %.rettmp161.1.0, align 4 ; [#uses=2] + %.rettmp161.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp161, i32 0, i32 1, i32 1 ; [#uses=1] + %tmp332 = load i8** %.rettmp161.1.1, align 4 ; [#uses=2] + %.newclass_gc_alloc.i638 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ) ; [#uses=4] + %.newclass_gc.i639 = bitcast i8* %.newclass_gc_alloc.i638 to %"tango.text.Regex.RegExpT!(char).RegExpT"* ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=9] + %vtbl.i640 = bitcast i8* %.newclass_gc_alloc.i638 to %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"**> [#uses=9] + store %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ, %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 + %monitor.i641 = getelementptr i8* %.newclass_gc_alloc.i638, i32 4 ; [#uses=1] + %8 = bitcast i8* %monitor.i641 to i8** ; [#uses=1] + store i8* null, i8** %8 + %tmp.i642 = getelementptr i8* %.newclass_gc_alloc.i638, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i642, i8* bitcast (%"Act[]"* getelementptr (%"tango.text.Regex.RegExpT!(char).RegExpT"* bitcast (%30* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ to %"tango.text.Regex.RegExpT!(char).RegExpT"*), i32 0, i32 2) to i8*), i32 36, i32 1) + %tmp2.i.i643 = call fastcc %"tango.text.Regex.RegExpT!(char).RegExpT"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT5_ctorMFAabbbZC5tango4text5Regex14__T7RegExpTTaZ7RegExpT(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, %"byte[]" { i32 53, i8* getelementptr ([54 x i8]* @.str140, i32 0, i32 0) }, i1 false, i1 true, i1 false) ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=0] + %tmp168 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.test at vtbl169" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp168, i32 0, i32 7 ; [#uses=1] + %r.test171 = load i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")** %"r.test at vtbl169", align 4 ; [#uses=1] + br label %foreachcond.i.i648 + +foreachcond.i.i648: ; preds = %foreachnext.i.i655, %else56 + %pos.0.i.i646 = phi i32 [ 0, %else56 ], [ %tmp12.i.i654, %foreachnext.i.i655 ] ; [#uses=4] + %tmp3.i.i647 = icmp ult i32 %pos.0.i.i646, %tmp ; [#uses=1] + br i1 %tmp3.i.i647, label %foreachbody.i.i652, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658 + +foreachbody.i.i652: ; preds = %foreachcond.i.i648 + %tmp5.i.i649 = getelementptr i8* %tmp332, i32 %pos.0.i.i646 ; [#uses=1] + %tmp6.i.i650 = load i8* %tmp5.i.i649 ; [#uses=1] + %tmp4.i.i.i651 = icmp eq i8 %tmp6.i.i650, 10 ; [#uses=1] + br i1 %tmp4.i.i.i651, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658, label %foreachnext.i.i655 + +foreachnext.i.i655: ; preds = %foreachbody.i.i652 + %tmp12.i.i654 = add i32 %pos.0.i.i646, 1 ; [#uses=1] + br label %foreachcond.i.i648 + +_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658: ; preds = %foreachbody.i.i652, %foreachcond.i.i648 + %tmp23.i657 = phi i32 [ %pos.0.i.i646, %foreachbody.i.i652 ], [ %tmp, %foreachcond.i.i648 ] ; [#uses=1] + %tmp180 = insertvalue %"byte[]" undef, i32 %tmp23.i657, 0 ; <%"byte[]"> [#uses=1] + %tmp181 = insertvalue %"byte[]" %tmp180, i8* %tmp332, 1 ; <%"byte[]"> [#uses=1] + %tmp182 = call fastcc i1 %r.test171(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, %"byte[]" %tmp181) ; [#uses=1] + br i1 %tmp182, label %endif184, label %if183 + +if183: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658 + %.newclass_gc_alloc185 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl187 = bitcast i8* %.newclass_gc_alloc185 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl187 + %monitor188 = getelementptr i8* %.newclass_gc_alloc185, i32 4 ; [#uses=1] + %9 = bitcast i8* %monitor188 to i8** ; [#uses=1] + store i8* null, i8** %9 + %tmp189 = getelementptr i8* %.newclass_gc_alloc185, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp189, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i659 = getelementptr i8* %.newclass_gc_alloc185, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i659, i8* getelementptr ([4 x i8]* @.str142, i32 0, i32 0), i32 3, i32 1) + %tmp5.i660 = bitcast i8* %.newclass_gc_alloc185 to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i661 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i660, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str141, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp194 = bitcast i8* %.newclass_gc_alloc185 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp194) + unreachable + +endif184: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658 + %tmp199 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl200" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp199, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match202 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl200", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp203 = call fastcc %"byte[]" %r.match202(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 1) ; <%"byte[]"> [#uses=2] + %.len = extractvalue %"byte[]" %tmp203, 0 ; [#uses=3] + %tmp204 = add i32 %.len, 1 ; [#uses=4] + %.nongc_mem = alloca i8, i32 %tmp204, align 1 ; [#uses=3] + %.ptr205 = extractvalue %"byte[]" %tmp203, 1 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %.nongc_mem, i8* %.ptr205, i32 %.len, i32 1) + %tmp207 = getelementptr i8* %.nongc_mem, i32 %.len ; [#uses=1] + store i8 46, i8* %tmp207, align 1 + %tmp210 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl211" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp210, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match213 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl211", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp214 = call fastcc %"byte[]" %r.match213(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 2) ; <%"byte[]"> [#uses=2] + %.len215 = extractvalue %"byte[]" %tmp214, 0 ; [#uses=2] + %tmp216 = add i32 %tmp204, %.len215 ; [#uses=4] + %.nongc_mem662 = alloca i8, i32 %tmp216, align 1 ; [#uses=3] + %.ptr218 = extractvalue %"byte[]" %tmp214, 1 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %.nongc_mem662, i8* %.nongc_mem, i32 %tmp204, i32 1) + %tmp220 = getelementptr i8* %.nongc_mem662, i32 %tmp204 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp220, i8* %.ptr218, i32 %.len215, i32 1) + %tmp222 = add i32 %tmp216, 1 ; [#uses=4] + %.nongc_mem663 = alloca i8, i32 %tmp222, align 1 ; [#uses=3] + call void @llvm.memcpy.i32(i8* %.nongc_mem663, i8* %.nongc_mem662, i32 %tmp216, i32 1) + %tmp225 = getelementptr i8* %.nongc_mem663, i32 %tmp216 ; [#uses=1] + store i8 46, i8* %tmp225, align 1 + %tmp228 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl229" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp228, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match231 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl229", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp232 = call fastcc %"byte[]" %r.match231(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 3) ; <%"byte[]"> [#uses=2] + %.len233 = extractvalue %"byte[]" %tmp232, 0 ; [#uses=2] + %tmp234 = add i32 %tmp222, %.len233 ; [#uses=4] + %.nongc_mem664 = alloca i8, i32 %tmp234, align 1 ; [#uses=3] + %.ptr236 = extractvalue %"byte[]" %tmp232, 1 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %.nongc_mem664, i8* %.nongc_mem663, i32 %tmp222, i32 1) + %tmp238 = getelementptr i8* %.nongc_mem664, i32 %tmp222 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp238, i8* %.ptr236, i32 %.len233, i32 1) + %tmp240 = add i32 %tmp234, 1 ; [#uses=4] + %.nongc_mem665 = alloca i8, i32 %tmp240, align 1 ; [#uses=3] + call void @llvm.memcpy.i32(i8* %.nongc_mem665, i8* %.nongc_mem664, i32 %tmp234, i32 1) + %tmp243 = getelementptr i8* %.nongc_mem665, i32 %tmp234 ; [#uses=1] + store i8 46, i8* %tmp243, align 1 + %tmp246 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl247" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp246, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match249 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl247", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp250 = call fastcc %"byte[]" %r.match249(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 4) ; <%"byte[]"> [#uses=2] + %.len251 = extractvalue %"byte[]" %tmp250, 0 ; [#uses=2] + %tmp252 = add i32 %tmp240, %.len251 ; [#uses=2] + %.gc_mem253 = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp252) ; [#uses=3] + %.ptr254 = extractvalue %"byte[]" %tmp250, 1 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %.gc_mem253, i8* %.nongc_mem665, i32 %tmp240, i32 1) + %tmp256 = getelementptr i8* %.gc_mem253, i32 %tmp240 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp256, i8* %.ptr254, i32 %.len251, i32 1) + %tmp263 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl264" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp263, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match266 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl264", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp267 = call fastcc %"byte[]" %r.match266(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 5) ; <%"byte[]"> [#uses=2] + %digits_arg26.i464 = extractvalue %"byte[]" %tmp267, 0 ; [#uses=3] + %digits_arg27.i465 = extractvalue %"byte[]" %tmp267, 1 ; [#uses=5] + %tmp4.i.i466 = icmp eq i32 %digits_arg26.i464, 0 ; [#uses=1] + br i1 %tmp4.i.i466, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510, label %forcond.i.i473 + +forcond.i.i473: ; preds = %forinc.i.i480, %endif184 + %sign.1.i467 = phi i1 [ false, %endif184 ], [ %sign.0.i477, %forinc.i.i480 ] ; [#uses=4] + %len.0.i.i468 = phi i32 [ %tmp33.i.i479, %forinc.i.i480 ], [ %digits_arg26.i464, %endif184 ] ; [#uses=3] + %p.0.i.i469 = phi i8* [ %tmp30.i.i478, %forinc.i.i480 ], [ %digits_arg27.i465, %endif184 ] ; [#uses=6] + %c.0.in.i.i470 = phi i8* [ %tmp30.i.i478, %forinc.i.i480 ], [ %digits_arg27.i465, %endif184 ] ; [#uses=1] + %c.0.i.i471 = load i8* %c.0.in.i.i470 ; [#uses=2] + %tmp8.i.i472 = icmp eq i32 %len.0.i.i468, 0 ; [#uses=1] + br i1 %tmp8.i.i472, label %endfor.i.i484, label %forbody.i.i474 + +forbody.i.i474: ; preds = %forcond.i.i473 + switch i8 %c.0.i.i471, label %endfor.i.i484 [ + i8 32, label %forinc.i.i480 + i8 9, label %forinc.i.i480 + i8 45, label %if20.i.i475 + i8 43, label %if26.i.i476 + ] + +if20.i.i475: ; preds = %forbody.i.i474 + br label %forinc.i.i480 + +if26.i.i476: ; preds = %forbody.i.i474 + br label %forinc.i.i480 + +forinc.i.i480: ; preds = %if26.i.i476, %if20.i.i475, %forbody.i.i474, %forbody.i.i474 + %sign.0.i477 = phi i1 [ false, %if26.i.i476 ], [ true, %if20.i.i475 ], [ %sign.1.i467, %forbody.i.i474 ], [ %sign.1.i467, %forbody.i.i474 ] ; [#uses=1] + %tmp30.i.i478 = getelementptr i8* %p.0.i.i469, i32 1 ; [#uses=2] + %tmp33.i.i479 = add i32 %len.0.i.i468, -1 ; [#uses=1] + br label %forcond.i.i473 + +endfor.i.i484: ; preds = %forbody.i.i474, %forcond.i.i473 + %tmp37.i.i481 = icmp eq i8 %c.0.i.i471, 48 ; [#uses=1] + %tmp39.i.i482 = icmp sgt i32 %len.0.i.i468, 1 ; [#uses=1] + %or.cond.i.i483 = and i1 %tmp37.i.i481, %tmp39.i.i482 ; [#uses=1] + br i1 %or.cond.i.i483, label %if40.i.i488, label %endif41.i.i498 + +if40.i.i488: ; preds = %endfor.i.i484 + %tmp43.i.i485 = getelementptr i8* %p.0.i.i469, i32 1 ; [#uses=2] + %tmp44.i.i486 = load i8* %tmp43.i.i485 ; [#uses=1] + %tmp45.i.i487 = zext i8 %tmp44.i.i486 to i32 ; [#uses=1] + switch i32 %tmp45.i.i487, label %endif41.i.i498 [ + i32 120, label %case46.i.i490 + i32 88, label %case46.i.i490 + i32 98, label %case51.i.i492 + i32 66, label %case51.i.i492 + i32 111, label %case56.i.i494 + i32 79, label %case56.i.i494 + ] + +case46.i.i490: ; preds = %if40.i.i488, %if40.i.i488 + %tmp48.i.i489 = getelementptr i8* %p.0.i.i469, i32 2 ; [#uses=1] + br label %endif41.i.i498 + +case51.i.i492: ; preds = %if40.i.i488, %if40.i.i488 + %tmp53.i.i491 = getelementptr i8* %p.0.i.i469, i32 2 ; [#uses=1] + br label %endif41.i.i498 + +case56.i.i494: ; preds = %if40.i.i488, %if40.i.i488 + %tmp58.i.i493 = getelementptr i8* %p.0.i.i469, i32 2 ; [#uses=1] + br label %endif41.i.i498 + +endif41.i.i498: ; preds = %case56.i.i494, %case51.i.i492, %case46.i.i490, %if40.i.i488, %endfor.i.i484 + %r.0.i.i495 = phi i32 [ 0, %if40.i.i488 ], [ 8, %case56.i.i494 ], [ 2, %case51.i.i492 ], [ 16, %case46.i.i490 ], [ 0, %endfor.i.i484 ] ; [#uses=2] + %p.2.i.i496 = phi i8* [ %tmp43.i.i485, %if40.i.i488 ], [ %tmp58.i.i493, %case56.i.i494 ], [ %tmp53.i.i491, %case51.i.i492 ], [ %tmp48.i.i489, %case46.i.i490 ], [ %p.0.i.i469, %endfor.i.i484 ] ; [#uses=2] + %tmp63.i.i497 = icmp eq i32 %r.0.i.i495, 0 ; [#uses=1] + br i1 %tmp63.i.i497, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510, label %if70.i.i502 + +if70.i.i502: ; preds = %endif41.i.i498 + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510: ; preds = %if70.i.i502, %endif41.i.i498, %endif184 + %sign.2.i503 = phi i1 [ false, %endif184 ], [ %sign.1.i467, %if70.i.i502 ], [ %sign.1.i467, %endif41.i.i498 ] ; [#uses=1] + %radix.0.i504 = phi i32 [ 0, %endif184 ], [ %r.0.i.i495, %if70.i.i502 ], [ 10, %endif41.i.i498 ] ; [#uses=2] + %p.1.i.i505 = phi i8* [ %p.2.i.i496, %if70.i.i502 ], [ %digits_arg27.i465, %endif184 ], [ %p.2.i.i496, %endif41.i.i498 ] ; [#uses=1] + %tmp84.i.i506 = ptrtoint i8* %p.1.i.i505 to i32 ; [#uses=1] + %tmp85.i.i507 = ptrtoint i8* %digits_arg27.i465 to i32 ; [#uses=1] + %tmp86.i.i508 = sub i32 %tmp84.i.i506, %tmp85.i.i507 ; [#uses=2] + %tmp6.i509 = sub i32 %digits_arg26.i464, %tmp86.i.i508 ; [#uses=1] + br label %foreachcond.i.i515 + +foreachcond.i.i515: ; preds = %if55.i.i544, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 + %value.0.i.i511 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 ], [ %tmp65.i.i541, %if55.i.i544 ] ; [#uses=3] + %foreachkey.0.i.i513 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 ], [ %tmp70.i.i543, %if55.i.i544 ] ; [#uses=3] + %tmp3.i.i514 = icmp ult i32 %foreachkey.0.i.i513, %tmp6.i509 ; [#uses=1] + br i1 %tmp3.i.i514, label %foreachbody.i.i521, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 + +foreachbody.i.i521: ; preds = %foreachcond.i.i515 + %tmp5.sum.i516 = add i32 %tmp86.i.i508, %foreachkey.0.i.i513 ; [#uses=1] + %tmp5.i.i517 = getelementptr i8* %digits_arg27.i465, i32 %tmp5.sum.i516 ; [#uses=1] + %tmp6.i.i518 = load i8* %tmp5.i.i517 ; [#uses=6] + %tmp6.off84.i.i519 = add i8 %tmp6.i.i518, -48 ; [#uses=1] + %or.cond.i28.i520 = icmp ugt i8 %tmp6.off84.i.i519, 9 ; [#uses=1] + br i1 %or.cond.i28.i520, label %else.i.i524, label %endif.i.i537 + +else.i.i524: ; preds = %foreachbody.i.i521 + %tmp6.off83.i.i522 = add i8 %tmp6.i.i518, -97 ; [#uses=1] + %or.cond81.i.i523 = icmp ugt i8 %tmp6.off83.i.i522, 25 ; [#uses=1] + br i1 %or.cond81.i.i523, label %else24.i.i529, label %if22.i.i526 + +if22.i.i526: ; preds = %else.i.i524 + %tmp27.i.i525 = add i8 %tmp6.i.i518, -39 ; [#uses=1] + br label %endif.i.i537 + +else24.i.i529: ; preds = %else.i.i524 + %tmp6.off.i.i527 = add i8 %tmp6.i.i518, -65 ; [#uses=1] + %or.cond82.i.i528 = icmp ugt i8 %tmp6.off.i.i527, 25 ; [#uses=1] + br i1 %or.cond82.i.i528, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548, label %if39.i.i531 + +if39.i.i531: ; preds = %else24.i.i529 + %tmp44.i29.i530 = add i8 %tmp6.i.i518, -7 ; [#uses=1] + br label %endif.i.i537 + +endif.i.i537: ; preds = %if39.i.i531, %if22.i.i526, %foreachbody.i.i521 + %c.0.i30.i532 = phi i8 [ %tmp27.i.i525, %if22.i.i526 ], [ %tmp44.i29.i530, %if39.i.i531 ], [ %tmp6.i.i518, %foreachbody.i.i521 ] ; [#uses=1] + %tmp48.i31.i533 = zext i8 %c.0.i30.i532 to i32 ; [#uses=1] + %tmp49.i.i534 = add i32 %tmp48.i31.i533, 208 ; [#uses=1] + %tmp52.i.i535 = and i32 %tmp49.i.i534, 255 ; [#uses=2] + %tmp54.i.i536 = icmp ult i32 %tmp52.i.i535, %radix.0.i504 ; [#uses=1] + br i1 %tmp54.i.i536, label %if55.i.i544, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 + +if55.i.i544: ; preds = %endif.i.i537 + %tmp59.i.i538 = zext i32 %radix.0.i504 to i64 ; [#uses=1] + %tmp61.i.i539 = mul i64 %value.0.i.i511, %tmp59.i.i538 ; [#uses=1] + %tmp64.i.i540 = zext i32 %tmp52.i.i535 to i64 ; [#uses=1] + %tmp65.i.i541 = add i64 %tmp61.i.i539, %tmp64.i.i540 ; [#uses=1] + %tmp70.i.i543 = add i32 %foreachkey.0.i.i513, 1 ; [#uses=1] + br label %foreachcond.i.i515 + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548: ; preds = %endif.i.i537, %else24.i.i529, %foreachcond.i.i515 + %negval.i546 = sub i64 0, %value.0.i.i511 ; [#uses=1] + %condtmp.0.i547 = select i1 %sign.2.i503, i64 %negval.i546, i64 %value.0.i.i511 ; [#uses=1] + %tmp269 = trunc i64 %condtmp.0.i547 to i32 ; [#uses=1] + %tmp270 = shl i32 %tmp269, 8 ; [#uses=1] + %tmp273 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl274" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp273, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match276 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl274", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp277 = call fastcc %"byte[]" %r.match276(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 7) ; <%"byte[]"> [#uses=1] + %.len278 = extractvalue %"byte[]" %tmp277, 0 ; [#uses=1] + %tmp279 = icmp eq i32 %.len278, 0 ; [#uses=1] + br i1 %tmp279, label %condend, label %condtrue + +condtrue: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 + %tmp282 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl283" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp282, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match285 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl283", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp286 = call fastcc %"byte[]" %r.match285(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 7) ; <%"byte[]"> [#uses=2] + %digits_arg26.i375 = extractvalue %"byte[]" %tmp286, 0 ; [#uses=3] + %digits_arg27.i376 = extractvalue %"byte[]" %tmp286, 1 ; [#uses=5] + %tmp4.i.i377 = icmp eq i32 %digits_arg26.i375, 0 ; [#uses=1] + br i1 %tmp4.i.i377, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421, label %forcond.i.i384 + +forcond.i.i384: ; preds = %forinc.i.i391, %condtrue + %sign.1.i378 = phi i1 [ false, %condtrue ], [ %sign.0.i388, %forinc.i.i391 ] ; [#uses=4] + %len.0.i.i379 = phi i32 [ %tmp33.i.i390, %forinc.i.i391 ], [ %digits_arg26.i375, %condtrue ] ; [#uses=3] + %p.0.i.i380 = phi i8* [ %tmp30.i.i389, %forinc.i.i391 ], [ %digits_arg27.i376, %condtrue ] ; [#uses=6] + %c.0.in.i.i381 = phi i8* [ %tmp30.i.i389, %forinc.i.i391 ], [ %digits_arg27.i376, %condtrue ] ; [#uses=1] + %c.0.i.i382 = load i8* %c.0.in.i.i381 ; [#uses=2] + %tmp8.i.i383 = icmp eq i32 %len.0.i.i379, 0 ; [#uses=1] + br i1 %tmp8.i.i383, label %endfor.i.i395, label %forbody.i.i385 + +forbody.i.i385: ; preds = %forcond.i.i384 + switch i8 %c.0.i.i382, label %endfor.i.i395 [ + i8 32, label %forinc.i.i391 + i8 9, label %forinc.i.i391 + i8 45, label %if20.i.i386 + i8 43, label %if26.i.i387 + ] + +if20.i.i386: ; preds = %forbody.i.i385 + br label %forinc.i.i391 + +if26.i.i387: ; preds = %forbody.i.i385 + br label %forinc.i.i391 + +forinc.i.i391: ; preds = %if26.i.i387, %if20.i.i386, %forbody.i.i385, %forbody.i.i385 + %sign.0.i388 = phi i1 [ false, %if26.i.i387 ], [ true, %if20.i.i386 ], [ %sign.1.i378, %forbody.i.i385 ], [ %sign.1.i378, %forbody.i.i385 ] ; [#uses=1] + %tmp30.i.i389 = getelementptr i8* %p.0.i.i380, i32 1 ; [#uses=2] + %tmp33.i.i390 = add i32 %len.0.i.i379, -1 ; [#uses=1] + br label %forcond.i.i384 + +endfor.i.i395: ; preds = %forbody.i.i385, %forcond.i.i384 + %tmp37.i.i392 = icmp eq i8 %c.0.i.i382, 48 ; [#uses=1] + %tmp39.i.i393 = icmp sgt i32 %len.0.i.i379, 1 ; [#uses=1] + %or.cond.i.i394 = and i1 %tmp37.i.i392, %tmp39.i.i393 ; [#uses=1] + br i1 %or.cond.i.i394, label %if40.i.i399, label %endif41.i.i409 + +if40.i.i399: ; preds = %endfor.i.i395 + %tmp43.i.i396 = getelementptr i8* %p.0.i.i380, i32 1 ; [#uses=2] + %tmp44.i.i397 = load i8* %tmp43.i.i396 ; [#uses=1] + %tmp45.i.i398 = zext i8 %tmp44.i.i397 to i32 ; [#uses=1] + switch i32 %tmp45.i.i398, label %endif41.i.i409 [ + i32 120, label %case46.i.i401 + i32 88, label %case46.i.i401 + i32 98, label %case51.i.i403 + i32 66, label %case51.i.i403 + i32 111, label %case56.i.i405 + i32 79, label %case56.i.i405 + ] + +case46.i.i401: ; preds = %if40.i.i399, %if40.i.i399 + %tmp48.i.i400 = getelementptr i8* %p.0.i.i380, i32 2 ; [#uses=1] + br label %endif41.i.i409 + +case51.i.i403: ; preds = %if40.i.i399, %if40.i.i399 + %tmp53.i.i402 = getelementptr i8* %p.0.i.i380, i32 2 ; [#uses=1] + br label %endif41.i.i409 + +case56.i.i405: ; preds = %if40.i.i399, %if40.i.i399 + %tmp58.i.i404 = getelementptr i8* %p.0.i.i380, i32 2 ; [#uses=1] + br label %endif41.i.i409 + +endif41.i.i409: ; preds = %case56.i.i405, %case51.i.i403, %case46.i.i401, %if40.i.i399, %endfor.i.i395 + %r.0.i.i406 = phi i32 [ 0, %if40.i.i399 ], [ 8, %case56.i.i405 ], [ 2, %case51.i.i403 ], [ 16, %case46.i.i401 ], [ 0, %endfor.i.i395 ] ; [#uses=2] + %p.2.i.i407 = phi i8* [ %tmp43.i.i396, %if40.i.i399 ], [ %tmp58.i.i404, %case56.i.i405 ], [ %tmp53.i.i402, %case51.i.i403 ], [ %tmp48.i.i400, %case46.i.i401 ], [ %p.0.i.i380, %endfor.i.i395 ] ; [#uses=2] + %tmp63.i.i408 = icmp eq i32 %r.0.i.i406, 0 ; [#uses=1] + br i1 %tmp63.i.i408, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421, label %if70.i.i413 + +if70.i.i413: ; preds = %endif41.i.i409 + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421: ; preds = %if70.i.i413, %endif41.i.i409, %condtrue + %sign.2.i414 = phi i1 [ false, %condtrue ], [ %sign.1.i378, %if70.i.i413 ], [ %sign.1.i378, %endif41.i.i409 ] ; [#uses=1] + %radix.0.i415 = phi i32 [ 0, %condtrue ], [ %r.0.i.i406, %if70.i.i413 ], [ 10, %endif41.i.i409 ] ; [#uses=2] + %p.1.i.i416 = phi i8* [ %p.2.i.i407, %if70.i.i413 ], [ %digits_arg27.i376, %condtrue ], [ %p.2.i.i407, %endif41.i.i409 ] ; [#uses=1] + %tmp84.i.i417 = ptrtoint i8* %p.1.i.i416 to i32 ; [#uses=1] + %tmp85.i.i418 = ptrtoint i8* %digits_arg27.i376 to i32 ; [#uses=1] + %tmp86.i.i419 = sub i32 %tmp84.i.i417, %tmp85.i.i418 ; [#uses=2] + %tmp6.i420 = sub i32 %digits_arg26.i375, %tmp86.i.i419 ; [#uses=1] + br label %foreachcond.i.i426 + +foreachcond.i.i426: ; preds = %if55.i.i455, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 + %value.0.i.i422 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 ], [ %tmp65.i.i452, %if55.i.i455 ] ; [#uses=3] + %foreachkey.0.i.i424 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 ], [ %tmp70.i.i454, %if55.i.i455 ] ; [#uses=3] + %tmp3.i.i425 = icmp ult i32 %foreachkey.0.i.i424, %tmp6.i420 ; [#uses=1] + br i1 %tmp3.i.i425, label %foreachbody.i.i432, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458 + +foreachbody.i.i432: ; preds = %foreachcond.i.i426 + %tmp5.sum.i427 = add i32 %tmp86.i.i419, %foreachkey.0.i.i424 ; [#uses=1] + %tmp5.i.i428 = getelementptr i8* %digits_arg27.i376, i32 %tmp5.sum.i427 ; [#uses=1] + %tmp6.i.i429 = load i8* %tmp5.i.i428 ; [#uses=6] + %tmp6.off84.i.i430 = add i8 %tmp6.i.i429, -48 ; [#uses=1] + %or.cond.i28.i431 = icmp ugt i8 %tmp6.off84.i.i430, 9 ; [#uses=1] + br i1 %or.cond.i28.i431, label %else.i.i435, label %endif.i.i448 + +else.i.i435: ; preds = %foreachbody.i.i432 + %tmp6.off83.i.i433 = add i8 %tmp6.i.i429, -97 ; [#uses=1] + %or.cond81.i.i434 = icmp ugt i8 %tmp6.off83.i.i433, 25 ; [#uses=1] + br i1 %or.cond81.i.i434, label %else24.i.i440, label %if22.i.i437 + +if22.i.i437: ; preds = %else.i.i435 + %tmp27.i.i436 = add i8 %tmp6.i.i429, -39 ; [#uses=1] + br label %endif.i.i448 + +else24.i.i440: ; preds = %else.i.i435 + %tmp6.off.i.i438 = add i8 %tmp6.i.i429, -65 ; [#uses=1] + %or.cond82.i.i439 = icmp ugt i8 %tmp6.off.i.i438, 25 ; [#uses=1] + br i1 %or.cond82.i.i439, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458, label %if39.i.i442 + +if39.i.i442: ; preds = %else24.i.i440 + %tmp44.i29.i441 = add i8 %tmp6.i.i429, -7 ; [#uses=1] + br label %endif.i.i448 + +endif.i.i448: ; preds = %if39.i.i442, %if22.i.i437, %foreachbody.i.i432 + %c.0.i30.i443 = phi i8 [ %tmp27.i.i436, %if22.i.i437 ], [ %tmp44.i29.i441, %if39.i.i442 ], [ %tmp6.i.i429, %foreachbody.i.i432 ] ; [#uses=1] + %tmp48.i31.i444 = zext i8 %c.0.i30.i443 to i32 ; [#uses=1] + %tmp49.i.i445 = add i32 %tmp48.i31.i444, 208 ; [#uses=1] + %tmp52.i.i446 = and i32 %tmp49.i.i445, 255 ; [#uses=2] + %tmp54.i.i447 = icmp ult i32 %tmp52.i.i446, %radix.0.i415 ; [#uses=1] + br i1 %tmp54.i.i447, label %if55.i.i455, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458 + +if55.i.i455: ; preds = %endif.i.i448 + %tmp59.i.i449 = zext i32 %radix.0.i415 to i64 ; [#uses=1] + %tmp61.i.i450 = mul i64 %value.0.i.i422, %tmp59.i.i449 ; [#uses=1] + %tmp64.i.i451 = zext i32 %tmp52.i.i446 to i64 ; [#uses=1] + %tmp65.i.i452 = add i64 %tmp61.i.i450, %tmp64.i.i451 ; [#uses=1] + %tmp70.i.i454 = add i32 %foreachkey.0.i.i424, 1 ; [#uses=1] + br label %foreachcond.i.i426 + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458: ; preds = %endif.i.i448, %else24.i.i440, %foreachcond.i.i426 + %negval.i456 = sub i64 0, %value.0.i.i422 ; [#uses=1] + %condtmp.0.i457 = select i1 %sign.2.i414, i64 %negval.i456, i64 %value.0.i.i422 ; [#uses=1] + %tmp288 = trunc i64 %condtmp.0.i457 to i32 ; [#uses=1] + br label %condend + +condend: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 + %condtmp.0 = phi i32 [ %tmp288, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458 ], [ 0, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 ] ; [#uses=1] + %tmp290 = add i32 %tmp270, %condtmp.0 ; [#uses=1] + %.newclass_gc_alloc291 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=4] + %.newclass_gc292 = bitcast i8* %.newclass_gc_alloc291 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %vtbl293 = bitcast i8* %.newclass_gc_alloc291 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] + store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl293 + %monitor294 = getelementptr i8* %.newclass_gc_alloc291, i32 4 ; [#uses=1] + %10 = bitcast i8* %monitor294 to i8** ; [#uses=1] + store i8* null, i8** %10 + %tmp295 = getelementptr i8* %.newclass_gc_alloc291, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp295, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) + %insert = insertvalue %"byte[]" undef, i32 %tmp252, 0 ; <%"byte[]"> [#uses=1] + %insert327 = insertvalue %"byte[]" %insert, i8* %.gc_mem253, 1 ; <%"byte[]"> [#uses=1] + %tmp301 = call fastcc %tango.net.Socket.IPv4Address* @_D5tango3net6Socket11IPv4Address5_ctorMFAaiZC5tango3net6Socket11IPv4Address(%tango.net.Socket.IPv4Address* %.newclass_gc292, %"byte[]" %insert327, i32 %tmp290) ; <%tango.net.Socket.IPv4Address*> [#uses=1] + %tmp302 = bitcast %tango.net.Socket.IPv4Address* %tmp301 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] + br label %try + +try: ; preds = %condend, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + %connect_to.0 = phi %tango.net.Socket.Address* [ %tmp46, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit ], [ %tmp147, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635 ], [ %tmp302, %condend ] ; <%tango.net.Socket.Address*> [#uses=3] + %.newclass_gc_alloc304 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net13SocketConduit13SocketConduit7__ClassZ) + to label %postinvoke unwind label %landingpad ; [#uses=5] + +postinvoke: ; preds = %try + %.newclass_gc305 = bitcast i8* %.newclass_gc_alloc304 to %tango.net.SocketConduit.SocketConduit* ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %vtbl306 = bitcast i8* %.newclass_gc_alloc304 to %tango.net.SocketConduit.SocketConduit.__vtbl** ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=2] + store %tango.net.SocketConduit.SocketConduit.__vtbl* @_D5tango3net13SocketConduit13SocketConduit6__vtblZ, %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl306 + %monitor307 = getelementptr i8* %.newclass_gc_alloc304, i32 4 ; [#uses=1] + %11 = bitcast i8* %monitor307 to i8** ; [#uses=1] + store i8* null, i8** %11 + %tmp308 = getelementptr i8* %.newclass_gc_alloc304, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp308, i8* bitcast (%15** getelementptr (%tango.net.SocketConduit.SocketConduit* bitcast (%23* @_D5tango3net13SocketConduit13SocketConduit6__initZ to %tango.net.SocketConduit.SocketConduit*), i32 0, i32 2) to i8*), i32 40, i32 1) + %tmp1.i.i.i = getelementptr i8* %.newclass_gc_alloc304, i32 28 ; [#uses=1] + %12 = bitcast i8* %tmp1.i.i.i to %tango.net.Socket.Socket** ; <%tango.net.Socket.Socket**> [#uses=1] + %.newclass_gc_alloc.i.i.i374 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket6Socket7__ClassZ) + to label %.newclass_gc_alloc.i.i.i.noexc unwind label %landingpad ; [#uses=7] + +.newclass_gc_alloc.i.i.i.noexc: ; preds = %postinvoke + %.newclass_gc.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i374 to %tango.net.Socket.Socket* ; <%tango.net.Socket.Socket*> [#uses=2] + %vtbl.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i374 to %tango.net.Socket.Socket.__vtbl** ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + store %tango.net.Socket.Socket.__vtbl* @_D5tango3net6Socket6Socket6__vtblZ, %tango.net.Socket.Socket.__vtbl** %vtbl.i.i.i + %monitor.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 4 ; [#uses=1] + %13 = bitcast i8* %monitor.i.i.i to i8** ; [#uses=1] + store i8* null, i8** %13 + %tmp2.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i.i.i, i8* bitcast (i32* getelementptr (%tango.net.Socket.Socket* bitcast (%25* @_D5tango3net6Socket6Socket6__initZ to %tango.net.Socket.Socket*), i32 0, i32 2) to i8*), i32 16, i32 1) + %tmp1.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 12 ; [#uses=1] + %14 = bitcast i8* %tmp1.i.i.i.i to i32* ; [#uses=1] + store i32 1, i32* %14 + %tmp4.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 16 ; [#uses=1] + %15 = bitcast i8* %tmp4.i.i.i.i to i32* ; [#uses=1] + store i32 2, i32* %15 + %tmp7.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 20 ; [#uses=1] + %16 = bitcast i8* %tmp7.i.i.i.i to i32* ; [#uses=1] + store i32 6, i32* %16 + invoke fastcc void @_D5tango3net6Socket6Socket10initializeMFT5tango3net6Socket8socket_tZv(%tango.net.Socket.Socket* %.newclass_gc.i.i.i, i32 -1) + to label %_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit unwind label %landingpad + +_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit: ; preds = %.newclass_gc_alloc.i.i.i.noexc + store %tango.net.Socket.Socket* %.newclass_gc.i.i.i, %tango.net.Socket.Socket** %12 + %tmp316 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl306 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"sock.connect at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp316, i32 0, i32 18 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)**> [#uses=1] + %sock.connect = load %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)** %"sock.connect at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*> [#uses=1] + %tmp320 = invoke fastcc %tango.net.SocketConduit.SocketConduit* %sock.connect(%tango.net.SocketConduit.SocketConduit* %.newclass_gc305, %tango.net.Socket.Address* %connect_to.0) + to label %postinvoke319 unwind label %landingpad ; <%tango.net.SocketConduit.SocketConduit*> [#uses=0] + +postinvoke319: ; preds = %_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit + %.tmp323 = bitcast %tango.net.Socket.Address* %connect_to.0 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp323) + ret %tango.net.SocketConduit.SocketConduit* %.newclass_gc305 + +landingpad: ; preds = %_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit, %.newclass_gc_alloc.i.i.i.noexc, %postinvoke, %try + %17 = call i8* @llvm.eh.exception() ; [#uses=2] + %18 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %17, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %.tmp = bitcast %tango.net.Socket.Address* %connect_to.0 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp) + call void @_d_eh_resume_unwind(i8* %17) + unreachable +} + +define fastcc i1 @_D5tango3net3ftp9FtpClient13FTPConnection11isSupportedMFAaZb(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %command_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] + %.len = load i32* %tmp2 ; [#uses=2] + %tmp3 = icmp eq i32 %.len, 0 ; [#uses=1] + br i1 %tmp3, label %if, label %endif + +if: ; preds = %entry + ret i1 true + +endif: ; preds = %entry + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] + %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp8 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=2] + br label %foreachcond + +foreachcond: ; preds = %foreachnext, %endif + %foreachkey.0 = phi i32 [ 0, %endif ], [ %tmp24, %foreachnext ] ; [#uses=4] + %tmp10 = icmp ult i32 %foreachkey.0, %.len ; [#uses=1] + br i1 %tmp10, label %foreachbody, label %foreachend + +foreachbody: ; preds = %foreachcond + %tmp1231.0 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr, i32 %foreachkey.0, i32 0, i32 0 ; [#uses=1] + %tmp32 = load i32* %tmp1231.0 ; [#uses=3] + %tmp1231.1 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr, i32 %foreachkey.0, i32 0, i32 1 ; [#uses=1] + %tmp33 = load i8** %tmp1231.1, align 4 ; [#uses=1] + %s2_arg22.i = extractvalue %"byte[]" %command_arg, 0 ; [#uses=3] + %s2_arg23.i = extractvalue %"byte[]" %command_arg, 1 ; [#uses=1] + %tmp4.i = icmp ult i32 %s2_arg22.i, %tmp32 ; [#uses=1] + %len.0.i = select i1 %tmp4.i, i32 %s2_arg22.i, i32 %tmp32 ; [#uses=1] + %tmp11.i = tail call i32 @strncasecmp(i8* %tmp33, i8* %s2_arg23.i, i32 %len.0.i) ; [#uses=2] + %tmp20.i = sub i32 %tmp32, %s2_arg22.i ; [#uses=1] + %tmp13.i = icmp eq i32 %tmp11.i, 0 ; [#uses=1] + %tmp20.tmp11.i = select i1 %tmp13.i, i32 %tmp20.i, i32 %tmp11.i ; [#uses=1] + %tmp19 = icmp eq i32 %tmp20.tmp11.i, 0 ; [#uses=1] + br i1 %tmp19, label %if20, label %foreachnext + +if20: ; preds = %foreachbody + ret i1 true + +foreachnext: ; preds = %foreachbody + %tmp24 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +foreachend: ; preds = %foreachcond + ret i1 false +} + +define fastcc i1 @_D5tango3net3ftp9FtpClient13FTPConnection12is_supportedMFAaZb(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] + %.len = load i32* %tmp2 ; [#uses=1] + %tmp3 = icmp eq i32 %.len, 0 ; [#uses=1] + br i1 %tmp3, label %if, label %endif + +if: ; preds = %entry + ret i1 false + +endif: ; preds = %entry + %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp5 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.isSupported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 41 ; [#uses=1] + %this.isSupported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.isSupported at vtbl", align 4 ; [#uses=1] + %tmp9 = tail call fastcc i1 %this.isSupported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg) ; [#uses=1] + ret i1 %tmp9 +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection17prepareDataSocketMFKC5tango3net13SocketConduit13SocketConduitZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit** nocapture %data_arg) { +entry: + %tv.i = alloca %tango.net.Socket.timeval, align 8 ; <%tango.net.Socket.timeval*> [#uses=2] + %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp20 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp25 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp53 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] + %tmp3 = load i32* %tmp2 ; [#uses=1] + switch i32 %tmp3, label %default4 [ + i32 0, label %case + i32 1, label %switchend + ] + +default4: ; preds = %entry + %tmp6 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp6 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 5 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] + call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 23, i8* getelementptr ([24 x i8]* @.str146, i32 0, i32 0) }) + br label %case + +case: ; preds = %default4, %entry + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket9SocketSet7__ClassZ) ; [#uses=8] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet* ; <%tango.net.Socket.SocketSet*> [#uses=3] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet.__vtbl** ; <%tango.net.Socket.SocketSet.__vtbl**> [#uses=3] + store %tango.net.Socket.SocketSet.__vtbl* @_D5tango3net6Socket9SocketSet6__vtblZ, %tango.net.Socket.SocketSet.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp9 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp9, i8* bitcast (i32* getelementptr (%tango.net.Socket.SocketSet* bitcast (%24* @_D5tango3net6Socket9SocketSet6__initZ to %tango.net.Socket.SocketSet*), i32 0, i32 2) to i8*), i32 16, i32 1) + %1 = bitcast i8* %tmp9 to i32* ; [#uses=2] + store i32 128, i32* %1 + %tmp9.i.i = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %2 = bitcast i8* %tmp9.i.i to i8** ; [#uses=1] + %.gc_mem.i.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ag6__initZ, i32 128) ; [#uses=1] + store i8* %.gc_mem.i.i, i8** %2 + %tmp14.i.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %3 = bitcast i8* %tmp14.i.i to i32* ; [#uses=1] + %tmp17.i.i = load i32* %1 ; [#uses=1] + %tmp18.i.i = shl i32 %tmp17.i.i, 3 ; [#uses=1] + store i32 %tmp18.i.i, i32* %3 + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %case + %tmp17 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp17 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 10 ; [#uses=1] + %this.timeout = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.timeout(%tango.time.Time.Time* noalias nocapture sret %.rettmp20, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke21 unwind label %landingpad + +postinvoke21: ; preds = %postinvoke + %.rettmp20.0 = getelementptr %tango.time.Time.Time* %.rettmp20, i32 0, i32 0 ; [#uses=1] + %tmp = load i64* %.rettmp20.0, align 8 ; [#uses=1] + %tmp1.i = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] + %tmp3.i = load i64* %tmp1.i, align 8 ; [#uses=1] + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp25) + to label %postinvoke26 unwind label %landingpad + +whilebody: ; preds = %postinvoke26 + %tmp32 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] + %"set.reset at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp32, i32 0, i32 10 ; [#uses=1] + %set.reset = load void (%tango.net.Socket.SocketSet*)** %"set.reset at vtbl", align 4 ; [#uses=1] + invoke fastcc void %set.reset(%tango.net.Socket.SocketSet* %.newclass_gc) + to label %postinvoke34 unwind label %landingpad + +postinvoke26: ; preds = %postinvoke21 + %tmp5.i = add i64 %tmp3.i, %tmp ; [#uses=1] + %tmp1.i133 = getelementptr %tango.time.Time.Time* %.rettmp25, i32 0, i32 0 ; [#uses=1] + %tmp3.i135 = load i64* %tmp1.i133, align 8 ; [#uses=1] + %tmp5.i137 = icmp slt i64 %tmp3.i135, %tmp5.i ; [#uses=1] + br i1 %tmp5.i137, label %whilebody, label %endwhile + +postinvoke34: ; preds = %whilebody + %tmp37 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] + %"set.add at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp37, i32 0, i32 12 ; [#uses=1] + %set.add = load void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)** %"set.add at vtbl", align 4 ; [#uses=1] + %tmp39 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp40 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp39, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp41 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp40 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp41, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp44 = invoke fastcc %tango.net.Socket.Socket* %data.socket(%tango.net.SocketConduit.SocketConduit* %tmp39) + to label %postinvoke43 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] + +postinvoke43: ; preds = %postinvoke34 + invoke fastcc void %set.add(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.Socket* %tmp44) + to label %postinvoke45 unwind label %landingpad + +postinvoke45: ; preds = %postinvoke43 + %tmp49 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp17 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl50" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp49, i32 0, i32 10 ; [#uses=1] + %this.timeout52 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl50", align 4 ; [#uses=1] + invoke fastcc void %this.timeout52(%tango.time.Time.Time* noalias nocapture sret %.rettmp53, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke54 unwind label %landingpad + +postinvoke54: ; preds = %postinvoke45 + %.rettmp53.0 = getelementptr %tango.time.Time.Time* %.rettmp53, i32 0, i32 0 ; [#uses=1] + %tmp150 = load i64* %.rettmp53.0, align 8 ; [#uses=2] + %tmp3.i.i.i = sdiv i64 %tmp150, 10000000 ; [#uses=1] + %tmp3.i14.i.i = sdiv i64 %tmp150, 10 ; [#uses=1] + %tmp6.i.i = trunc i64 %tmp3.i14.i.i to i32 ; [#uses=1] + %tmp7.i.i = urem i32 %tmp6.i.i, 1000000 ; [#uses=1] + %tmp7.i = bitcast %tango.net.Socket.timeval* %tv.i to i64* ; [#uses=1] + %4 = shl i64 %tmp3.i.i.i, 32 ; [#uses=1] + %5 = zext i32 %tmp7.i.i to i64 ; [#uses=1] + %6 = or i64 %5, %4 ; [#uses=1] + store i64 %6, i64* %tmp7.i, align 8 + %tmp5.i141142 = invoke fastcc i32 @_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetPS5tango3net6Socket7timevalZi(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.SocketSet* null, %tango.net.Socket.SocketSet* null, %tango.net.Socket.timeval* %tv.i) + to label %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit unwind label %landingpad ; [#uses=1] + +_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit: ; preds = %postinvoke54 + switch i32 %tmp5.i141142, label %endif [ + i32 -1, label %endwhile + i32 0, label %endwhile + ] + +endif: ; preds = %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit + %tmp61 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp62 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp61, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp63 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp62 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl64" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp63, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket66 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl64", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp68 = invoke fastcc %tango.net.Socket.Socket* %data.socket66(%tango.net.SocketConduit.SocketConduit* %tmp61) + to label %postinvoke67 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=2] + +postinvoke67: ; preds = %endif + %tmp69 = getelementptr %tango.net.Socket.Socket* %tmp68, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp70 = load %tango.net.Socket.Socket.__vtbl** %tmp69 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"data.socket().accept at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp70, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*)**> [#uses=1] + %"data.socket().accept" = load %tango.net.Socket.Socket* (%tango.net.Socket.Socket*)** %"data.socket().accept at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*)*> [#uses=1] + %tmp73 = invoke fastcc %tango.net.Socket.Socket* %"data.socket().accept"(%tango.net.Socket.Socket* %tmp68) + to label %endwhile unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] + +endwhile: ; preds = %postinvoke67, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %postinvoke26 + %new_data.0 = phi %tango.net.Socket.Socket* [ null, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit ], [ null, %postinvoke26 ], [ null, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit ], [ %tmp73, %postinvoke67 ] ; <%tango.net.Socket.Socket*> [#uses=2] + %tmp76 = icmp eq %tango.net.Socket.Socket* %new_data.0, null ; [#uses=1] + br i1 %tmp76, label %if77, label %endif78 + +if77: ; preds = %endwhile + %.newclass_gc_alloc80 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) + to label %postinvoke79 unwind label %landingpad ; [#uses=6] + +postinvoke79: ; preds = %if77 + %vtbl82 = bitcast i8* %.newclass_gc_alloc80 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl82 + %monitor83 = getelementptr i8* %.newclass_gc_alloc80, i32 4 ; [#uses=1] + %7 = bitcast i8* %monitor83 to i8** ; [#uses=1] + store i8* null, i8** %7 + %tmp84 = getelementptr i8* %.newclass_gc_alloc80, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp84, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i143 = getelementptr i8* %.newclass_gc_alloc80, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i143, i8* getelementptr ([4 x i8]* @.str148, i32 0, i32 0), i32 3, i32 1) + %tmp5.i144 = bitcast i8* %.newclass_gc_alloc80 to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i145146 = invoke fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i144, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str147, i32 0, i32 0) }, %object.Exception* null) + to label %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit unwind label %landingpad ; <%object.Exception*> [#uses=0] + +_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit: ; preds = %postinvoke79 + %tmp90 = bitcast i8* %.newclass_gc_alloc80 to %object.Object* ; <%object.Object*> [#uses=1] + invoke void @_d_throw_exception(%object.Object* %tmp90) + to label %postinvoke91 unwind label %landingpad + +postinvoke91: ; preds = %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit + unreachable + +endif78: ; preds = %endwhile + %tmp92 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp93 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp92, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp94 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp93 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl95" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp94, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket97 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl95", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp99 = invoke fastcc %tango.net.Socket.Socket* %data.socket97(%tango.net.SocketConduit.SocketConduit* %tmp92) + to label %postinvoke98 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=2] + +postinvoke98: ; preds = %endif78 + %tmp100 = getelementptr %tango.net.Socket.Socket* %tmp99, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp101 = load %tango.net.Socket.Socket.__vtbl** %tmp100 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"data.socket().shutdown at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp101, i32 0, i32 16 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)**> [#uses=1] + %"data.socket().shutdown" = load %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)** %"data.socket().shutdown at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*> [#uses=1] + %tmp104 = invoke fastcc %tango.net.Socket.Socket* %"data.socket().shutdown"(%tango.net.Socket.Socket* %tmp99, i32 2) + to label %postinvoke103 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=0] + +postinvoke103: ; preds = %postinvoke98 + %tmp105 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp106 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp105, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp107 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp106 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.detach at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp107, i32 0, i32 8 ; [#uses=1] + %data.detach = load void (%tango.net.SocketConduit.SocketConduit*)** %"data.detach at vtbl", align 4 ; [#uses=1] + invoke fastcc void %data.detach(%tango.net.SocketConduit.SocketConduit* %tmp105) + to label %postinvoke109 unwind label %landingpad + +postinvoke109: ; preds = %postinvoke103 + %tmp110 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp111 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp110, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp112 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp111 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl113" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp112, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket115 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl113", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp117 = invoke fastcc %tango.net.Socket.Socket* %data.socket115(%tango.net.SocketConduit.SocketConduit* %tmp110) + to label %postinvoke116 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] + +postinvoke116: ; preds = %postinvoke109 + %tmp118 = getelementptr %tango.net.Socket.Socket* %tmp117, i32 0, i32 2 ; [#uses=1] + %tmp120 = getelementptr %tango.net.Socket.Socket* %new_data.0, i32 0, i32 2 ; [#uses=1] + %tmp121 = load i32* %tmp120 ; [#uses=1] + store i32 %tmp121, i32* %tmp118 + %.tmp123 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp123) + ret void + +landingpad: ; preds = %postinvoke109, %postinvoke103, %postinvoke98, %endif78, %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit, %postinvoke79, %if77, %postinvoke67, %endif, %postinvoke54, %postinvoke45, %postinvoke43, %postinvoke34, %whilebody, %postinvoke21, %postinvoke, %case + %8 = call i8* @llvm.eh.exception() ; [#uses=2] + %9 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %8, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %.tmp = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp) + call void @_d_eh_resume_unwind(i8* %8) + unreachable + +switchend: ; preds = %entry + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection17finishDataCommandMFC5tango3net13SocketConduit13SocketConduitZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data_arg) { +entry: + %r = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = bitcast %tango.net.SocketConduit.SocketConduit* %data_arg to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] + %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %data_arg to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] + %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] + %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] + %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] + call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp1) + %tmp3 = getelementptr %tango.net.SocketConduit.SocketConduit* %data_arg, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] + %tmp4 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp3 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.detach at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp4, i32 0, i32 8 ; [#uses=1] + %data.detach = load void (%tango.net.SocketConduit.SocketConduit*)** %"data.detach at vtbl", align 4 ; [#uses=1] + call fastcc void %data.detach(%tango.net.SocketConduit.SocketConduit* %data_arg) + %tmp7 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp8 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp7 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp8, i32 0, i32 37 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + %tmp10 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %r, i32 0, i32 0, i32 0 ; [#uses=3] + %tmp11 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp10, i8* %tmp11, i32 12, i32 4) + %tmp14 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp10, 1 ; <%"byte[]"> [#uses=1] + %tmp15 = call i32 @_adEq(%"byte[]" %tmp14, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str149, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp16 = icmp eq i32 %tmp15, 0 ; [#uses=1] + br i1 %tmp16, label %oror, label %endif + +oror: ; preds = %entry + %tmp19 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp10, 1 ; <%"byte[]"> [#uses=1] + %tmp20 = call i32 @_adEq(%"byte[]" %tmp19, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str150, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp21 = icmp eq i32 %tmp20, 0 ; [#uses=1] + br i1 %tmp21, label %if, label %endif + +if: ; preds = %oror + %tmp24 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp7 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp24, i32 0, i32 5 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] + call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 10, i8* getelementptr ([11 x i8]* @.str151, i32 0, i32 0) }) + ret void + +endif: ; preds = %oror, %entry + ret void +} + +define fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp9FtpClient13FTPConnection18processDataCommandMFAaAAaXC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg, %"char[][]" %parameters_arg) { +entry: + %data = alloca %tango.net.SocketConduit.SocketConduit*, align 4 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=4] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=5] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.getDataSocket at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 39 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)**> [#uses=1] + %this.getDataSocket = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.getDataSocket at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*> [#uses=1] + %tmp4 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.getDataSocket(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + store %tango.net.SocketConduit.SocketConduit* %tmp4, %tango.net.SocketConduit.SocketConduit** %data + %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg, %"char[][]" %parameters_arg) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %entry + %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 37 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke18 unwind label %landingpad + +postinvoke18: ; preds = %postinvoke + %tmp19 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=3] + %tmp20 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp19, i8* %tmp20, i32 12, i32 4) + %tmp23 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp19, 1 ; <%"byte[]"> [#uses=1] + %tmp25 = invoke i32 @_adEq(%"byte[]" %tmp23, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str152, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly + to label %postinvoke24 unwind label %landingpad ; [#uses=1] + +postinvoke24: ; preds = %postinvoke18 + %tmp26 = icmp eq i32 %tmp25, 0 ; [#uses=1] + br i1 %tmp26, label %andand, label %endif + +andand: ; preds = %postinvoke24 + %tmp30 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp19, 1 ; <%"byte[]"> [#uses=1] + %tmp32 = invoke i32 @_adEq(%"byte[]" %tmp30, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str153, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly + to label %postinvoke31 unwind label %landingpad ; [#uses=1] + +postinvoke31: ; preds = %andand + %tmp33 = icmp eq i32 %tmp32, 0 ; [#uses=1] + br i1 %tmp33, label %if, label %endif + +if: ; preds = %postinvoke31 + %tmp37 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp37, i32 0, i32 14 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) + to label %endif unwind label %landingpad + +endif: ; preds = %if, %postinvoke31, %postinvoke24 + %tmp42 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.prepareDataSocket at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp42, i32 0, i32 43 ; [#uses=1] + %this.prepareDataSocket = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit**)** %"this.prepareDataSocket at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.prepareDataSocket(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit** %data) + to label %postinvoke44 unwind label %landingpad + +postinvoke44: ; preds = %endif + %tmp45 = load %tango.net.SocketConduit.SocketConduit** %data ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + ret %tango.net.SocketConduit.SocketConduit* %tmp45 + +landingpad: ; preds = %endif, %if, %andand, %postinvoke18, %postinvoke, %entry + %0 = call i8* @llvm.eh.exception() ; [#uses=3] + %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D6Object7__ClassZ) ; [#uses=1] + %cond = icmp eq i32 %1, 1 ; [#uses=1] + br i1 %cond, label %catch, label %switchdefault + +catch: ; preds = %landingpad + %2 = bitcast i8* %0 to %object.Object* ; <%object.Object*> [#uses=1] + %tmp5 = load %tango.net.SocketConduit.SocketConduit** %data ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp6 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp5 to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] + %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %tmp5 to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] + %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] + %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] + %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] + call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp6) + call void @_d_throw_exception(%object.Object* %2) + unreachable + +switchdefault: ; preds = %landingpad + call void @_d_eh_resume_unwind(i8* %0) + unreachable +} + +define fastcc %"FtpFileInfo[]" @_D5tango3net3ftp9FtpClient13FTPConnection2lsMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %.frame.i = alloca %nest.splitLines, align 8 ; <%nest.splitLines*> [#uses=5] + %.rettmp.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] + %.rettmp8.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] + %__arrayArg146 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 8 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] + %path_arg207 = extractvalue %"byte[]" %path_arg, 0 ; [#uses=4] + %path_arg208 = extractvalue %"byte[]" %path_arg, 1 ; [#uses=3] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=7] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.isSupported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 41 ; [#uses=1] + %this.isSupported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.isSupported at vtbl", align 4 ; [#uses=1] + %tmp4 = call fastcc i1 %this.isSupported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str154, i32 0, i32 0) }) ; [#uses=1] + br i1 %tmp4, label %if, label %endif + +if: ; preds = %entry + %tmp6 = icmp eq i32 %path_arg207, 0 ; [#uses=1] + %tmp11 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp11, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=2] + br i1 %tmp6, label %else, label %if7 + +if7: ; preds = %if + %tmp13 = getelementptr [1 x %"byte[]"]* %__arrayArg146, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + %insert204 = insertvalue %"byte[]" undef, i32 %path_arg207, 0 ; <%"byte[]"> [#uses=1] + %insert206 = insertvalue %"byte[]" %insert204, i8* %path_arg208, 1 ; <%"byte[]"> [#uses=1] + store %"byte[]" %insert206, %"byte[]"* %tmp13, align 8 + %tmp16 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp13, 1 ; <%"char[][]"> [#uses=1] + %tmp17 = invoke fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str155, i32 0, i32 0) }, %"char[][]" %tmp16) + to label %endif unwind label %landingpad ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + +else: ; preds = %if + %tmp25 = invoke fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str156, i32 0, i32 0) }, %"char[][]" zeroinitializer) + to label %endif unwind label %landingpad ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + +landingpad: ; preds = %else, %if7 + %0 = call i8* @llvm.eh.exception() ; [#uses=2] + %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=1] + %cond149 = icmp eq i32 %1, 1 ; [#uses=1] + br i1 %cond149, label %endif, label %switchdefault + +switchdefault: ; preds = %landingpad + call void @_d_eh_resume_unwind(i8* %0) + unreachable + +endif: ; preds = %landingpad, %else, %if7, %entry + %data.0 = phi %tango.net.SocketConduit.SocketConduit* [ null, %entry ], [ %tmp17, %if7 ], [ %tmp25, %else ], [ null, %landingpad ] ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %mlsd_success.0 = phi i1 [ false, %entry ], [ true, %if7 ], [ true, %else ], [ false, %landingpad ] ; [#uses=1] + br i1 %mlsd_success.0, label %if27, label %else29 + +if27: ; preds = %endif + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango2io6device5Array5Array7__ClassZ) ; [#uses=9] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Array.Array* ; <%tango.io.device.Array.Array*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Array.Array.__vtbl** ; <%tango.io.device.Array.Array.__vtbl**> [#uses=2] + store %tango.io.device.Array.Array.__vtbl* @_D5tango2io6device5Array5Array6__vtblZ, %tango.io.device.Array.Array.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %2 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %2 + %tmp30 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp30, i8* bitcast (%4** getelementptr (%tango.io.device.Array.Array* bitcast (%26* @_D5tango2io6device5Array5Array6__initZ to %tango.io.device.Array.Array*), i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp2.i = load %tango.io.device.Array.Array.__vtbl** %vtbl ; <%tango.io.device.Array.Array.__vtbl*> [#uses=1] + %"this.assign at vtbl.i" = getelementptr %tango.io.device.Array.Array.__vtbl* %tmp2.i, i32 0, i32 15 ; <%tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)**> [#uses=1] + %this.assign.i = load %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)** %"this.assign at vtbl.i", align 4 ; <%tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)*> [#uses=1] + %.gc_mem.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ah6__initZ, i32 256) ; [#uses=1] + %tmp5.i = insertvalue %"byte[]" undef, i32 256, 0 ; <%"byte[]"> [#uses=1] + %tmp6.i = insertvalue %"byte[]" %tmp5.i, i8* %.gc_mem.i, 1 ; <%"byte[]"> [#uses=1] + %tmp7.i = call fastcc %tango.io.device.Array.Array* %this.assign.i(%tango.io.device.Array.Array* %.newclass_gc, %"byte[]" %tmp6.i, i32 0) ; <%tango.io.device.Array.Array*> [#uses=0] + %tmp9.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + %3 = bitcast i8* %tmp9.i to i32* ; [#uses=1] + store i32 65536, i32* %3 + %tmp37 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readStream at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp37, i32 0, i32 47 ; [#uses=1] + %this.readStream = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")** %"this.readStream at vtbl", align 4 ; [#uses=1] + %tmp41 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %tmp42 = bitcast i8* %tmp41 to %tango.io.model.IConduit.OutputStream* ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] + call fastcc void %this.readStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data.0, %tango.io.model.IConduit.OutputStream* %tmp42, %"void delegate(uint pos)" zeroinitializer) + %tmp45 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp45, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data.0) + %tmp2.i209 = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] + %4 = bitcast i8* %tmp2.i209 to i8** ; [#uses=1] + %.ptr.i = load i8** %4 ; [#uses=1] + %tmp4.i = getelementptr i8* %.newclass_gc_alloc, i32 24 ; [#uses=1] + %5 = bitcast i8* %tmp4.i to i32* ; [#uses=1] + %tmp6.i210 = getelementptr i8* %.newclass_gc_alloc, i32 28 ; [#uses=1] + %6 = bitcast i8* %tmp6.i210 to i32* ; [#uses=1] + %tmp7.i211 = load i32* %5 ; [#uses=2] + %tmp8.i = load i32* %6 ; [#uses=1] + %tmp9.i212 = getelementptr i8* %.ptr.i, i32 %tmp7.i211 ; [#uses=2] + %tmp10.i = sub i32 %tmp8.i, %tmp7.i211 ; [#uses=2] + %count.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 0 ; [#uses=3] + %result.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1 ; <%"char[][]"*> [#uses=1] + store i32 0, i32* %count.i, align 8 + %7 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp10.i, i32* %7, align 8 + %.sret_arg10.1.i.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp9.i212, i8** %.sret_arg10.1.i.i, align 4 + %tmp1.i213 = bitcast %nest.splitLines* %.frame.i to i8* ; [#uses=2] + %tmp2.i214 = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i213, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func.i = insertvalue %"int delegate(ref char[])" %tmp2.i214, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody41MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp3.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, %"int delegate(ref char[])" %.func.i) ; [#uses=0] + %tmp4.i215 = load i32* %count.i, align 8 ; [#uses=2] + %.gc_mem.i216 = call noalias i8* @_d_newarrayT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_AAa6__initZ to %object.TypeInfo*), i32 %tmp4.i215) ; [#uses=1] + %.gc_mem5.i = bitcast i8* %.gc_mem.i216 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp6.i217 = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 0 ; [#uses=1] + store i32 %tmp4.i215, i32* %tmp6.i217 + %tmp7.i218 = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 1 ; <%"byte[]"**> [#uses=1] + store %"byte[]"* %.gc_mem5.i, %"byte[]"** %tmp7.i218 + store i32 0, i32* %count.i, align 8 + %8 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp10.i, i32* %8, align 8 + %.sret_arg10.1.i17.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp9.i212, i8** %.sret_arg10.1.i17.i, align 4 + %tmp11.i219 = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i213, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func12.i = insertvalue %"int delegate(ref char[])" %tmp11.i219, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody42MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp13.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, %"int delegate(ref char[])" %.func12.i) ; [#uses=0] + %tmp14.i = load %"char[][]"* %result.i ; <%"char[][]"> [#uses=2] + %tmp53189 = extractvalue %"char[][]" %tmp14.i, 0 ; [#uses=5] + %tmp53190 = extractvalue %"char[][]" %tmp14.i, 1 ; <%"byte[]"*> [#uses=5] + br label %foreachcond + +foreachcond: ; preds = %foreachnext, %if27 + %dir.1.1 = phi %tango.net.ftp.FtpClient.FtpFileInfo* [ null, %if27 ], [ %dir.1.0, %foreachnext ] ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=4] + %dir.0.1 = phi i32 [ 0, %if27 ], [ %dir.0.0, %foreachnext ] ; [#uses=14] + %foreachkey.0 = phi i32 [ 0, %if27 ], [ %tmp127, %foreachnext ] ; [#uses=3] + %tmp65 = icmp ult i32 %foreachkey.0, %tmp53189 ; [#uses=1] + br i1 %tmp65, label %foreachbody, label %foreachend + +foreachbody: ; preds = %foreachcond + %tmp67 = getelementptr %"byte[]"* %tmp53190, i32 %foreachkey.0 ; <%"byte[]"*> [#uses=1] + %tmp68 = load %"byte[]"* %tmp67 ; <%"byte[]"> [#uses=2] + %tmp68187 = extractvalue %"byte[]" %tmp68, 0 ; [#uses=2] + %tmp71 = icmp eq i32 %tmp68187, 0 ; [#uses=1] + br i1 %tmp71, label %foreachnext, label %try74 + +try74: ; preds = %foreachbody + %tmp68188 = extractvalue %"byte[]" %tmp68, 1 ; [#uses=1] + %tmp99 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parseMlstLine at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp99, i32 0, i32 51 ; [#uses=1] + %this.parseMlstLine = load void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseMlstLine at vtbl", align 4 ; [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %tmp68187, 0 ; <%"byte[]"> [#uses=1] + %insert186 = insertvalue %"byte[]" %insert, i8* %tmp68188, 1 ; <%"byte[]"> [#uses=1] + invoke fastcc void %this.parseMlstLine(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert186) + to label %postinvoke102 unwind label %landingpad75 + +postinvoke102: ; preds = %try74 + %.rettmp179.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + %tmp180 = load i32* %.rettmp179.0, align 8 ; [#uses=2] + %.rettmp179.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 0, i32 1 ; [#uses=1] + %tmp181 = load i8** %.rettmp179.1, align 4 ; [#uses=1] + %.rettmp.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 1 ; [#uses=1] + %tmp162 = load i32* %.rettmp.1, align 8 ; [#uses=1] + %.rettmp.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 2 ; [#uses=1] + %tmp163 = load i64* %.rettmp.2, align 4 ; [#uses=1] + %.rettmp.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 3, i32 0 ; [#uses=1] + %tmp177 = load i64* %.rettmp.3.0, align 4 ; [#uses=1] + %.rettmp.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 4, i32 0 ; [#uses=1] + %tmp175 = load i64* %.rettmp.4.0, align 4 ; [#uses=1] + %.rettmp.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 5, i32 0 ; [#uses=1] + %tmp171 = load i32* %.rettmp.5.0, align 4 ; [#uses=1] + %.rettmp.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 5, i32 1 ; [#uses=1] + %tmp172 = load i8** %.rettmp.5.1, align 4 ; [#uses=1] + %.rettmp.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 6 ; [#uses=1] + %tmp170 = load i8** %.rettmp.6, align 4 ; [#uses=1] + %tmp108 = icmp eq i32 %tmp180, 0 ; [#uses=1] + br i1 %tmp108, label %foreachnext, label %if109 + +if109: ; preds = %postinvoke102 + %tmp113 = add i32 %dir.0.1, 1 ; [#uses=2] + %tmp118 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %dir.1.1 to i8* ; [#uses=1] + %.gc_mem = invoke i8* @_d_arraysetlengthiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D48TypeInfo_AS5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to %object.TypeInfo*), i32 %tmp113, i32 %dir.0.1, i8* %tmp118) + to label %postinvoke119 unwind label %landingpad75 ; [#uses=1] + +postinvoke119: ; preds = %if109 + %.gc_mem120 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpFileInfo* ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] + %9 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 0, i32 0 ; [#uses=1] + store i32 %tmp180, i32* %9 + %tmp121182.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 0, i32 1 ; [#uses=1] + store i8* %tmp181, i8** %tmp121182.1, align 4 + %tmp121.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 1 ; [#uses=1] + store i32 %tmp162, i32* %tmp121.1, align 8 + %tmp121.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 2 ; [#uses=1] + store i64 %tmp163, i64* %tmp121.2, align 4 + %tmp121.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 3, i32 0 ; [#uses=1] + store i64 %tmp177, i64* %tmp121.3.0, align 4 + %tmp121.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 4, i32 0 ; [#uses=1] + store i64 %tmp175, i64* %tmp121.4.0, align 4 + %tmp121.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 5, i32 0 ; [#uses=1] + store i32 %tmp171, i32* %tmp121.5.0, align 4 + %tmp121.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 5, i32 1 ; [#uses=1] + store i8* %tmp172, i8** %tmp121.5.1, align 4 + %tmp121.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 6 ; [#uses=1] + store i8* %tmp170, i8** %tmp121.6, align 4 + br label %foreachnext + +landingpad75: ; preds = %if109, %try74 + %10 = call i8* @llvm.eh.exception() ; [#uses=2] + %11 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %10, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ, i32 0) ; [#uses=1] + %cond = icmp eq i32 %11, 1 ; [#uses=1] + br i1 %cond, label %catch77, label %switchdefault90 + +catch77: ; preds = %landingpad75 + %tmp80 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendListCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp80, i32 0, i32 49 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")**> [#uses=1] + %this.sendListCommand = load %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.sendListCommand at vtbl", align 4 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*> [#uses=1] + %insert200 = insertvalue %"byte[]" undef, i32 %path_arg207, 0 ; <%"byte[]"> [#uses=1] + %insert202 = insertvalue %"byte[]" %insert200, i8* %path_arg208, 1 ; <%"byte[]"> [#uses=1] + %tmp84 = invoke fastcc %"FtpFileInfo[]" %this.sendListCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert202) + to label %postinvoke83 unwind label %catch77.landingpad55_crit_edge ; <%"FtpFileInfo[]"> [#uses=1] + +catch77.landingpad55_crit_edge: ; preds = %catch77 + %.tmp.pre = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=1] + br label %landingpad55 + +postinvoke83: ; preds = %catch77 + %.tmp89 = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=1] + call void @_d_delarray(i32 %tmp53189, i8* %.tmp89) + ret %"FtpFileInfo[]" %tmp84 + +switchdefault90: ; preds = %landingpad75 + %.tmp95 = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=2] + invoke void @_d_delarray(i32 %tmp53189, i8* %.tmp95) + to label %postinvoke96 unwind label %landingpad55 + +postinvoke96: ; preds = %switchdefault90 + call void @_d_eh_resume_unwind(i8* %10) + unreachable + +foreachnext: ; preds = %postinvoke119, %postinvoke102, %foreachbody + %dir.1.0 = phi %tango.net.ftp.FtpClient.FtpFileInfo* [ %dir.1.1, %foreachbody ], [ %.gc_mem120, %postinvoke119 ], [ %dir.1.1, %postinvoke102 ] ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=1] + %dir.0.0 = phi i32 [ %dir.0.1, %foreachbody ], [ %tmp113, %postinvoke119 ], [ %dir.0.1, %postinvoke102 ] ; [#uses=1] + %tmp127 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +foreachend: ; preds = %foreachcond + %insert192 = insertvalue %"FtpFileInfo[]" undef, i32 %dir.0.1, 0 ; <%"FtpFileInfo[]"> [#uses=1] + %insert194 = insertvalue %"FtpFileInfo[]" %insert192, %tango.net.ftp.FtpClient.FtpFileInfo* %dir.1.1, 1 ; <%"FtpFileInfo[]"> [#uses=1] + %.tmp133 = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=1] + call void @_d_delarray(i32 %tmp53189, i8* %.tmp133) + ret %"FtpFileInfo[]" %insert194 + +landingpad55: ; preds = %switchdefault90, %catch77.landingpad55_crit_edge + %.tmp.pre-phi = phi i8* [ %.tmp.pre, %catch77.landingpad55_crit_edge ], [ %.tmp95, %switchdefault90 ] ; [#uses=1] + %12 = call i8* @llvm.eh.exception() ; [#uses=2] + %13 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %12, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + call void @_d_delarray(i32 %tmp53189, i8* %.tmp.pre-phi) + call void @_d_eh_resume_unwind(i8* %12) + unreachable + +else29: ; preds = %endif + %tmp142 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendListCommand at vtbl143" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp142, i32 0, i32 49 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")**> [#uses=1] + %this.sendListCommand145 = load %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.sendListCommand at vtbl143", align 4 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*> [#uses=1] + %insert196 = insertvalue %"byte[]" undef, i32 %path_arg207, 0 ; <%"byte[]"> [#uses=1] + %insert198 = insertvalue %"byte[]" %insert196, i8* %path_arg208, 1 ; <%"byte[]"> [#uses=1] + %tmp147 = call fastcc %"FtpFileInfo[]" %this.sendListCommand145(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert198) ; <%"FtpFileInfo[]"> [#uses=1] + ret %"FtpFileInfo[]" %tmp147 +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection10readStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit12OutputStreamDFkZvZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data_arg, %tango.io.model.IConduit.OutputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg) { +entry: + %tv.i = alloca %tango.net.Socket.timeval, align 8 ; <%tango.net.Socket.timeval*> [#uses=2] + %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp11 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %buf = alloca [8192 x i8], align 1 ; <[8192 x i8]*> [#uses=1] + %.rettmp17 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp45 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp110 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp119 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %progress_arg144 = extractvalue %"void delegate(uint pos)" %progress_arg, 0 ; [#uses=2] + %progress_arg145 = extractvalue %"void delegate(uint pos)" %progress_arg, 1 ; [#uses=2] + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket9SocketSet7__ClassZ) ; [#uses=8] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet* ; <%tango.net.Socket.SocketSet*> [#uses=3] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet.__vtbl** ; <%tango.net.Socket.SocketSet.__vtbl**> [#uses=3] + store %tango.net.Socket.SocketSet.__vtbl* @_D5tango3net6Socket9SocketSet6__vtblZ, %tango.net.Socket.SocketSet.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (i32* getelementptr (%tango.net.Socket.SocketSet* bitcast (%24* @_D5tango3net6Socket9SocketSet6__initZ to %tango.net.Socket.SocketSet*), i32 0, i32 2) to i8*), i32 16, i32 1) + %1 = bitcast i8* %tmp to i32* ; [#uses=2] + store i32 128, i32* %1 + %tmp9.i.i = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %2 = bitcast i8* %tmp9.i.i to i8** ; [#uses=1] + %.gc_mem.i.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ag6__initZ, i32 128) ; [#uses=1] + store i8* %.gc_mem.i.i, i8** %2 + %tmp14.i.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %3 = bitcast i8* %tmp14.i.i to i32* ; [#uses=1] + %tmp17.i.i = load i32* %1 ; [#uses=1] + %tmp18.i.i = shl i32 %tmp17.i.i, 3 ; [#uses=1] + store i32 %tmp18.i.i, i32* %3 + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %entry + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp9 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp9, i32 0, i32 10 ; [#uses=1] + %this.timeout = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.timeout(%tango.time.Time.Time* noalias nocapture sret %.rettmp11, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke12 unwind label %landingpad + +postinvoke12: ; preds = %postinvoke + %.rettmp11.0 = getelementptr %tango.time.Time.Time* %.rettmp11, i32 0, i32 0 ; [#uses=1] + %tmp183 = load i64* %.rettmp11.0, align 8 ; [#uses=1] + %tmp1.i162 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] + %tmp3.i164 = load i64* %tmp1.i162, align 8 ; [#uses=1] + %tmp16 = getelementptr [8192 x i8]* %buf, i32 0, i32 0 ; [#uses=3] + call void @llvm.memset.i32(i8* %tmp16, i8 0, i32 8192, i32 1) + br label %whilecond + +whilecond: ; preds = %postinvoke120, %postinvoke12 + %tmp3.i164.pn = phi i64 [ %tmp3.i164, %postinvoke12 ], [ %tmp3.i, %postinvoke120 ] ; [#uses=1] + %.pn = phi i64 [ %tmp183, %postinvoke12 ], [ %tmp181, %postinvoke120 ] ; [#uses=1] + %pos.0 = phi i32 [ 0, %postinvoke12 ], [ %tmp96, %postinvoke120 ] ; [#uses=1] + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp17) + to label %postinvoke18 unwind label %landingpad + +whilebody: ; preds = %postinvoke18 + %tmp24 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] + %"set.reset at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp24, i32 0, i32 10 ; [#uses=1] + %set.reset = load void (%tango.net.Socket.SocketSet*)** %"set.reset at vtbl", align 4 ; [#uses=1] + invoke fastcc void %set.reset(%tango.net.Socket.SocketSet* %.newclass_gc) + to label %postinvoke26 unwind label %landingpad + +postinvoke18: ; preds = %whilecond + %end_time.0.0 = add i64 %tmp3.i164.pn, %.pn ; [#uses=1] + %tmp1.i168 = getelementptr %tango.time.Time.Time* %.rettmp17, i32 0, i32 0 ; [#uses=1] + %tmp3.i170 = load i64* %tmp1.i168, align 8 ; [#uses=1] + %tmp5.i172 = icmp slt i64 %tmp3.i170, %end_time.0.0 ; [#uses=1] + br i1 %tmp5.i172, label %whilebody, label %if125 + +postinvoke26: ; preds = %whilebody + %tmp29 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] + %"set.add at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp29, i32 0, i32 12 ; [#uses=1] + %set.add = load void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)** %"set.add at vtbl", align 4 ; [#uses=1] + %tmp32 = getelementptr %tango.net.SocketConduit.SocketConduit* %data_arg, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=2] + %tmp33 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp32 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp33, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp36 = invoke fastcc %tango.net.Socket.Socket* %data.socket(%tango.net.SocketConduit.SocketConduit* %data_arg) + to label %postinvoke35 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] + +postinvoke35: ; preds = %postinvoke26 + invoke fastcc void %set.add(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.Socket* %tmp36) + to label %postinvoke37 unwind label %landingpad + +postinvoke37: ; preds = %postinvoke35 + %tmp41 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl42" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp41, i32 0, i32 10 ; [#uses=1] + %this.timeout44 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl42", align 4 ; [#uses=1] + invoke fastcc void %this.timeout44(%tango.time.Time.Time* noalias nocapture sret %.rettmp45, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke46 unwind label %landingpad + +postinvoke46: ; preds = %postinvoke37 + %.rettmp45.0 = getelementptr %tango.time.Time.Time* %.rettmp45, i32 0, i32 0 ; [#uses=1] + %tmp185 = load i64* %.rettmp45.0, align 8 ; [#uses=2] + %tmp3.i.i.i = sdiv i64 %tmp185, 10000000 ; [#uses=1] + %tmp3.i14.i.i = sdiv i64 %tmp185, 10 ; [#uses=1] + %tmp6.i.i = trunc i64 %tmp3.i14.i.i to i32 ; [#uses=1] + %tmp7.i.i = urem i32 %tmp6.i.i, 1000000 ; [#uses=1] + %tmp7.i = bitcast %tango.net.Socket.timeval* %tv.i to i64* ; [#uses=1] + %4 = shl i64 %tmp3.i.i.i, 32 ; [#uses=1] + %5 = zext i32 %tmp7.i.i to i64 ; [#uses=1] + %6 = or i64 %5, %4 ; [#uses=1] + store i64 %6, i64* %tmp7.i, align 8 + %tmp5.i176177 = invoke fastcc i32 @_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetPS5tango3net6Socket7timevalZi(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.SocketSet* null, %tango.net.Socket.SocketSet* null, %tango.net.Socket.timeval* %tv.i) + to label %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit unwind label %landingpad ; [#uses=1] + +_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit: ; preds = %postinvoke46 + switch i32 %tmp5.i176177, label %endif [ + i32 -1, label %if125 + i32 0, label %if125 + ] + +endif: ; preds = %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit + %tmp55 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp32 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl56" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp55, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket58 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl56", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp60 = invoke fastcc %tango.net.Socket.Socket* %data.socket58(%tango.net.SocketConduit.SocketConduit* %data_arg) + to label %postinvoke59 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=2] + +postinvoke59: ; preds = %endif + %tmp61 = getelementptr %tango.net.Socket.Socket* %tmp60, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp62 = load %tango.net.Socket.Socket.__vtbl** %tmp61 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"data.socket().receive at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp62, i32 0, i32 29 ; [#uses=1] + %"data.socket().receive" = load i32 (%tango.net.Socket.Socket*, %"byte[]", i32)** %"data.socket().receive at vtbl", align 4 ; [#uses=1] + %tmp65 = insertvalue %"byte[]" { i32 8192, i8* undef }, i8* %tmp16, 1 ; <%"byte[]"> [#uses=1] + %tmp67 = invoke fastcc i32 %"data.socket().receive"(%tango.net.Socket.Socket* %tmp60, %"byte[]" %tmp65, i32 0) + to label %postinvoke66 unwind label %landingpad ; [#uses=3] + +postinvoke66: ; preds = %postinvoke59 + switch i32 %tmp67, label %endif76 [ + i32 -1, label %if125 + i32 0, label %if75 + ] + +if75: ; preds = %postinvoke66 + %.tmp141 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp141) + ret void + +endif76: ; preds = %postinvoke66 + %tmp79 = bitcast %tango.io.model.IConduit.OutputStream* %stream_arg to i8* ; [#uses=1] + %tmp80 = call %object.Object* @_d_toObject(i8* %tmp79) nounwind readonly ; <%object.Object*> [#uses=1] + %tmp82 = getelementptr %tango.io.model.IConduit.OutputStream* %stream_arg, i32 0, i32 0 ; <%tango.io.model.IConduit.OutputStream.__vtbl**> [#uses=1] + %tmp83 = load %tango.io.model.IConduit.OutputStream.__vtbl** %tmp82 ; <%tango.io.model.IConduit.OutputStream.__vtbl*> [#uses=1] + %"stream.write at vtbl" = getelementptr %tango.io.model.IConduit.OutputStream.__vtbl* %tmp83, i32 0, i32 5 ; [#uses=1] + %stream.write = load i32 (%tango.io.model.IConduit.OutputStream*, %"byte[]")** %"stream.write at vtbl", align 4 ; [#uses=1] + %tmp85 = bitcast %object.Object* %tmp80 to %tango.io.model.IConduit.OutputStream* ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] + %tmp90 = insertvalue %"byte[]" undef, i32 %tmp67, 0 ; <%"byte[]"> [#uses=1] + %tmp91 = insertvalue %"byte[]" %tmp90, i8* %tmp16, 1 ; <%"byte[]"> [#uses=1] + %tmp93 = invoke fastcc i32 %stream.write(%tango.io.model.IConduit.OutputStream* %tmp85, %"byte[]" %tmp91) + to label %postinvoke92 unwind label %landingpad ; [#uses=0] + +postinvoke92: ; preds = %endif76 + %tmp96 = add i32 %pos.0, %tmp67 ; [#uses=2] + %tmp98 = icmp eq i8* %progress_arg144, null ; [#uses=1] + %tmp99 = icmp eq void (i8*, i32)* %progress_arg145, null ; [#uses=1] + %tmp100 = and i1 %tmp98, %tmp99 ; [#uses=1] + br i1 %tmp100, label %endif103, label %if102 + +if102: ; preds = %postinvoke92 + invoke fastcc void %progress_arg145(i8* %progress_arg144, i32 %tmp96) + to label %endif103 unwind label %landingpad + +endif103: ; preds = %if102, %postinvoke92 + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp110) + to label %postinvoke111 unwind label %landingpad + +postinvoke111: ; preds = %endif103 + %tmp115 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl116" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp115, i32 0, i32 10 ; [#uses=1] + %this.timeout118 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl116", align 4 ; [#uses=1] + invoke fastcc void %this.timeout118(%tango.time.Time.Time* noalias nocapture sret %.rettmp119, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke120 unwind label %landingpad + +postinvoke120: ; preds = %postinvoke111 + %.rettmp119.0 = getelementptr %tango.time.Time.Time* %.rettmp119, i32 0, i32 0 ; [#uses=1] + %tmp181 = load i64* %.rettmp119.0, align 8 ; [#uses=1] + %tmp1.i = getelementptr %tango.time.Time.Time* %.rettmp110, i32 0, i32 0 ; [#uses=1] + %tmp3.i = load i64* %tmp1.i, align 8 ; [#uses=1] + br label %whilecond + +if125: ; preds = %postinvoke66, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %postinvoke18 + %.newclass_gc_alloc128 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) + to label %postinvoke127 unwind label %landingpad ; [#uses=6] + +postinvoke127: ; preds = %if125 + %vtbl130 = bitcast i8* %.newclass_gc_alloc128 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl130 + %monitor131 = getelementptr i8* %.newclass_gc_alloc128, i32 4 ; [#uses=1] + %7 = bitcast i8* %monitor131 to i8** ; [#uses=1] + store i8* null, i8** %7 + %tmp132 = getelementptr i8* %.newclass_gc_alloc128, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp132, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc128, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str162, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc128 to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i154 = invoke fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str161, i32 0, i32 0) }, %object.Exception* null) + to label %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit unwind label %landingpad ; <%object.Exception*> [#uses=0] + +_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit: ; preds = %postinvoke127 + %tmp138 = bitcast i8* %.newclass_gc_alloc128 to %object.Object* ; <%object.Object*> [#uses=1] + invoke void @_d_throw_exception(%object.Object* %tmp138) + to label %postinvoke139 unwind label %landingpad + +postinvoke139: ; preds = %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit + unreachable + +landingpad: ; preds = %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit, %postinvoke127, %if125, %postinvoke111, %endif103, %if102, %endif76, %postinvoke59, %endif, %postinvoke46, %postinvoke37, %postinvoke35, %postinvoke26, %whilebody, %whilecond, %postinvoke, %entry + %8 = call i8* @llvm.eh.exception() ; [#uses=2] + %9 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %8, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %.tmp = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp) + call void @_d_eh_resume_unwind(i8* %8) + unreachable +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection10sendStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit11InputStreamDFkZvZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data_arg, %tango.io.model.IConduit.InputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg) { +entry: + %tv.i = alloca %tango.net.Socket.timeval, align 8 ; <%tango.net.Socket.timeval*> [#uses=2] + %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp11 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %buf = alloca [8192 x i8], align 1 ; <[8192 x i8]*> [#uses=2] + %.rettmp18 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp46 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp123 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %.rettmp132 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %progress_arg157 = extractvalue %"void delegate(uint pos)" %progress_arg, 0 ; [#uses=2] + %progress_arg158 = extractvalue %"void delegate(uint pos)" %progress_arg, 1 ; [#uses=2] + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket9SocketSet7__ClassZ) ; [#uses=8] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet* ; <%tango.net.Socket.SocketSet*> [#uses=3] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet.__vtbl** ; <%tango.net.Socket.SocketSet.__vtbl**> [#uses=3] + store %tango.net.Socket.SocketSet.__vtbl* @_D5tango3net6Socket9SocketSet6__vtblZ, %tango.net.Socket.SocketSet.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (i32* getelementptr (%tango.net.Socket.SocketSet* bitcast (%24* @_D5tango3net6Socket9SocketSet6__initZ to %tango.net.Socket.SocketSet*), i32 0, i32 2) to i8*), i32 16, i32 1) + %1 = bitcast i8* %tmp to i32* ; [#uses=2] + store i32 128, i32* %1 + %tmp9.i.i = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %2 = bitcast i8* %tmp9.i.i to i8** ; [#uses=1] + %.gc_mem.i.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ag6__initZ, i32 128) ; [#uses=1] + store i8* %.gc_mem.i.i, i8** %2 + %tmp14.i.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %3 = bitcast i8* %tmp14.i.i to i32* ; [#uses=1] + %tmp17.i.i = load i32* %1 ; [#uses=1] + %tmp18.i.i = shl i32 %tmp17.i.i, 3 ; [#uses=1] + store i32 %tmp18.i.i, i32* %3 + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) + to label %postinvoke unwind label %landingpad + +postinvoke: ; preds = %entry + %tmp8 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp9 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp9, i32 0, i32 10 ; [#uses=1] + %this.timeout = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl", align 4 ; [#uses=1] + invoke fastcc void %this.timeout(%tango.time.Time.Time* noalias nocapture sret %.rettmp11, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke12 unwind label %landingpad + +postinvoke12: ; preds = %postinvoke + %.rettmp11.0 = getelementptr %tango.time.Time.Time* %.rettmp11, i32 0, i32 0 ; [#uses=1] + %tmp196 = load i64* %.rettmp11.0, align 8 ; [#uses=1] + %tmp1.i175 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] + %tmp3.i177 = load i64* %tmp1.i175, align 8 ; [#uses=1] + %tmp5.i179 = add i64 %tmp3.i177, %tmp196 ; [#uses=1] + %tmp16 = getelementptr [8192 x i8]* %buf, i32 0, i32 0 ; [#uses=2] + call void @llvm.memset.i32(i8* %tmp16, i8 0, i32 8192, i32 1) + br label %whilecond + +whilecond: ; preds = %postinvoke133, %endif112, %postinvoke12 + %end_time.0.0 = phi i64 [ %tmp5.i179, %postinvoke12 ], [ %end_time.0.0, %endif112 ], [ %tmp5.i171, %postinvoke133 ] ; [#uses=2] + %buf_pos.1 = phi i32 [ 0, %postinvoke12 ], [ %tmp102, %postinvoke133 ], [ %tmp102, %endif112 ] ; [#uses=2] + %buf_size.1 = phi i32 [ 0, %postinvoke12 ], [ %buf_size.0, %postinvoke133 ], [ %buf_size.0, %endif112 ] ; [#uses=2] + %pos.0 = phi i32 [ 0, %postinvoke12 ], [ %tmp105, %postinvoke133 ], [ %tmp105, %endif112 ] ; [#uses=1] + %completed.2 = phi i1 [ false, %postinvoke12 ], [ %completed.1, %postinvoke133 ], [ %completed.1, %endif112 ] ; [#uses=7] + br i1 %completed.2, label %endwhile, label %andand + +whilebody: ; preds = %postinvoke19 + %tmp25 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] + %"set.reset at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp25, i32 0, i32 10 ; [#uses=1] + %set.reset = load void (%tango.net.Socket.SocketSet*)** %"set.reset at vtbl", align 4 ; [#uses=1] + invoke fastcc void %set.reset(%tango.net.Socket.SocketSet* %.newclass_gc) + to label %postinvoke27 unwind label %landingpad + +andand: ; preds = %whilecond + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp18) + to label %postinvoke19 unwind label %landingpad + +postinvoke19: ; preds = %andand + %tmp1.i181 = getelementptr %tango.time.Time.Time* %.rettmp18, i32 0, i32 0 ; [#uses=1] + %tmp3.i183 = load i64* %tmp1.i181, align 8 ; [#uses=1] + %tmp5.i185 = icmp slt i64 %tmp3.i183, %end_time.0.0 ; [#uses=1] + br i1 %tmp5.i185, label %whilebody, label %endwhile + +postinvoke27: ; preds = %whilebody + %tmp30 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] + %"set.add at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp30, i32 0, i32 12 ; [#uses=1] + %set.add = load void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)** %"set.add at vtbl", align 4 ; [#uses=1] + %tmp33 = getelementptr %tango.net.SocketConduit.SocketConduit* %data_arg, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=2] + %tmp34 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp33 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp34, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp37 = invoke fastcc %tango.net.Socket.Socket* %data.socket(%tango.net.SocketConduit.SocketConduit* %data_arg) + to label %postinvoke36 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] + +postinvoke36: ; preds = %postinvoke27 + invoke fastcc void %set.add(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.Socket* %tmp37) + to label %postinvoke38 unwind label %landingpad + +postinvoke38: ; preds = %postinvoke36 + %tmp42 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl43" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp42, i32 0, i32 10 ; [#uses=1] + %this.timeout45 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl43", align 4 ; [#uses=1] + invoke fastcc void %this.timeout45(%tango.time.Time.Time* noalias nocapture sret %.rettmp46, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke47 unwind label %landingpad + +postinvoke47: ; preds = %postinvoke38 + %.rettmp46.0 = getelementptr %tango.time.Time.Time* %.rettmp46, i32 0, i32 0 ; [#uses=1] + %tmp198 = load i64* %.rettmp46.0, align 8 ; [#uses=2] + %tmp3.i.i.i = sdiv i64 %tmp198, 10000000 ; [#uses=1] + %tmp3.i14.i.i = sdiv i64 %tmp198, 10 ; [#uses=1] + %tmp6.i.i = trunc i64 %tmp3.i14.i.i to i32 ; [#uses=1] + %tmp7.i.i = urem i32 %tmp6.i.i, 1000000 ; [#uses=1] + %tmp7.i = bitcast %tango.net.Socket.timeval* %tv.i to i64* ; [#uses=1] + %4 = shl i64 %tmp3.i.i.i, 32 ; [#uses=1] + %5 = zext i32 %tmp7.i.i to i64 ; [#uses=1] + %6 = or i64 %5, %4 ; [#uses=1] + store i64 %6, i64* %tmp7.i, align 8 + %tmp5.i189190 = invoke fastcc i32 @_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetPS5tango3net6Socket7timevalZi(%tango.net.Socket.SocketSet* null, %tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.SocketSet* null, %tango.net.Socket.timeval* %tv.i) + to label %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit unwind label %landingpad ; [#uses=1] + +_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit: ; preds = %postinvoke47 + switch i32 %tmp5.i189190, label %endif [ + i32 -1, label %endwhile + i32 0, label %endwhile + ] + +endif: ; preds = %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit + %tmp57 = icmp eq i32 %buf_size.1, %buf_pos.1 ; [#uses=1] + br i1 %tmp57, label %if58, label %endif59 + +if58: ; preds = %endif + %tmp61 = bitcast %tango.io.model.IConduit.InputStream* %stream_arg to i8* ; [#uses=1] + %tmp62 = call %object.Object* @_d_toObject(i8* %tmp61) nounwind readonly ; <%object.Object*> [#uses=1] + %tmp64 = getelementptr %tango.io.model.IConduit.InputStream* %stream_arg, i32 0, i32 0 ; <%tango.io.model.IConduit.InputStream.__vtbl**> [#uses=1] + %tmp65 = load %tango.io.model.IConduit.InputStream.__vtbl** %tmp64 ; <%tango.io.model.IConduit.InputStream.__vtbl*> [#uses=1] + %"stream.read at vtbl" = getelementptr %tango.io.model.IConduit.InputStream.__vtbl* %tmp65, i32 0, i32 5 ; [#uses=1] + %stream.read = load i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")** %"stream.read at vtbl", align 4 ; [#uses=1] + %tmp67 = bitcast %object.Object* %tmp62 to %tango.io.model.IConduit.InputStream* ; <%tango.io.model.IConduit.InputStream*> [#uses=1] + %tmp69 = insertvalue %"byte[]" { i32 8192, i8* undef }, i8* %tmp16, 1 ; <%"byte[]"> [#uses=1] + %tmp71 = invoke fastcc i32 %stream.read(%tango.io.model.IConduit.InputStream* %tmp67, %"byte[]" %tmp69) + to label %postinvoke70 unwind label %landingpad ; [#uses=2] + +postinvoke70: ; preds = %if58 + %tmp72 = icmp eq i32 %tmp71, -1 ; [#uses=2] + %buf_size.2 = select i1 %tmp72, i32 0, i32 %tmp71 ; [#uses=1] + %completed.0 = or i1 %tmp72, %completed.2 ; [#uses=1] + br label %endif59 + +endif59: ; preds = %postinvoke70, %endif + %buf_pos.0 = phi i32 [ 0, %postinvoke70 ], [ %buf_pos.1, %endif ] ; [#uses=3] + %buf_size.0 = phi i32 [ %buf_size.2, %postinvoke70 ], [ %buf_size.1, %endif ] ; [#uses=3] + %completed.1 = phi i1 [ %completed.0, %postinvoke70 ], [ %completed.2, %endif ] ; [#uses=3] + %tmp77 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp33 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] + %"data.socket at vtbl78" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp77, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] + %data.socket80 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl78", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] + %tmp82 = invoke fastcc %tango.net.Socket.Socket* %data.socket80(%tango.net.SocketConduit.SocketConduit* %data_arg) + to label %postinvoke81 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=2] + +postinvoke81: ; preds = %endif59 + %tmp83 = getelementptr %tango.net.Socket.Socket* %tmp82, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] + %tmp84 = load %tango.net.Socket.Socket.__vtbl** %tmp83 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] + %"data.socket().send at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp84, i32 0, i32 25 ; [#uses=1] + %"data.socket().send" = load i32 (%tango.net.Socket.Socket*, %"byte[]", i32)** %"data.socket().send at vtbl", align 4 ; [#uses=1] + %tmp89 = getelementptr [8192 x i8]* %buf, i32 0, i32 %buf_pos.0 ; [#uses=1] + %tmp90 = sub i32 %buf_size.0, %buf_pos.0 ; [#uses=1] + %tmp91 = insertvalue %"byte[]" undef, i32 %tmp90, 0 ; <%"byte[]"> [#uses=1] + %tmp92 = insertvalue %"byte[]" %tmp91, i8* %tmp89, 1 ; <%"byte[]"> [#uses=1] + %tmp94 = invoke fastcc i32 %"data.socket().send"(%tango.net.Socket.Socket* %tmp82, %"byte[]" %tmp92, i32 0) + to label %postinvoke93 unwind label %landingpad ; [#uses=4] + +postinvoke93: ; preds = %postinvoke81 + %tmp96 = icmp eq i32 %tmp94, -1 ; [#uses=1] + br i1 %tmp96, label %endwhile, label %endif98 + +endif98: ; preds = %postinvoke93 + %tmp102 = add i32 %buf_pos.0, %tmp94 ; [#uses=2] + %tmp105 = add i32 %pos.0, %tmp94 ; [#uses=3] + %tmp107 = icmp eq i8* %progress_arg157, null ; [#uses=1] + %tmp108 = icmp eq void (i8*, i32)* %progress_arg158, null ; [#uses=1] + %tmp109 = and i1 %tmp107, %tmp108 ; [#uses=1] + br i1 %tmp109, label %endif112, label %if111 + +if111: ; preds = %endif98 + invoke fastcc void %progress_arg158(i8* %progress_arg157, i32 %tmp105) + to label %endif112 unwind label %landingpad + +endif112: ; preds = %if111, %endif98 + %tmp120 = icmp eq i32 %tmp94, 0 ; [#uses=1] + br i1 %tmp120, label %whilecond, label %if121 + +if121: ; preds = %endif112 + invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp123) + to label %postinvoke124 unwind label %landingpad + +postinvoke124: ; preds = %if121 + %tmp128 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.timeout at vtbl129" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp128, i32 0, i32 10 ; [#uses=1] + %this.timeout131 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl129", align 4 ; [#uses=1] + invoke fastcc void %this.timeout131(%tango.time.Time.Time* noalias nocapture sret %.rettmp132, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + to label %postinvoke133 unwind label %landingpad + +postinvoke133: ; preds = %postinvoke124 + %.rettmp132.0 = getelementptr %tango.time.Time.Time* %.rettmp132, i32 0, i32 0 ; [#uses=1] + %tmp194 = load i64* %.rettmp132.0, align 8 ; [#uses=1] + %tmp1.i = getelementptr %tango.time.Time.Time* %.rettmp123, i32 0, i32 0 ; [#uses=1] + %tmp3.i = load i64* %tmp1.i, align 8 ; [#uses=1] + %tmp5.i171 = add i64 %tmp3.i, %tmp194 ; [#uses=1] + br label %whilecond + +endwhile: ; preds = %postinvoke93, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %postinvoke19, %whilecond + %completed.3 = phi i1 [ %completed.2, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit ], [ %completed.1, %postinvoke93 ], [ %completed.2, %postinvoke19 ], [ %completed.2, %whilecond ], [ %completed.2, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit ] ; [#uses=1] + br i1 %completed.3, label %finally, label %if138 + +if138: ; preds = %endwhile + %.newclass_gc_alloc141 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) + to label %postinvoke140 unwind label %landingpad ; [#uses=6] + +postinvoke140: ; preds = %if138 + %vtbl143 = bitcast i8* %.newclass_gc_alloc141 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl143 + %monitor144 = getelementptr i8* %.newclass_gc_alloc141, i32 4 ; [#uses=1] + %7 = bitcast i8* %monitor144 to i8** ; [#uses=1] + store i8* null, i8** %7 + %tmp145 = getelementptr i8* %.newclass_gc_alloc141, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp145, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc141, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str164, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc141 to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i167 = invoke fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str163, i32 0, i32 0) }, %object.Exception* null) + to label %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit unwind label %landingpad ; <%object.Exception*> [#uses=0] + +_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit: ; preds = %postinvoke140 + %tmp151 = bitcast i8* %.newclass_gc_alloc141 to %object.Object* ; <%object.Object*> [#uses=1] + invoke void @_d_throw_exception(%object.Object* %tmp151) + to label %postinvoke152 unwind label %landingpad + +postinvoke152: ; preds = %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit + unreachable + +finally: ; preds = %endwhile + %.tmp154 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp154) + ret void + +landingpad: ; preds = %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit, %postinvoke140, %if138, %postinvoke124, %if121, %if111, %postinvoke81, %endif59, %if58, %postinvoke47, %postinvoke38, %postinvoke36, %postinvoke27, %andand, %whilebody, %postinvoke, %entry + %8 = call i8* @llvm.eh.exception() ; [#uses=2] + %9 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %8, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %.tmp = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp) + call void @_d_eh_resume_unwind(i8* %8) + unreachable +} + +define fastcc %"FtpFileInfo[]" @_D5tango3net3ftp9FtpClient13FTPConnection15sendListCommandMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %.frame.i = alloca %nest.splitLines, align 8 ; <%nest.splitLines*> [#uses=5] + %.rettmp.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] + %.rettmp8.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] + %__arrayArg148 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 8 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] + %path_arg169 = extractvalue %"byte[]" %path_arg, 0 ; [#uses=2] + %tmp1 = icmp eq i32 %path_arg169, 0 ; [#uses=1] + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=4] + %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=2] + br i1 %tmp1, label %else, label %if + +if: ; preds = %entry + %path_arg170 = extractvalue %"byte[]" %path_arg, 1 ; [#uses=1] + %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg148, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + %insert166 = insertvalue %"byte[]" undef, i32 %path_arg169, 0 ; <%"byte[]"> [#uses=1] + %insert168 = insertvalue %"byte[]" %insert166, i8* %path_arg170, 1 ; <%"byte[]"> [#uses=1] + store %"byte[]" %insert168, %"byte[]"* %tmp6, align 8 + %tmp9 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] + %tmp10 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str165, i32 0, i32 0) }, %"char[][]" %tmp9) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + br label %endif + +else: ; preds = %entry + %tmp17 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str166, i32 0, i32 0) }, %"char[][]" zeroinitializer) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] + br label %endif + +endif: ; preds = %else, %if + %data.0 = phi %tango.net.SocketConduit.SocketConduit* [ %tmp10, %if ], [ %tmp17, %else ] ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango2io6device5Array5Array7__ClassZ) ; [#uses=9] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Array.Array* ; <%tango.io.device.Array.Array*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Array.Array.__vtbl** ; <%tango.io.device.Array.Array.__vtbl**> [#uses=2] + store %tango.io.device.Array.Array.__vtbl* @_D5tango2io6device5Array5Array6__vtblZ, %tango.io.device.Array.Array.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp18 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp18, i8* bitcast (%4** getelementptr (%tango.io.device.Array.Array* bitcast (%26* @_D5tango2io6device5Array5Array6__initZ to %tango.io.device.Array.Array*), i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp2.i = load %tango.io.device.Array.Array.__vtbl** %vtbl ; <%tango.io.device.Array.Array.__vtbl*> [#uses=1] + %"this.assign at vtbl.i" = getelementptr %tango.io.device.Array.Array.__vtbl* %tmp2.i, i32 0, i32 15 ; <%tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)**> [#uses=1] + %this.assign.i = load %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)** %"this.assign at vtbl.i", align 4 ; <%tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)*> [#uses=1] + %.gc_mem.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ah6__initZ, i32 256) ; [#uses=1] + %tmp5.i = insertvalue %"byte[]" undef, i32 256, 0 ; <%"byte[]"> [#uses=1] + %tmp6.i = insertvalue %"byte[]" %tmp5.i, i8* %.gc_mem.i, 1 ; <%"byte[]"> [#uses=1] + %tmp7.i = call fastcc %tango.io.device.Array.Array* %this.assign.i(%tango.io.device.Array.Array* %.newclass_gc, %"byte[]" %tmp6.i, i32 0) ; <%tango.io.device.Array.Array*> [#uses=0] + %tmp9.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + %1 = bitcast i8* %tmp9.i to i32* ; [#uses=1] + store i32 65536, i32* %1 + %tmp25 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readStream at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp25, i32 0, i32 47 ; [#uses=1] + %this.readStream = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")** %"this.readStream at vtbl", align 4 ; [#uses=1] + %tmp29 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %tmp30 = bitcast i8* %tmp29 to %tango.io.model.IConduit.OutputStream* ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] + call fastcc void %this.readStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data.0, %tango.io.model.IConduit.OutputStream* %tmp30, %"void delegate(uint pos)" zeroinitializer) + %tmp33 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp33, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data.0) + %tmp2.i171 = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] + %2 = bitcast i8* %tmp2.i171 to i8** ; [#uses=1] + %.ptr.i = load i8** %2 ; [#uses=1] + %tmp4.i = getelementptr i8* %.newclass_gc_alloc, i32 24 ; [#uses=1] + %3 = bitcast i8* %tmp4.i to i32* ; [#uses=1] + %tmp6.i172 = getelementptr i8* %.newclass_gc_alloc, i32 28 ; [#uses=1] + %4 = bitcast i8* %tmp6.i172 to i32* ; [#uses=1] + %tmp7.i173 = load i32* %3 ; [#uses=2] + %tmp8.i = load i32* %4 ; [#uses=1] + %tmp9.i174 = getelementptr i8* %.ptr.i, i32 %tmp7.i173 ; [#uses=2] + %tmp10.i = sub i32 %tmp8.i, %tmp7.i173 ; [#uses=2] + %count.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 0 ; [#uses=3] + %result.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1 ; <%"char[][]"*> [#uses=1] + store i32 0, i32* %count.i, align 8 + %5 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp10.i, i32* %5, align 8 + %.sret_arg10.1.i.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp9.i174, i8** %.sret_arg10.1.i.i, align 4 + %tmp1.i186 = bitcast %nest.splitLines* %.frame.i to i8* ; [#uses=2] + %tmp2.i187 = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i186, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func.i = insertvalue %"int delegate(ref char[])" %tmp2.i187, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody41MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp3.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, %"int delegate(ref char[])" %.func.i) ; [#uses=0] + %tmp4.i188 = load i32* %count.i, align 8 ; [#uses=2] + %.gc_mem.i189 = call noalias i8* @_d_newarrayT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_AAa6__initZ to %object.TypeInfo*), i32 %tmp4.i188) ; [#uses=1] + %.gc_mem5.i = bitcast i8* %.gc_mem.i189 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp6.i190 = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 0 ; [#uses=1] + store i32 %tmp4.i188, i32* %tmp6.i190 + %tmp7.i191 = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 1 ; <%"byte[]"**> [#uses=1] + store %"byte[]"* %.gc_mem5.i, %"byte[]"** %tmp7.i191 + store i32 0, i32* %count.i, align 8 + %6 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp10.i, i32* %6, align 8 + %.sret_arg10.1.i17.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp9.i174, i8** %.sret_arg10.1.i17.i, align 4 + %tmp11.i192 = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i186, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func12.i = insertvalue %"int delegate(ref char[])" %tmp11.i192, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody42MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp13.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, %"int delegate(ref char[])" %.func12.i) ; [#uses=0] + %tmp14.i = load %"char[][]"* %result.i ; <%"char[][]"> [#uses=2] + %tmp41159 = extractvalue %"char[][]" %tmp14.i, 0 ; [#uses=3] + %tmp41160 = extractvalue %"char[][]" %tmp14.i, 1 ; <%"byte[]"*> [#uses=3] + br label %foreachcond + +foreachcond: ; preds = %foreachnext, %endif + %dir.1.1 = phi %tango.net.ftp.FtpClient.FtpFileInfo* [ null, %endif ], [ %dir.1.0, %foreachnext ] ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=5] + %dir.0.1 = phi i32 [ 0, %endif ], [ %dir.0.0, %foreachnext ] ; [#uses=15] + %foreachkey.0 = phi i32 [ 0, %endif ], [ %tmp99, %foreachnext ] ; [#uses=3] + %tmp51 = icmp ult i32 %foreachkey.0, %tmp41159 ; [#uses=1] + br i1 %tmp51, label %foreachbody, label %foreachend + +foreachbody: ; preds = %foreachcond + %tmp53 = getelementptr %"byte[]"* %tmp41160, i32 %foreachkey.0 ; <%"byte[]"*> [#uses=1] + %tmp54 = load %"byte[]"* %tmp53 ; <%"byte[]"> [#uses=2] + %tmp54157 = extractvalue %"byte[]" %tmp54, 0 ; [#uses=7] + %tmp54158 = extractvalue %"byte[]" %tmp54, 1 ; [#uses=4] + %tmp57 = icmp eq i32 %tmp54157, 0 ; [#uses=1] + br i1 %tmp57, label %foreachnext, label %endif59 + +endif59: ; preds = %foreachbody + %tmp2.i.i = getelementptr i8* %tmp54158, i32 -1 ; [#uses=1] + br label %forcond.i.i + +forcond.i.i: ; preds = %forbody.i.i, %endif59 + %len.0.i.i = phi i32 [ %tmp54157, %endif59 ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] + %p.0.i.i = phi i8* [ %tmp2.i.i, %endif59 ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] + %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] + %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] + %tmp12.i.i = icmp eq i8 %tmp8.i.i, 32 ; [#uses=1] + br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i + +if.i.i: ; preds = %forbody.i.i + %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] + %tmp16.i.i = ptrtoint i8* %tmp54158 to i32 ; [#uses=1] + %tmp17.i.i = sub i32 %tmp15.i.i, %tmp16.i.i ; [#uses=1] + br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + +_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit: ; preds = %if.i.i, %forcond.i.i + %tmp1318.i = phi i32 [ %tmp17.i.i, %if.i.i ], [ %tmp54157, %forcond.i.i ] ; [#uses=1] + %tmp2.i175 = icmp eq i32 %tmp54157, -1 ; [#uses=1] + br i1 %tmp2.i175, label %whilecond.i, label %if.i + +if.i: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + br label %whilecond.i + +whilecond.i: ; preds = %whilebody.i, %if.i, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %start.0.i = phi i32 [ %tmp54157, %if.i ], [ %tmp8.i177, %whilebody.i ], [ -1, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit ] ; [#uses=2] + %tmp6.i176 = icmp eq i32 %start.0.i, 0 ; [#uses=1] + br i1 %tmp6.i176, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, label %whilebody.i + +whilebody.i: ; preds = %whilecond.i + %tmp8.i177 = add i32 %start.0.i, -1 ; [#uses=3] + %tmp10.i178 = getelementptr i8* %tmp54158, i32 %tmp8.i177 ; [#uses=1] + %tmp11.i179 = load i8* %tmp10.i178 ; [#uses=1] + %tmp15.i = icmp eq i8 %tmp11.i179, 32 ; [#uses=1] + br i1 %tmp15.i, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, label %whilecond.i + +_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit: ; preds = %whilebody.i, %whilecond.i + %tmp64180 = phi i32 [ %tmp8.i177, %whilebody.i ], [ %tmp54157, %whilecond.i ] ; [#uses=1] + %tmp65 = icmp eq i32 %tmp1318.i, %tmp64180 ; [#uses=1] + br i1 %tmp65, label %foreachnext, label %endif67 + +endif67: ; preds = %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit + %tmp71 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parseListLine at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp71, i32 0, i32 50 ; [#uses=1] + %this.parseListLine = load void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseListLine at vtbl", align 4 ; [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %tmp54157, 0 ; <%"byte[]"> [#uses=1] + %insert148 = insertvalue %"byte[]" %insert, i8* %tmp54158, 1 ; <%"byte[]"> [#uses=1] + invoke fastcc void %this.parseListLine(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert148) + to label %postinvoke74 unwind label %landingpad + +postinvoke74: ; preds = %endif67 + %.rettmp141.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + %tmp142 = load i32* %.rettmp141.0, align 8 ; [#uses=2] + %.rettmp141.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 0, i32 1 ; [#uses=1] + %tmp143 = load i8** %.rettmp141.1, align 4 ; [#uses=1] + %.rettmp.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 1 ; [#uses=1] + %tmp124 = load i32* %.rettmp.1, align 8 ; [#uses=1] + %.rettmp.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 2 ; [#uses=1] + %tmp125 = load i64* %.rettmp.2, align 4 ; [#uses=1] + %.rettmp.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 3, i32 0 ; [#uses=1] + %tmp139 = load i64* %.rettmp.3.0, align 4 ; [#uses=1] + %.rettmp.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 4, i32 0 ; [#uses=1] + %tmp137 = load i64* %.rettmp.4.0, align 4 ; [#uses=1] + %.rettmp.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 5, i32 0 ; [#uses=1] + %tmp133 = load i32* %.rettmp.5.0, align 4 ; [#uses=1] + %.rettmp.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 5, i32 1 ; [#uses=1] + %tmp134 = load i8** %.rettmp.5.1, align 4 ; [#uses=1] + %.rettmp.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 6 ; [#uses=1] + %tmp132 = load i8** %.rettmp.6, align 4 ; [#uses=1] + %tmp80 = icmp eq i32 %tmp142, 0 ; [#uses=1] + br i1 %tmp80, label %foreachnext, label %if81 + +if81: ; preds = %postinvoke74 + %tmp85 = add i32 %dir.0.1, 1 ; [#uses=2] + %tmp90 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %dir.1.1 to i8* ; [#uses=1] + %.gc_mem = invoke i8* @_d_arraysetlengthiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D48TypeInfo_AS5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to %object.TypeInfo*), i32 %tmp85, i32 %dir.0.1, i8* %tmp90) + to label %postinvoke91 unwind label %landingpad ; [#uses=1] + +postinvoke91: ; preds = %if81 + %.gc_mem92 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpFileInfo* ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] + %7 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 0, i32 0 ; [#uses=1] + store i32 %tmp142, i32* %7 + %tmp93144.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 0, i32 1 ; [#uses=1] + store i8* %tmp143, i8** %tmp93144.1, align 4 + %tmp93.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 1 ; [#uses=1] + store i32 %tmp124, i32* %tmp93.1, align 8 + %tmp93.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 2 ; [#uses=1] + store i64 %tmp125, i64* %tmp93.2, align 4 + %tmp93.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 3, i32 0 ; [#uses=1] + store i64 %tmp139, i64* %tmp93.3.0, align 4 + %tmp93.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 4, i32 0 ; [#uses=1] + store i64 %tmp137, i64* %tmp93.4.0, align 4 + %tmp93.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 5, i32 0 ; [#uses=1] + store i32 %tmp133, i32* %tmp93.5.0, align 4 + %tmp93.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 5, i32 1 ; [#uses=1] + store i8* %tmp134, i8** %tmp93.5.1, align 4 + %tmp93.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem92, i32 %dir.0.1, i32 6 ; [#uses=1] + store i8* %tmp132, i8** %tmp93.6, align 4 + br label %foreachnext + +foreachnext: ; preds = %postinvoke91, %postinvoke74, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, %foreachbody + %dir.1.0 = phi %tango.net.ftp.FtpClient.FtpFileInfo* [ %dir.1.1, %foreachbody ], [ %dir.1.1, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit ], [ %.gc_mem92, %postinvoke91 ], [ %dir.1.1, %postinvoke74 ] ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=1] + %dir.0.0 = phi i32 [ %dir.0.1, %foreachbody ], [ %dir.0.1, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit ], [ %tmp85, %postinvoke91 ], [ %dir.0.1, %postinvoke74 ] ; [#uses=1] + %tmp99 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +foreachend: ; preds = %foreachcond + %insert162 = insertvalue %"FtpFileInfo[]" undef, i32 %dir.0.1, 0 ; <%"FtpFileInfo[]"> [#uses=1] + %insert164 = insertvalue %"FtpFileInfo[]" %insert162, %tango.net.ftp.FtpClient.FtpFileInfo* %dir.1.1, 1 ; <%"FtpFileInfo[]"> [#uses=1] + %.tmp105 = bitcast %"byte[]"* %tmp41160 to i8* ; [#uses=1] + call void @_d_delarray(i32 %tmp41159, i8* %.tmp105) + ret %"FtpFileInfo[]" %insert164 + +landingpad: ; preds = %if81, %endif67 + %8 = call i8* @llvm.eh.exception() ; [#uses=2] + %9 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %8, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %.tmp = bitcast %"byte[]"* %tmp41160 to i8* ; [#uses=1] + call void @_d_delarray(i32 %tmp41159, i8* %.tmp) + call void @_d_eh_resume_unwind(i8* %8) + unreachable +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %line_arg) { +entry: + %info = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 8 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=22] + %aatmpkeystorage = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage114 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage141 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %line_arg830 = extractvalue %"byte[]" %line_arg, 0 ; [#uses=21] + %line_arg831 = extractvalue %"byte[]" %line_arg, 1 ; [#uses=28] + %tmp2 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %info to i8* ; [#uses=6] + call void @llvm.memcpy.i32(i8* %tmp2, i8* bitcast (%tango.net.ftp.FtpClient.FtpFileInfo* @_D5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to i8*), i32 48, i32 4) + %tmp5 = load i8* %line_arg831 ; [#uses=3] + br label %forcond.i.i + +forcond.i.i: ; preds = %forbody.i.i, %entry + %len.0.i.i = phi i32 [ 10, %entry ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] + %p.0.i.i = phi i8* [ getelementptr ([11 x i8]* @.str167, i32 0, i32 -1), %entry ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] + %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i, label %_D5tango4text4Util15__T8containsTaZ8containsFAaaZb.exit, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] + %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] + %tmp12.i.i = icmp eq i8 %tmp8.i.i, %tmp5 ; [#uses=1] + br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i + +if.i.i: ; preds = %forbody.i.i + %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] + %tmp17.i.i = sub i32 %tmp15.i.i, ptrtoint ([11 x i8]* @.str167 to i32) ; [#uses=1] + %phitmp640 = icmp eq i32 %tmp17.i.i, 10 ; [#uses=1] + %phitmp641 = zext i1 %phitmp640 to i32 ; [#uses=1] + br label %_D5tango4text4Util15__T8containsTaZ8containsFAaaZb.exit + +_D5tango4text4Util15__T8containsTaZ8containsFAaaZb.exit: ; preds = %if.i.i, %forcond.i.i + %tmp39.i = phi i32 [ %phitmp641, %if.i.i ], [ 1, %forcond.i.i ] ; [#uses=1] + switch i32 %tmp39.i, label %default223 [ + i32 1, label %case + i32 0, label %case145 + ] + +case: ; preds = %_D5tango4text4Util15__T8containsTaZ8containsFAaaZb.exit + %tmp9 = icmp ult i32 %line_arg830, 20 ; [#uses=1] + br i1 %tmp9, label %if, label %endif + +if: ; preds = %case + %tmp10 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp10, i8* %tmp2, i32 48, i32 1) + ret void + +endif: ; preds = %case + switch i8 %tmp5, label %else29 [ + i8 100, label %if18 + i8 108, label %if27 + ] + +if18: ; preds = %endif + %tmp20 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 4, i32* %tmp20, align 8 + br label %endif19 + +if27: ; preds = %endif + %tmp30 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 5, i32* %tmp30, align 8 + br label %endif19 + +else29: ; preds = %endif + %tmp36 = icmp eq i8 %tmp5, 45 ; [#uses=1] + %tmp40 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=2] + br i1 %tmp36, label %if37, label %else39 + +if37: ; preds = %else29 + store i32 1, i32* %tmp40, align 8 + br label %endif19 + +else39: ; preds = %else29 + store i32 0, i32* %tmp40, align 8 + br label %endif19 + +endif19: ; preds = %else39, %if37, %if27, %if18 + %tmp42 = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_StaticArray* @_D12TypeInfo_G4a6__initZ to %object.TypeInfo*), %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str168, i32 0, i32 0) }) ; <%"byte[]"> [#uses=2] + %tmp42834 = extractvalue %"byte[]" %tmp42, 0 ; [#uses=1] + %tmp42835 = extractvalue %"byte[]" %tmp42, 1 ; [#uses=10] + br label %forcond.i + +forcond.i: ; preds = %forinc.i, %endif19 + %storemerge.i = phi i32 [ %tmp106.i, %forinc.i ], [ 1, %endif19 ] ; [#uses=1] + %tmp77.i286 = phi i32 [ %tmp106.i, %forinc.i ], [ 1, %endif19 ] ; [#uses=2] + %tmp10.i = icmp ugt i32 %tmp77.i286, 3 ; [#uses=1] + br i1 %tmp10.i, label %forcond.i295, label %forbody.i + +forbody.i: ; preds = %forcond.i + %tmp16.i = getelementptr i8* %line_arg831, i32 %tmp77.i286 ; [#uses=1] + %tmp17.i = load i8* %tmp16.i ; [#uses=1] + switch i8 %tmp17.i, label %forinc.i [ + i8 114, label %if.i + i8 119, label %if49.i + i8 120, label %if82.i + ] + +if.i: ; preds = %forbody.i + %tmp25.i = getelementptr i8* %tmp42835, i32 1 ; [#uses=2] + %tmp33.i = load i8* %tmp25.i ; [#uses=1] + %tmp35.i = or i8 %tmp33.i, 4 ; [#uses=1] + store i8 %tmp35.i, i8* %tmp25.i + br label %forinc.i + +if49.i: ; preds = %forbody.i + %tmp58.i = getelementptr i8* %tmp42835, i32 1 ; [#uses=2] + %tmp66.i = load i8* %tmp58.i ; [#uses=1] + %tmp68.i = or i8 %tmp66.i, 2 ; [#uses=1] + store i8 %tmp68.i, i8* %tmp58.i + br label %forinc.i + +if82.i: ; preds = %forbody.i + %tmp90.i290 = getelementptr i8* %tmp42835, i32 1 ; [#uses=2] + %tmp98.i = load i8* %tmp90.i290 ; [#uses=1] + %tmp100.i = or i8 %tmp98.i, 1 ; [#uses=1] + store i8 %tmp100.i, i8* %tmp90.i290 + br label %forinc.i + +forinc.i: ; preds = %if82.i, %if49.i, %if.i, %forbody.i + %tmp106.i = add i32 %storemerge.i, 1 ; [#uses=2] + br label %forcond.i + +forcond.i295: ; preds = %forinc.i326, %forcond.i + %storemerge.i292 = phi i32 [ %tmp106.i325, %forinc.i326 ], [ 4, %forcond.i ] ; [#uses=1] + %tmp77.i293 = phi i32 [ %tmp106.i325, %forinc.i326 ], [ 4, %forcond.i ] ; [#uses=2] + %tmp10.i294 = icmp ugt i32 %tmp77.i293, 6 ; [#uses=1] + br i1 %tmp10.i294, label %forcond.i332, label %forbody.i301 + +forbody.i301: ; preds = %forcond.i295 + %tmp16.i298 = getelementptr i8* %line_arg831, i32 %tmp77.i293 ; [#uses=1] + %tmp17.i299 = load i8* %tmp16.i298 ; [#uses=1] + switch i8 %tmp17.i299, label %forinc.i326 [ + i8 114, label %if.i307 + i8 119, label %if49.i315 + i8 120, label %if82.i323 + ] + +if.i307: ; preds = %forbody.i301 + %tmp25.i304 = getelementptr i8* %tmp42835, i32 2 ; [#uses=2] + %tmp33.i305 = load i8* %tmp25.i304 ; [#uses=1] + %tmp35.i306 = or i8 %tmp33.i305, 4 ; [#uses=1] + store i8 %tmp35.i306, i8* %tmp25.i304 + br label %forinc.i326 + +if49.i315: ; preds = %forbody.i301 + %tmp58.i312 = getelementptr i8* %tmp42835, i32 2 ; [#uses=2] + %tmp66.i313 = load i8* %tmp58.i312 ; [#uses=1] + %tmp68.i314 = or i8 %tmp66.i313, 2 ; [#uses=1] + store i8 %tmp68.i314, i8* %tmp58.i312 + br label %forinc.i326 + +if82.i323: ; preds = %forbody.i301 + %tmp90.i320 = getelementptr i8* %tmp42835, i32 2 ; [#uses=2] + %tmp98.i321 = load i8* %tmp90.i320 ; [#uses=1] + %tmp100.i322 = or i8 %tmp98.i321, 1 ; [#uses=1] + store i8 %tmp100.i322, i8* %tmp90.i320 + br label %forinc.i326 + +forinc.i326: ; preds = %if82.i323, %if49.i315, %if.i307, %forbody.i301 + %tmp106.i325 = add i32 %storemerge.i292, 1 ; [#uses=2] + br label %forcond.i295 + +forcond.i332: ; preds = %forinc.i363, %forcond.i295 + %storemerge.i329 = phi i32 [ %tmp106.i362, %forinc.i363 ], [ 7, %forcond.i295 ] ; [#uses=3] + %tmp77.i330 = phi i32 [ %tmp106.i362, %forinc.i363 ], [ 7, %forcond.i295 ] ; [#uses=2] + %tmp10.i331 = icmp ugt i32 %tmp77.i330, 9 ; [#uses=1] + br i1 %tmp10.i331, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo9read_modeMFiZv.exit364, label %forbody.i338 + +forbody.i338: ; preds = %forcond.i332 + %tmp16.i335 = getelementptr i8* %line_arg831, i32 %tmp77.i330 ; [#uses=1] + %tmp17.i336 = load i8* %tmp16.i335 ; [#uses=1] + switch i8 %tmp17.i336, label %forinc.i363 [ + i8 114, label %if.i344 + i8 119, label %if49.i352 + i8 120, label %if82.i360 + ] + +if.i344: ; preds = %forbody.i338 + %tmp25.i341 = getelementptr i8* %tmp42835, i32 3 ; [#uses=2] + %tmp33.i342 = load i8* %tmp25.i341 ; [#uses=1] + %tmp35.i343 = or i8 %tmp33.i342, 4 ; [#uses=1] + store i8 %tmp35.i343, i8* %tmp25.i341 + br label %forinc.i363 + +if49.i352: ; preds = %forbody.i338 + %tmp58.i349 = getelementptr i8* %tmp42835, i32 3 ; [#uses=2] + %tmp66.i350 = load i8* %tmp58.i349 ; [#uses=1] + %tmp68.i351 = or i8 %tmp66.i350, 2 ; [#uses=1] + store i8 %tmp68.i351, i8* %tmp58.i349 + br label %forinc.i363 + +if82.i360: ; preds = %forbody.i338 + %tmp90.i357 = getelementptr i8* %tmp42835, i32 3 ; [#uses=2] + %tmp98.i358 = load i8* %tmp90.i357 ; [#uses=1] + %tmp100.i359 = or i8 %tmp98.i358, 1 ; [#uses=1] + store i8 %tmp100.i359, i8* %tmp90.i357 + br label %forinc.i363 + +forinc.i363: ; preds = %if82.i360, %if49.i352, %if.i344, %forbody.i338 + %tmp106.i362 = add i32 %storemerge.i329, 1 ; [#uses=2] + br label %forcond.i332 + +_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo9read_modeMFiZv.exit364: ; preds = %forcond.i332 + %tmp46 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 6 ; [#uses=1] + %tmp47 = bitcast i8** %tmp46 to %32* ; <%32*> [#uses=3] + store %"byte[]" { i32 9, i8* getelementptr ([10 x i8]* @.str169, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage, align 8 + %tmp48 = bitcast %"byte[]"* %aatmpkeystorage to i8* ; [#uses=1] + %aa.index = call i8* @_aaGet(%32* nocapture %tmp47, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 8, i8* nocapture %tmp48) ; [#uses=1] + %tmp49 = bitcast i8* %aa.index to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %insert837 = insertvalue %"byte[]" undef, i32 %tmp42834, 0 ; <%"byte[]"> [#uses=1] + %insert839 = insertvalue %"byte[]" %insert837, i8* %tmp42835, 1 ; <%"byte[]"> [#uses=1] + store %"byte[]" %insert839, %"byte[]"* %tmp49 + br label %whilecond.i370 + +whilecond.i370: ; preds = %whilebody.i372, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo9read_modeMFiZv.exit364 + %.frame.0.11 = phi i32 [ %storemerge.i329, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo9read_modeMFiZv.exit364 ], [ %tmp18.i371.c, %whilebody.i372 ] ; [#uses=2] + %tmp3.i368 = phi i32 [ %tmp18.i371.c, %whilebody.i372 ], [ %storemerge.i329, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo9read_modeMFiZv.exit364 ] ; [#uses=5] + %tmp4.i369 = icmp ult i32 %tmp3.i368, %line_arg830 ; [#uses=1] + br i1 %tmp4.i369, label %andand.i378, label %whilecond22.i383 + +whilebody.i372: ; preds = %andand.i378 + %tmp18.i371.c = add i32 %tmp3.i368, 1 ; [#uses=2] + br label %whilecond.i370 + +andand.i378: ; preds = %whilecond.i370 + %tmp11.i375 = getelementptr i8* %line_arg831, i32 %tmp3.i368 ; [#uses=1] + %tmp12.i376 = load i8* %tmp11.i375 ; [#uses=1] + %tmp14.i377 = icmp eq i8 %tmp12.i376, 32 ; [#uses=1] + br i1 %tmp14.i377, label %whilebody.i372, label %whilecond22.i383 + +whilecond22.i383: ; preds = %whilebody23.i385, %andand.i378, %whilecond.i370 + %.frame.0.10 = phi i32 [ %.frame.0.11, %andand.i378 ], [ %tmp50.i384, %whilebody23.i385 ], [ %.frame.0.11, %whilecond.i370 ] ; [#uses=2] + %tmp49.i381 = phi i32 [ %tmp3.i368, %andand.i378 ], [ %tmp50.i384, %whilebody23.i385 ], [ %tmp3.i368, %whilecond.i370 ] ; [#uses=5] + %tmp32.i382 = icmp ult i32 %tmp49.i381, %line_arg830 ; [#uses=1] + br i1 %tmp32.i382, label %andand33.i391, label %whilecond54.i396 + +whilebody23.i385: ; preds = %andand33.i391 + %tmp50.i384 = add i32 %tmp49.i381, 1 ; [#uses=2] + br label %whilecond22.i383 + +andand33.i391: ; preds = %whilecond22.i383 + %tmp42.i388 = getelementptr i8* %line_arg831, i32 %tmp49.i381 ; [#uses=1] + %tmp43.i389 = load i8* %tmp42.i388 ; [#uses=1] + %tmp45.i390 = icmp eq i8 %tmp43.i389, 32 ; [#uses=1] + br i1 %tmp45.i390, label %whilecond54.i396, label %whilebody23.i385 + +whilecond54.i396: ; preds = %whilebody55.i401, %andand33.i391, %whilecond22.i383 + %.frame.0.9 = phi i32 [ %.frame.0.10, %andand33.i391 ], [ %tmp82.i400, %whilebody55.i401 ], [ %.frame.0.10, %whilecond22.i383 ] ; [#uses=2] + %tmp81.i394 = phi i32 [ %tmp49.i381, %andand33.i391 ], [ %tmp82.i400, %whilebody55.i401 ], [ %tmp49.i381, %whilecond22.i383 ] ; [#uses=3] + %tmp64.i395 = icmp ult i32 %tmp81.i394, %line_arg830 ; [#uses=1] + br i1 %tmp64.i395, label %andand65.i407, label %whilecond.i716 + +whilebody55.i401: ; preds = %andand65.i407 + %tmp82.i400 = add i32 %tmp81.i394, 1 ; [#uses=2] + br label %whilecond54.i396 + +andand65.i407: ; preds = %whilecond54.i396 + %tmp74.i404 = getelementptr i8* %line_arg831, i32 %tmp81.i394 ; [#uses=1] + %tmp75.i405 = load i8* %tmp74.i404 ; [#uses=1] + %tmp77.i406 = icmp eq i8 %tmp75.i405, 32 ; [#uses=1] + br i1 %tmp77.i406, label %whilebody55.i401, label %whilecond.i716 + +whilecond.i716: ; preds = %whilebody.i717, %andand65.i407, %whilecond54.i396 + %.frame.0.0 = phi i32 [ %tmp18.i.c829, %whilebody.i717 ], [ %.frame.0.9, %whilecond54.i396 ], [ %.frame.0.9, %andand65.i407 ] ; [#uses=7] + %tmp4.i715 = icmp ult i32 %.frame.0.0, %line_arg830 ; [#uses=1] + br i1 %tmp4.i715, label %andand.i721, label %whilecond22.i724 + +whilebody.i717: ; preds = %andand.i721 + %tmp18.i.c829 = add i32 %.frame.0.0, 1 ; [#uses=1] + br label %whilecond.i716 + +andand.i721: ; preds = %whilecond.i716 + %tmp11.i718 = getelementptr i8* %line_arg831, i32 %.frame.0.0 ; [#uses=1] + %tmp12.i719 = load i8* %tmp11.i718 ; [#uses=1] + %tmp14.i720 = icmp eq i8 %tmp12.i719, 32 ; [#uses=1] + br i1 %tmp14.i720, label %whilebody.i717, label %whilecond22.i724 + +whilecond22.i724: ; preds = %whilebody23.i726, %andand.i721, %whilecond.i716 + %.frame.0.1 = phi i32 [ %.frame.0.0, %andand.i721 ], [ %tmp50.i725, %whilebody23.i726 ], [ %.frame.0.0, %whilecond.i716 ] ; [#uses=2] + %tmp49.i722 = phi i32 [ %.frame.0.0, %andand.i721 ], [ %tmp50.i725, %whilebody23.i726 ], [ %.frame.0.0, %whilecond.i716 ] ; [#uses=5] + %tmp32.i723 = icmp ult i32 %tmp49.i722, %line_arg830 ; [#uses=1] + br i1 %tmp32.i723, label %andand33.i731, label %whilecond54.i734 + +whilebody23.i726: ; preds = %andand33.i731 + %tmp50.i725 = add i32 %tmp49.i722, 1 ; [#uses=2] + br label %whilecond22.i724 + +andand33.i731: ; preds = %whilecond22.i724 + %tmp42.i728 = getelementptr i8* %line_arg831, i32 %tmp49.i722 ; [#uses=1] + %tmp43.i729 = load i8* %tmp42.i728 ; [#uses=1] + %tmp45.i730 = icmp eq i8 %tmp43.i729, 32 ; [#uses=1] + br i1 %tmp45.i730, label %whilecond54.i734, label %whilebody23.i726 + +whilecond54.i734: ; preds = %whilebody55.i736, %andand33.i731, %whilecond22.i724 + %.frame.0.2 = phi i32 [ %.frame.0.1, %andand33.i731 ], [ %tmp82.i735, %whilebody55.i736 ], [ %.frame.0.1, %whilecond22.i724 ] ; [#uses=2] + %tmp81.i732 = phi i32 [ %tmp49.i722, %andand33.i731 ], [ %tmp82.i735, %whilebody55.i736 ], [ %tmp49.i722, %whilecond22.i724 ] ; [#uses=3] + %tmp64.i733 = icmp ult i32 %tmp81.i732, %line_arg830 ; [#uses=1] + br i1 %tmp64.i733, label %andand65.i740, label %whilecond.i750 + +whilebody55.i736: ; preds = %andand65.i740 + %tmp82.i735 = add i32 %tmp81.i732, 1 ; [#uses=2] + br label %whilecond54.i734 + +andand65.i740: ; preds = %whilecond54.i734 + %tmp74.i737 = getelementptr i8* %line_arg831, i32 %tmp81.i732 ; [#uses=1] + %tmp75.i738 = load i8* %tmp74.i737 ; [#uses=1] + %tmp77.i739 = icmp eq i8 %tmp75.i738, 32 ; [#uses=1] + br i1 %tmp77.i739, label %whilebody55.i736, label %whilecond.i750 + +whilecond.i750: ; preds = %whilebody.i752, %andand65.i740, %whilecond54.i734 + %.frame.0.3 = phi i32 [ %tmp18.i751.c, %whilebody.i752 ], [ %.frame.0.2, %whilecond54.i734 ], [ %.frame.0.2, %andand65.i740 ] ; [#uses=11] + %tmp4.i749 = icmp ult i32 %.frame.0.3, %line_arg830 ; [#uses=1] + br i1 %tmp4.i749, label %andand.i758, label %whilecond22.i761 + +whilebody.i752: ; preds = %andand.i758 + %tmp18.i751.c = add i32 %.frame.0.3, 1 ; [#uses=1] + br label %whilecond.i750 + +andand.i758: ; preds = %whilecond.i750 + %tmp11.i755 = getelementptr i8* %line_arg831, i32 %.frame.0.3 ; [#uses=1] + %tmp12.i756 = load i8* %tmp11.i755 ; [#uses=1] + %tmp14.i757 = icmp eq i8 %tmp12.i756, 32 ; [#uses=1] + br i1 %tmp14.i757, label %whilebody.i752, label %whilecond22.i761 + +whilecond22.i761: ; preds = %whilebody23.i763, %andand.i758, %whilecond.i750 + %.frame.0.4 = phi i32 [ %.frame.0.3, %andand.i758 ], [ %tmp50.i762, %whilebody23.i763 ], [ %.frame.0.3, %whilecond.i750 ] ; [#uses=2] + %tmp49.i759 = phi i32 [ %.frame.0.3, %andand.i758 ], [ %tmp50.i762, %whilebody23.i763 ], [ %.frame.0.3, %whilecond.i750 ] ; [#uses=7] + %tmp32.i760 = icmp ult i32 %tmp49.i759, %line_arg830 ; [#uses=1] + br i1 %tmp32.i760, label %andand33.i769, label %whilecond54.i773 + +whilebody23.i763: ; preds = %andand33.i769 + %tmp50.i762 = add i32 %tmp49.i759, 1 ; [#uses=2] + br label %whilecond22.i761 + +andand33.i769: ; preds = %whilecond22.i761 + %tmp42.i766 = getelementptr i8* %line_arg831, i32 %tmp49.i759 ; [#uses=1] + %tmp43.i767 = load i8* %tmp42.i766 ; [#uses=1] + %tmp45.i768 = icmp eq i8 %tmp43.i767, 32 ; [#uses=1] + br i1 %tmp45.i768, label %whilecond54.i773, label %whilebody23.i763 + +whilecond54.i773: ; preds = %whilebody55.i775, %andand33.i769, %whilecond22.i761 + %.frame.0.5 = phi i32 [ %.frame.0.4, %andand33.i769 ], [ %tmp82.i774, %whilebody55.i775 ], [ %.frame.0.4, %whilecond22.i761 ] ; [#uses=3] + %tmp81.i770 = phi i32 [ %tmp49.i759, %andand33.i769 ], [ %tmp82.i774, %whilebody55.i775 ], [ %tmp49.i759, %whilecond22.i761 ] ; [#uses=3] + %tmp64.i771 = icmp ult i32 %tmp81.i770, %line_arg830 ; [#uses=1] + br i1 %tmp64.i771, label %andand65.i780, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit786 + +whilebody55.i775: ; preds = %andand65.i780 + %tmp82.i774 = add i32 %tmp81.i770, 1 ; [#uses=2] + br label %whilecond54.i773 + +andand65.i780: ; preds = %whilecond54.i773 + %tmp74.i777 = getelementptr i8* %line_arg831, i32 %tmp81.i770 ; [#uses=1] + %tmp75.i778 = load i8* %tmp74.i777 ; [#uses=1] + %tmp77.i779 = icmp eq i8 %tmp75.i778, 32 ; [#uses=1] + br i1 %tmp77.i779, label %whilebody55.i775, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit786 + +_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit786: ; preds = %andand65.i780, %whilecond54.i773 + %tmp89.i782 = getelementptr i8* %line_arg831, i32 %.frame.0.3 ; [#uses=4] + %tmp90.i783 = sub i32 %tmp49.i759, %.frame.0.3 ; [#uses=2] + br label %whilecond.i792 + +whilecond.i792: ; preds = %whilebody.i794, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit786 + %.frame.0.6 = phi i32 [ %.frame.0.5, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit786 ], [ %tmp18.i793.c, %whilebody.i794 ] ; [#uses=11] + %tmp4.i791 = icmp ult i32 %.frame.0.6, %line_arg830 ; [#uses=1] + br i1 %tmp4.i791, label %andand.i800, label %whilecond22.i803 + +whilebody.i794: ; preds = %andand.i800 + %tmp18.i793.c = add i32 %.frame.0.6, 1 ; [#uses=1] + br label %whilecond.i792 + +andand.i800: ; preds = %whilecond.i792 + %tmp11.i797 = getelementptr i8* %line_arg831, i32 %.frame.0.6 ; [#uses=1] + %tmp12.i798 = load i8* %tmp11.i797 ; [#uses=1] + %tmp14.i799 = icmp eq i8 %tmp12.i798, 32 ; [#uses=1] + br i1 %tmp14.i799, label %whilebody.i794, label %whilecond22.i803 + +whilecond22.i803: ; preds = %whilebody23.i805, %andand.i800, %whilecond.i792 + %.frame.0.7 = phi i32 [ %.frame.0.6, %andand.i800 ], [ %tmp50.i804, %whilebody23.i805 ], [ %.frame.0.6, %whilecond.i792 ] ; [#uses=2] + %tmp49.i801 = phi i32 [ %.frame.0.6, %andand.i800 ], [ %tmp50.i804, %whilebody23.i805 ], [ %.frame.0.6, %whilecond.i792 ] ; [#uses=7] + %tmp32.i802 = icmp ult i32 %tmp49.i801, %line_arg830 ; [#uses=1] + br i1 %tmp32.i802, label %andand33.i811, label %whilecond54.i815 + +whilebody23.i805: ; preds = %andand33.i811 + %tmp50.i804 = add i32 %tmp49.i801, 1 ; [#uses=2] + br label %whilecond22.i803 + +andand33.i811: ; preds = %whilecond22.i803 + %tmp42.i808 = getelementptr i8* %line_arg831, i32 %tmp49.i801 ; [#uses=1] + %tmp43.i809 = load i8* %tmp42.i808 ; [#uses=1] + %tmp45.i810 = icmp eq i8 %tmp43.i809, 32 ; [#uses=1] + br i1 %tmp45.i810, label %whilecond54.i815, label %whilebody23.i805 + +whilecond54.i815: ; preds = %whilebody55.i817, %andand33.i811, %whilecond22.i803 + %.frame.0.8 = phi i32 [ %.frame.0.7, %andand33.i811 ], [ %tmp82.i816, %whilebody55.i817 ], [ %.frame.0.7, %whilecond22.i803 ] ; [#uses=2] + %tmp81.i812 = phi i32 [ %tmp49.i801, %andand33.i811 ], [ %tmp82.i816, %whilebody55.i817 ], [ %tmp49.i801, %whilecond22.i803 ] ; [#uses=3] + %tmp64.i813 = icmp ult i32 %tmp81.i812, %line_arg830 ; [#uses=1] + br i1 %tmp64.i813, label %andand65.i822, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit828 + +whilebody55.i817: ; preds = %andand65.i822 + %tmp82.i816 = add i32 %tmp81.i812, 1 ; [#uses=2] + br label %whilecond54.i815 + +andand65.i822: ; preds = %whilecond54.i815 + %tmp74.i819 = getelementptr i8* %line_arg831, i32 %tmp81.i812 ; [#uses=1] + %tmp75.i820 = load i8* %tmp74.i819 ; [#uses=1] + %tmp77.i821 = icmp eq i8 %tmp75.i820, 32 ; [#uses=1] + br i1 %tmp77.i821, label %whilebody55.i817, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit828 + +_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit828: ; preds = %andand65.i822, %whilecond54.i815 + %tmp89.i824 = getelementptr i8* %line_arg831, i32 %.frame.0.6 ; [#uses=4] + %tmp90.i825 = sub i32 %tmp49.i801, %.frame.0.6 ; [#uses=2] + %tmp63 = load i8* %tmp89.i824 ; [#uses=2] + br label %forcond.i.i622 + +forcond.i.i622: ; preds = %forbody.i.i626, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit828 + %len.0.i.i618 = phi i32 [ 10, %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit828 ], [ %tmp4.i.i620, %forbody.i.i626 ] ; [#uses=2] + %p.0.i.i619 = phi i8* [ getelementptr ([11 x i8]* @.str170, i32 0, i32 -1), %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit828 ], [ %tmp7.i.i623, %forbody.i.i626 ] ; [#uses=1] + %tmp4.i.i620 = add i32 %len.0.i.i618, -1 ; [#uses=1] + %tmp5.i.i621 = icmp eq i32 %len.0.i.i618, 0 ; [#uses=1] + br i1 %tmp5.i.i621, label %if65, label %forbody.i.i626 + +forbody.i.i626: ; preds = %forcond.i.i622 + %tmp7.i.i623 = getelementptr i8* %p.0.i.i619, i32 1 ; [#uses=3] + %tmp8.i.i624 = load i8* %tmp7.i.i623 ; [#uses=1] + %tmp12.i.i625 = icmp eq i8 %tmp8.i.i624, %tmp63 ; [#uses=1] + br i1 %tmp12.i.i625, label %if.i.i630, label %forcond.i.i622 + +if.i.i630: ; preds = %forbody.i.i626 + %tmp15.i.i627 = ptrtoint i8* %tmp7.i.i623 to i32 ; [#uses=1] + %tmp17.i.i629 = sub i32 %tmp15.i.i627, ptrtoint ([11 x i8]* @.str170 to i32) ; [#uses=1] + %phitmp636 = icmp eq i32 %tmp17.i.i629, 10 ; [#uses=1] + br i1 %phitmp636, label %if65, label %else67 + +if65: ; preds = %if.i.i630, %forcond.i.i622 + %tmp69 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 2 ; [#uses=1] + %tmp4.i.i532 = icmp eq i32 %tmp49.i759, %.frame.0.3 ; [#uses=1] + br i1 %tmp4.i.i532, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576, label %forcond.i.i539 + +forcond.i.i539: ; preds = %forinc.i.i546, %if65 + %sign.1.i533 = phi i1 [ false, %if65 ], [ %sign.0.i543, %forinc.i.i546 ] ; [#uses=4] + %len.0.i.i534 = phi i32 [ %tmp33.i.i545, %forinc.i.i546 ], [ %tmp90.i783, %if65 ] ; [#uses=3] + %p.0.i.i535 = phi i8* [ %tmp30.i.i544, %forinc.i.i546 ], [ %tmp89.i782, %if65 ] ; [#uses=6] + %c.0.in.i.i536 = phi i8* [ %tmp30.i.i544, %forinc.i.i546 ], [ %tmp89.i782, %if65 ] ; [#uses=1] + %c.0.i.i537 = load i8* %c.0.in.i.i536 ; [#uses=2] + %tmp8.i.i538 = icmp eq i32 %len.0.i.i534, 0 ; [#uses=1] + br i1 %tmp8.i.i538, label %endfor.i.i550, label %forbody.i.i540 + +forbody.i.i540: ; preds = %forcond.i.i539 + switch i8 %c.0.i.i537, label %endfor.i.i550 [ + i8 32, label %forinc.i.i546 + i8 9, label %forinc.i.i546 + i8 45, label %if20.i.i541 + i8 43, label %if26.i.i542 + ] + +if20.i.i541: ; preds = %forbody.i.i540 + br label %forinc.i.i546 + +if26.i.i542: ; preds = %forbody.i.i540 + br label %forinc.i.i546 + +forinc.i.i546: ; preds = %if26.i.i542, %if20.i.i541, %forbody.i.i540, %forbody.i.i540 + %sign.0.i543 = phi i1 [ false, %if26.i.i542 ], [ true, %if20.i.i541 ], [ %sign.1.i533, %forbody.i.i540 ], [ %sign.1.i533, %forbody.i.i540 ] ; [#uses=1] + %tmp30.i.i544 = getelementptr i8* %p.0.i.i535, i32 1 ; [#uses=2] + %tmp33.i.i545 = add i32 %len.0.i.i534, -1 ; [#uses=1] + br label %forcond.i.i539 + +endfor.i.i550: ; preds = %forbody.i.i540, %forcond.i.i539 + %tmp37.i.i547 = icmp eq i8 %c.0.i.i537, 48 ; [#uses=1] + %tmp39.i.i548 = icmp sgt i32 %len.0.i.i534, 1 ; [#uses=1] + %or.cond.i.i549 = and i1 %tmp37.i.i547, %tmp39.i.i548 ; [#uses=1] + br i1 %or.cond.i.i549, label %if40.i.i554, label %endif41.i.i564 + +if40.i.i554: ; preds = %endfor.i.i550 + %tmp43.i.i551 = getelementptr i8* %p.0.i.i535, i32 1 ; [#uses=2] + %tmp44.i.i552 = load i8* %tmp43.i.i551 ; [#uses=1] + %tmp45.i.i553 = zext i8 %tmp44.i.i552 to i32 ; [#uses=1] + switch i32 %tmp45.i.i553, label %endif41.i.i564 [ + i32 120, label %case46.i.i556 + i32 88, label %case46.i.i556 + i32 98, label %case51.i.i558 + i32 66, label %case51.i.i558 + i32 111, label %case56.i.i560 + i32 79, label %case56.i.i560 + ] + +case46.i.i556: ; preds = %if40.i.i554, %if40.i.i554 + %tmp48.i.i555 = getelementptr i8* %p.0.i.i535, i32 2 ; [#uses=1] + br label %endif41.i.i564 + +case51.i.i558: ; preds = %if40.i.i554, %if40.i.i554 + %tmp53.i.i557 = getelementptr i8* %p.0.i.i535, i32 2 ; [#uses=1] + br label %endif41.i.i564 + +case56.i.i560: ; preds = %if40.i.i554, %if40.i.i554 + %tmp58.i.i559 = getelementptr i8* %p.0.i.i535, i32 2 ; [#uses=1] + br label %endif41.i.i564 + +endif41.i.i564: ; preds = %case56.i.i560, %case51.i.i558, %case46.i.i556, %if40.i.i554, %endfor.i.i550 + %r.0.i.i561 = phi i32 [ 0, %if40.i.i554 ], [ 8, %case56.i.i560 ], [ 2, %case51.i.i558 ], [ 16, %case46.i.i556 ], [ 0, %endfor.i.i550 ] ; [#uses=2] + %p.2.i.i562 = phi i8* [ %tmp43.i.i551, %if40.i.i554 ], [ %tmp58.i.i559, %case56.i.i560 ], [ %tmp53.i.i557, %case51.i.i558 ], [ %tmp48.i.i555, %case46.i.i556 ], [ %p.0.i.i535, %endfor.i.i550 ] ; [#uses=2] + %tmp63.i.i563 = icmp eq i32 %r.0.i.i561, 0 ; [#uses=1] + br i1 %tmp63.i.i563, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576, label %if70.i.i568 + +if70.i.i568: ; preds = %endif41.i.i564 + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576 + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576: ; preds = %if70.i.i568, %endif41.i.i564, %if65 + %sign.2.i569 = phi i1 [ false, %if65 ], [ %sign.1.i533, %if70.i.i568 ], [ %sign.1.i533, %endif41.i.i564 ] ; [#uses=1] + %radix.0.i570 = phi i32 [ 0, %if65 ], [ %r.0.i.i561, %if70.i.i568 ], [ 10, %endif41.i.i564 ] ; [#uses=2] + %p.1.i.i571 = phi i8* [ %p.2.i.i562, %if70.i.i568 ], [ %tmp89.i782, %if65 ], [ %p.2.i.i562, %endif41.i.i564 ] ; [#uses=1] + %tmp84.i.i572 = ptrtoint i8* %p.1.i.i571 to i32 ; [#uses=1] + %tmp85.i.i573 = ptrtoint i8* %tmp89.i782 to i32 ; [#uses=1] + %tmp86.i.i574 = sub i32 %tmp84.i.i572, %tmp85.i.i573 ; [#uses=2] + %tmp6.i575 = sub i32 %tmp90.i783, %tmp86.i.i574 ; [#uses=1] + br label %foreachcond.i.i581 + +foreachcond.i.i581: ; preds = %if55.i.i610, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576 + %value.0.i.i577 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576 ], [ %tmp65.i.i607, %if55.i.i610 ] ; [#uses=3] + %foreachkey.0.i.i579 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i576 ], [ %tmp70.i.i609, %if55.i.i610 ] ; [#uses=3] + %tmp3.i.i580 = icmp ult i32 %foreachkey.0.i.i579, %tmp6.i575 ; [#uses=1] + br i1 %tmp3.i.i580, label %foreachbody.i.i587, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614 + +foreachbody.i.i587: ; preds = %foreachcond.i.i581 + %tmp5.sum.i582 = add i32 %tmp86.i.i574, %foreachkey.0.i.i579 ; [#uses=1] + %tmp89.i782.sum = add i32 %.frame.0.3, %tmp5.sum.i582 ; [#uses=1] + %tmp5.i.i583 = getelementptr i8* %line_arg831, i32 %tmp89.i782.sum ; [#uses=1] + %tmp6.i.i584 = load i8* %tmp5.i.i583 ; [#uses=6] + %tmp6.off84.i.i585 = add i8 %tmp6.i.i584, -48 ; [#uses=1] + %or.cond.i28.i586 = icmp ugt i8 %tmp6.off84.i.i585, 9 ; [#uses=1] + br i1 %or.cond.i28.i586, label %else.i.i590, label %endif.i.i603 + +else.i.i590: ; preds = %foreachbody.i.i587 + %tmp6.off83.i.i588 = add i8 %tmp6.i.i584, -97 ; [#uses=1] + %or.cond81.i.i589 = icmp ugt i8 %tmp6.off83.i.i588, 25 ; [#uses=1] + br i1 %or.cond81.i.i589, label %else24.i.i595, label %if22.i.i592 + +if22.i.i592: ; preds = %else.i.i590 + %tmp27.i.i591 = add i8 %tmp6.i.i584, -39 ; [#uses=1] + br label %endif.i.i603 + +else24.i.i595: ; preds = %else.i.i590 + %tmp6.off.i.i593 = add i8 %tmp6.i.i584, -65 ; [#uses=1] + %or.cond82.i.i594 = icmp ugt i8 %tmp6.off.i.i593, 25 ; [#uses=1] + br i1 %or.cond82.i.i594, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614, label %if39.i.i597 + +if39.i.i597: ; preds = %else24.i.i595 + %tmp44.i29.i596 = add i8 %tmp6.i.i584, -7 ; [#uses=1] + br label %endif.i.i603 + +endif.i.i603: ; preds = %if39.i.i597, %if22.i.i592, %foreachbody.i.i587 + %c.0.i30.i598 = phi i8 [ %tmp27.i.i591, %if22.i.i592 ], [ %tmp44.i29.i596, %if39.i.i597 ], [ %tmp6.i.i584, %foreachbody.i.i587 ] ; [#uses=1] + %tmp48.i31.i599 = zext i8 %c.0.i30.i598 to i32 ; [#uses=1] + %tmp49.i.i600 = add i32 %tmp48.i31.i599, 208 ; [#uses=1] + %tmp52.i.i601 = and i32 %tmp49.i.i600, 255 ; [#uses=2] + %tmp54.i.i602 = icmp ult i32 %tmp52.i.i601, %radix.0.i570 ; [#uses=1] + br i1 %tmp54.i.i602, label %if55.i.i610, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614 + +if55.i.i610: ; preds = %endif.i.i603 + %tmp59.i.i604 = zext i32 %radix.0.i570 to i64 ; [#uses=1] + %tmp61.i.i605 = mul i64 %value.0.i.i577, %tmp59.i.i604 ; [#uses=1] + %tmp64.i.i606 = zext i32 %tmp52.i.i601 to i64 ; [#uses=1] + %tmp65.i.i607 = add i64 %tmp61.i.i605, %tmp64.i.i606 ; [#uses=1] + %tmp70.i.i609 = add i32 %foreachkey.0.i.i579, 1 ; [#uses=1] + br label %foreachcond.i.i581 + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614: ; preds = %endif.i.i603, %else24.i.i595, %foreachcond.i.i581 + %negval.i611 = sub i64 0, %value.0.i.i577 ; [#uses=1] + %condtmp.0.i612 = select i1 %sign.2.i569, i64 %negval.i611, i64 %value.0.i.i577 ; [#uses=1] + store i64 %condtmp.0.i612, i64* %tmp69 + br label %endif66 + +else67: ; preds = %if.i.i630 + %tmp72 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 2 ; [#uses=1] + %tmp4.i.i447 = icmp eq i32 %tmp49.i801, %.frame.0.6 ; [#uses=1] + br i1 %tmp4.i.i447, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491, label %forcond.i.i454 + +forcond.i.i454: ; preds = %forinc.i.i461, %else67 + %c.0.i.i452 = phi i8 [ %c.0.i.i452.pre, %forinc.i.i461 ], [ %tmp63, %else67 ] ; [#uses=2] + %sign.1.i448 = phi i1 [ false, %else67 ], [ %sign.0.i458, %forinc.i.i461 ] ; [#uses=4] + %len.0.i.i449 = phi i32 [ %tmp33.i.i460, %forinc.i.i461 ], [ %tmp90.i825, %else67 ] ; [#uses=3] + %p.0.i.i450 = phi i8* [ %tmp30.i.i459, %forinc.i.i461 ], [ %tmp89.i824, %else67 ] ; [#uses=6] + %tmp8.i.i453 = icmp eq i32 %len.0.i.i449, 0 ; [#uses=1] + br i1 %tmp8.i.i453, label %endfor.i.i465, label %forbody.i.i455 + +forbody.i.i455: ; preds = %forcond.i.i454 + switch i8 %c.0.i.i452, label %endfor.i.i465 [ + i8 32, label %forinc.i.i461 + i8 9, label %forinc.i.i461 + i8 45, label %if20.i.i456 + i8 43, label %if26.i.i457 + ] + +if20.i.i456: ; preds = %forbody.i.i455 + br label %forinc.i.i461 + +if26.i.i457: ; preds = %forbody.i.i455 + br label %forinc.i.i461 + +forinc.i.i461: ; preds = %if26.i.i457, %if20.i.i456, %forbody.i.i455, %forbody.i.i455 + %sign.0.i458 = phi i1 [ false, %if26.i.i457 ], [ true, %if20.i.i456 ], [ %sign.1.i448, %forbody.i.i455 ], [ %sign.1.i448, %forbody.i.i455 ] ; [#uses=1] + %tmp30.i.i459 = getelementptr i8* %p.0.i.i450, i32 1 ; [#uses=2] + %tmp33.i.i460 = add i32 %len.0.i.i449, -1 ; [#uses=1] + %c.0.i.i452.pre = load i8* %tmp30.i.i459 ; [#uses=1] + br label %forcond.i.i454 + +endfor.i.i465: ; preds = %forbody.i.i455, %forcond.i.i454 + %tmp37.i.i462 = icmp eq i8 %c.0.i.i452, 48 ; [#uses=1] + %tmp39.i.i463 = icmp sgt i32 %len.0.i.i449, 1 ; [#uses=1] + %or.cond.i.i464 = and i1 %tmp37.i.i462, %tmp39.i.i463 ; [#uses=1] + br i1 %or.cond.i.i464, label %if40.i.i469, label %endif41.i.i479 + +if40.i.i469: ; preds = %endfor.i.i465 + %tmp43.i.i466 = getelementptr i8* %p.0.i.i450, i32 1 ; [#uses=2] + %tmp44.i.i467 = load i8* %tmp43.i.i466 ; [#uses=1] + %tmp45.i.i468 = zext i8 %tmp44.i.i467 to i32 ; [#uses=1] + switch i32 %tmp45.i.i468, label %endif41.i.i479 [ + i32 120, label %case46.i.i471 + i32 88, label %case46.i.i471 + i32 98, label %case51.i.i473 + i32 66, label %case51.i.i473 + i32 111, label %case56.i.i475 + i32 79, label %case56.i.i475 + ] + +case46.i.i471: ; preds = %if40.i.i469, %if40.i.i469 + %tmp48.i.i470 = getelementptr i8* %p.0.i.i450, i32 2 ; [#uses=1] + br label %endif41.i.i479 + +case51.i.i473: ; preds = %if40.i.i469, %if40.i.i469 + %tmp53.i.i472 = getelementptr i8* %p.0.i.i450, i32 2 ; [#uses=1] + br label %endif41.i.i479 + +case56.i.i475: ; preds = %if40.i.i469, %if40.i.i469 + %tmp58.i.i474 = getelementptr i8* %p.0.i.i450, i32 2 ; [#uses=1] + br label %endif41.i.i479 + +endif41.i.i479: ; preds = %case56.i.i475, %case51.i.i473, %case46.i.i471, %if40.i.i469, %endfor.i.i465 + %r.0.i.i476 = phi i32 [ 0, %if40.i.i469 ], [ 8, %case56.i.i475 ], [ 2, %case51.i.i473 ], [ 16, %case46.i.i471 ], [ 0, %endfor.i.i465 ] ; [#uses=2] + %p.2.i.i477 = phi i8* [ %tmp43.i.i466, %if40.i.i469 ], [ %tmp58.i.i474, %case56.i.i475 ], [ %tmp53.i.i472, %case51.i.i473 ], [ %tmp48.i.i470, %case46.i.i471 ], [ %p.0.i.i450, %endfor.i.i465 ] ; [#uses=2] + %tmp63.i.i478 = icmp eq i32 %r.0.i.i476, 0 ; [#uses=1] + br i1 %tmp63.i.i478, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491, label %if70.i.i483 + +if70.i.i483: ; preds = %endif41.i.i479 + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491 + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491: ; preds = %if70.i.i483, %endif41.i.i479, %else67 + %sign.2.i484 = phi i1 [ false, %else67 ], [ %sign.1.i448, %if70.i.i483 ], [ %sign.1.i448, %endif41.i.i479 ] ; [#uses=1] + %radix.0.i485 = phi i32 [ 0, %else67 ], [ %r.0.i.i476, %if70.i.i483 ], [ 10, %endif41.i.i479 ] ; [#uses=2] + %p.1.i.i486 = phi i8* [ %p.2.i.i477, %if70.i.i483 ], [ %tmp89.i824, %else67 ], [ %p.2.i.i477, %endif41.i.i479 ] ; [#uses=1] + %tmp84.i.i487 = ptrtoint i8* %p.1.i.i486 to i32 ; [#uses=1] + %tmp85.i.i488 = ptrtoint i8* %tmp89.i824 to i32 ; [#uses=1] + %tmp86.i.i489 = sub i32 %tmp84.i.i487, %tmp85.i.i488 ; [#uses=2] + %tmp6.i490 = sub i32 %tmp90.i825, %tmp86.i.i489 ; [#uses=1] + br label %foreachcond.i.i496 + +foreachcond.i.i496: ; preds = %if55.i.i525, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491 + %value.0.i.i492 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491 ], [ %tmp65.i.i522, %if55.i.i525 ] ; [#uses=3] + %foreachkey.0.i.i494 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i491 ], [ %tmp70.i.i524, %if55.i.i525 ] ; [#uses=3] + %tmp3.i.i495 = icmp ult i32 %foreachkey.0.i.i494, %tmp6.i490 ; [#uses=1] + br i1 %tmp3.i.i495, label %foreachbody.i.i502, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529 + +foreachbody.i.i502: ; preds = %foreachcond.i.i496 + %tmp5.sum.i497 = add i32 %tmp86.i.i489, %foreachkey.0.i.i494 ; [#uses=1] + %tmp89.i824.sum = add i32 %.frame.0.6, %tmp5.sum.i497 ; [#uses=1] + %tmp5.i.i498 = getelementptr i8* %line_arg831, i32 %tmp89.i824.sum ; [#uses=1] + %tmp6.i.i499 = load i8* %tmp5.i.i498 ; [#uses=6] + %tmp6.off84.i.i500 = add i8 %tmp6.i.i499, -48 ; [#uses=1] + %or.cond.i28.i501 = icmp ugt i8 %tmp6.off84.i.i500, 9 ; [#uses=1] + br i1 %or.cond.i28.i501, label %else.i.i505, label %endif.i.i518 + +else.i.i505: ; preds = %foreachbody.i.i502 + %tmp6.off83.i.i503 = add i8 %tmp6.i.i499, -97 ; [#uses=1] + %or.cond81.i.i504 = icmp ugt i8 %tmp6.off83.i.i503, 25 ; [#uses=1] + br i1 %or.cond81.i.i504, label %else24.i.i510, label %if22.i.i507 + +if22.i.i507: ; preds = %else.i.i505 + %tmp27.i.i506 = add i8 %tmp6.i.i499, -39 ; [#uses=1] + br label %endif.i.i518 + +else24.i.i510: ; preds = %else.i.i505 + %tmp6.off.i.i508 = add i8 %tmp6.i.i499, -65 ; [#uses=1] + %or.cond82.i.i509 = icmp ugt i8 %tmp6.off.i.i508, 25 ; [#uses=1] + br i1 %or.cond82.i.i509, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529, label %if39.i.i512 + +if39.i.i512: ; preds = %else24.i.i510 + %tmp44.i29.i511 = add i8 %tmp6.i.i499, -7 ; [#uses=1] + br label %endif.i.i518 + +endif.i.i518: ; preds = %if39.i.i512, %if22.i.i507, %foreachbody.i.i502 + %c.0.i30.i513 = phi i8 [ %tmp27.i.i506, %if22.i.i507 ], [ %tmp44.i29.i511, %if39.i.i512 ], [ %tmp6.i.i499, %foreachbody.i.i502 ] ; [#uses=1] + %tmp48.i31.i514 = zext i8 %c.0.i30.i513 to i32 ; [#uses=1] + %tmp49.i.i515 = add i32 %tmp48.i31.i514, 208 ; [#uses=1] + %tmp52.i.i516 = and i32 %tmp49.i.i515, 255 ; [#uses=2] + %tmp54.i.i517 = icmp ult i32 %tmp52.i.i516, %radix.0.i485 ; [#uses=1] + br i1 %tmp54.i.i517, label %if55.i.i525, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529 + +if55.i.i525: ; preds = %endif.i.i518 + %tmp59.i.i519 = zext i32 %radix.0.i485 to i64 ; [#uses=1] + %tmp61.i.i520 = mul i64 %value.0.i.i492, %tmp59.i.i519 ; [#uses=1] + %tmp64.i.i521 = zext i32 %tmp52.i.i516 to i64 ; [#uses=1] + %tmp65.i.i522 = add i64 %tmp61.i.i520, %tmp64.i.i521 ; [#uses=1] + %tmp70.i.i524 = add i32 %foreachkey.0.i.i494, 1 ; [#uses=1] + br label %foreachcond.i.i496 + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529: ; preds = %endif.i.i518, %else24.i.i510, %foreachcond.i.i496 + %negval.i526 = sub i64 0, %value.0.i.i492 ; [#uses=1] + %condtmp.0.i527 = select i1 %sign.2.i484, i64 %negval.i526, i64 %value.0.i.i492 ; [#uses=1] + store i64 %condtmp.0.i527, i64* %tmp72 + br label %endif66 + +endif66: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614 + %tmp85 = phi i32 [ %.frame.0.8, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529 ], [ %.frame.0.5, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614 ] ; [#uses=1] + %tmp75 = phi i32 [ %.frame.0.8, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit529 ], [ %.frame.0.5, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit614 ] ; [#uses=1] + %tmp76 = add i32 %tmp75, 13 ; [#uses=1] + %tmp79 = icmp ult i32 %tmp76, %line_arg830 ; [#uses=1] + br i1 %tmp79, label %endif81, label %if80 + +if80: ; preds = %endif66 + %tmp82 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp82, i8* %tmp2, i32 48, i32 1) + ret void + +endif81: ; preds = %endif66 + %tmp86 = add i32 %tmp85, 13 ; [#uses=2] + %tmp93 = getelementptr i8* %line_arg831, i32 %tmp86 ; [#uses=1] + %tmp94 = sub i32 %line_arg830, %tmp86 ; [#uses=1] + %tmp95 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 0 ; [#uses=4] + store i32 %tmp94, i32* %tmp95, align 8 + %tmp96 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 1 ; [#uses=3] + store i8* %tmp93, i8** %tmp96 + %tmp97 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + %tmp98 = load i32* %tmp97, align 8 ; [#uses=1] + %tmp99 = icmp eq i32 %tmp98, 5 ; [#uses=1] + br i1 %tmp99, label %if100, label %switchend + +if100: ; preds = %endif81 + %tmp102 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0 ; <%"byte[]"*> [#uses=1] + %tmp103 = load %"byte[]"* %tmp102, align 8 ; <%"byte[]"> [#uses=2] + %source_arg59.i = extractvalue %"byte[]" %tmp103, 0 ; [#uses=5] + %source_arg60.i = extractvalue %"byte[]" %tmp103, 1 ; [#uses=2] + %tmp9.i418 = add i32 %source_arg59.i, -3 ; [#uses=2] + %tmp16.i420 = icmp ugt i32 %tmp9.i418, %source_arg59.i ; [#uses=1] + br i1 %tmp16.i420, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %whilecond.i422 + +whilecond.i422: ; preds = %else40.i, %if100 + %source_arg60.pn.i = phi i8* [ %p.0.i, %else40.i ], [ %source_arg60.i, %if100 ] ; [#uses=4] + %start_arg.pn.i = phi i32 [ %tmp49.i443, %else40.i ], [ 0, %if100 ] ; [#uses=3] + %extent.0.i = phi i32 [ %tmp51.i, %else40.i ], [ %tmp9.i418, %if100 ] ; [#uses=5] + %p.0.i = getelementptr i8* %source_arg60.pn.i, i32 %start_arg.pn.i ; [#uses=2] + %tmp18.i421 = icmp eq i32 %extent.0.i, 0 ; [#uses=1] + br i1 %tmp18.i421, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %whilebody.i425 + +whilebody.i425: ; preds = %whilecond.i422 + %p.0.sum63.i = add i32 %start_arg.pn.i, -1 ; [#uses=1] + %tmp2.i.i424 = getelementptr i8* %source_arg60.pn.i, i32 %p.0.sum63.i ; [#uses=1] + br label %forcond.i.i430 + +forcond.i.i430: ; preds = %forbody.i.i434, %whilebody.i425 + %len.0.i.i426 = phi i32 [ %extent.0.i, %whilebody.i425 ], [ %tmp4.i.i428, %forbody.i.i434 ] ; [#uses=2] + %p.0.i.i427 = phi i8* [ %tmp2.i.i424, %whilebody.i425 ], [ %tmp7.i.i431, %forbody.i.i434 ] ; [#uses=1] + %tmp4.i.i428 = add i32 %len.0.i.i426, -1 ; [#uses=1] + %tmp5.i.i429 = icmp eq i32 %len.0.i.i426, 0 ; [#uses=1] + br i1 %tmp5.i.i429, label %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i, label %forbody.i.i434 + +forbody.i.i434: ; preds = %forcond.i.i430 + %tmp7.i.i431 = getelementptr i8* %p.0.i.i427, i32 1 ; [#uses=3] + %tmp8.i.i432 = load i8* %tmp7.i.i431 ; [#uses=1] + %tmp12.i.i433 = icmp eq i8 %tmp8.i.i432, 32 ; [#uses=1] + br i1 %tmp12.i.i433, label %if.i.i438, label %forcond.i.i430 + +if.i.i438: ; preds = %forbody.i.i434 + %tmp15.i.i435 = ptrtoint i8* %tmp7.i.i431 to i32 ; [#uses=1] + %tmp16.i.i436 = ptrtoint i8* %p.0.i to i32 ; [#uses=1] + %tmp17.i.i437 = sub i32 %tmp15.i.i435, %tmp16.i.i436 ; [#uses=1] + br label %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i + +_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i: ; preds = %if.i.i438, %forcond.i.i430 + %tmp2561.i = phi i32 [ %tmp17.i.i437, %if.i.i438 ], [ %extent.0.i, %forcond.i.i430 ] ; [#uses=3] + %tmp27.i = icmp eq i32 %tmp2561.i, %extent.0.i ; [#uses=1] + br i1 %tmp27.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %else.i441 + +else.i441: ; preds = %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i + %p.0.sum.i = add i32 %start_arg.pn.i, %tmp2561.i ; [#uses=2] + %tmp32.i440 = getelementptr i8* %source_arg60.pn.i, i32 %p.0.sum.i ; [#uses=2] + %tmp32.sum.i = add i32 %p.0.sum.i, -1 ; [#uses=1] + %tmp2.i.i.i = getelementptr i8* %source_arg60.pn.i, i32 %tmp32.sum.i ; [#uses=1] + br label %forcond.i.i.i + +forcond.i.i.i: ; preds = %forbody.i.i.i, %else.i441 + %len.0.i.i.i = phi i32 [ 4, %else.i441 ], [ %tmp4.i.i.i, %forbody.i.i.i ] ; [#uses=2] + %s2.0.i.i.i = phi i8* [ getelementptr ([5 x i8]* @.str171, i32 0, i32 0), %else.i441 ], [ %tmp11.i.i.i, %forbody.i.i.i ] ; [#uses=2] + %p.0.i.i.i = phi i8* [ %tmp2.i.i.i, %else.i441 ], [ %tmp7.i.i.i, %forbody.i.i.i ] ; [#uses=1] + %tmp4.i.i.i = add i32 %len.0.i.i.i, -1 ; [#uses=1] + %tmp5.i.i.i = icmp eq i32 %len.0.i.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i.i, label %if38.i, label %forbody.i.i.i + +forbody.i.i.i: ; preds = %forcond.i.i.i + %tmp7.i.i.i = getelementptr i8* %p.0.i.i.i, i32 1 ; [#uses=3] + %tmp8.i.i.i = load i8* %tmp7.i.i.i ; [#uses=1] + %tmp11.i.i.i = getelementptr i8* %s2.0.i.i.i, i32 1 ; [#uses=1] + %tmp12.i.i.i = load i8* %s2.0.i.i.i ; [#uses=1] + %tmp14.i.i.i = icmp eq i8 %tmp8.i.i.i, %tmp12.i.i.i ; [#uses=1] + br i1 %tmp14.i.i.i, label %forcond.i.i.i, label %if.i.i.i + +if.i.i.i: ; preds = %forbody.i.i.i + %tmp17.i.i.i = ptrtoint i8* %tmp7.i.i.i to i32 ; [#uses=1] + %tmp18.i.i.i = ptrtoint i8* %tmp32.i440 to i32 ; [#uses=1] + %tmp19.i.i.i = sub i32 %tmp17.i.i.i, %tmp18.i.i.i ; [#uses=1] + %phitmp = icmp eq i32 %tmp19.i.i.i, 4 ; [#uses=1] + br i1 %phitmp, label %if38.i, label %else40.i + +if38.i: ; preds = %if.i.i.i, %forcond.i.i.i + %tmp44.i = ptrtoint i8* %tmp32.i440 to i32 ; [#uses=1] + %tmp45.i442 = ptrtoint i8* %source_arg60.i to i32 ; [#uses=1] + %tmp46.i = sub i32 %tmp44.i, %tmp45.i442 ; [#uses=1] + br label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit + +else40.i: ; preds = %if.i.i.i + %tmp49.i443 = add i32 %tmp2561.i, 1 ; [#uses=2] + %tmp51.i = sub i32 %extent.0.i, %tmp49.i443 ; [#uses=1] + br label %whilecond.i422 + +_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit: ; preds = %if38.i, %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i, %whilecond.i422, %if100 + %tmp104444 = phi i32 [ %tmp46.i, %if38.i ], [ %source_arg59.i, %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i ], [ %source_arg59.i, %whilecond.i422 ], [ %source_arg59.i, %if100 ] ; [#uses=3] + %.len107 = load i32* %tmp95, align 8 ; [#uses=1] + %tmp109 = icmp eq i32 %tmp104444, %.len107 ; [#uses=1] + br i1 %tmp109, label %switchend, label %if110 + +if110: ; preds = %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit + store %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str172, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage114, align 8 + %tmp115 = bitcast %"byte[]"* %aatmpkeystorage114 to i8* ; [#uses=1] + %aa.index116 = call i8* @_aaGet(%32* nocapture %tmp47, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 8, i8* nocapture %tmp115) ; [#uses=2] + %.ptr120 = load i8** %tmp96 ; [#uses=2] + %tmp122 = add i32 %tmp104444, 4 ; [#uses=2] + %.len125 = load i32* %tmp95, align 8 ; [#uses=1] + %tmp126 = getelementptr i8* %.ptr120, i32 %tmp122 ; [#uses=1] + %tmp127 = sub i32 %.len125, %tmp122 ; [#uses=1] + %tmp128 = bitcast i8* %aa.index116 to i32* ; [#uses=1] + store i32 %tmp127, i32* %tmp128 + %tmp129 = getelementptr i8* %aa.index116, i32 4 ; [#uses=1] + %0 = bitcast i8* %tmp129 to i8** ; [#uses=1] + store i8* %tmp126, i8** %0 + store i32 %tmp104444, i32* %tmp95, align 8 + store i8* %.ptr120, i8** %tmp96 + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str173, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage141, align 8 + %tmp142 = bitcast %"byte[]"* %aatmpkeystorage141 to i8* ; [#uses=1] + %aa.index143 = call i8* @_aaGet(%32* nocapture %tmp47, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 8, i8* nocapture %tmp142) ; [#uses=1] + %tmp144 = bitcast i8* %aa.index143 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str174, i32 0, i32 0) }, %"byte[]"* %tmp144 + br label %switchend + +case145: ; preds = %_D5tango4text4Util15__T8containsTaZ8containsFAaaZb.exit + %tmp148 = icmp ult i32 %line_arg830, 18 ; [#uses=1] + br i1 %tmp148, label %if149, label %endif150 + +if149: ; preds = %case145 + %tmp151 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp151, i8* %tmp2, i32 48, i32 1) + ret void + +endif150: ; preds = %case145 + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ) ; [#uses=5] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.RegExpT!(char).RegExpT"* ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=4] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"**> [#uses=4] + store %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ, %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %1 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %1 + %tmp.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i, i8* bitcast (%"Act[]"* getelementptr (%"tango.text.Regex.RegExpT!(char).RegExpT"* bitcast (%30* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ to %"tango.text.Regex.RegExpT!(char).RegExpT"*), i32 0, i32 2) to i8*), i32 36, i32 1) + %tmp2.i.i416 = call fastcc %"tango.text.Regex.RegExpT!(char).RegExpT"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT5_ctorMFAabbbZC5tango4text5Regex14__T7RegExpTTaZ7RegExpT(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, %"byte[]" { i32 42, i8* getelementptr ([43 x i8]* @.str175, i32 0, i32 0) }, i1 false, i1 true, i1 false) ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=0] + %tmp157 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.test at vtbl" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp157, i32 0, i32 7 ; [#uses=1] + %r.test = load i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")** %"r.test at vtbl", align 4 ; [#uses=1] + %insert = insertvalue %"byte[]" undef, i32 %line_arg830, 0 ; <%"byte[]"> [#uses=1] + %insert833 = insertvalue %"byte[]" %insert, i8* %line_arg831, 1 ; <%"byte[]"> [#uses=1] + %tmp160 = call fastcc i1 %r.test(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, %"byte[]" %insert833) ; [#uses=1] + br i1 %tmp160, label %endif162, label %if161 + +if161: ; preds = %endif150 + %tmp163 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp163, i8* %tmp2, i32 48, i32 1) + ret void + +endif162: ; preds = %endif150 + %tmp168 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp168, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp170 = call fastcc %"byte[]" %r.match(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, i32 0) ; <%"byte[]"> [#uses=1] + %tmp171 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 3 ; <%tango.time.Time.Time*> [#uses=1] + %tmp172 = call fastcc i32 @_D5tango4text7convert9TimeStamp14__T7dostimeTaZ7dostimeFAaKS5tango4time4Time4TimeZi(%"byte[]" %tmp170, %tango.time.Time.Time* %tmp171) ; [#uses=1] + %tmp173 = icmp eq i32 %tmp172, 0 ; [#uses=1] + br i1 %tmp173, label %if174, label %endif175 + +if174: ; preds = %endif162 + %tmp = load i64* getelementptr (%tango.time.Time.Time* @_D5tango4time4Time4Time3maxS5tango4time4Time4Time, i32 0, i32 0), align 4 ; [#uses=1] + %2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 3, i32 0 ; [#uses=1] + store i64 %tmp, i64* %2 + br label %endif175 + +endif175: ; preds = %if174, %endif162 + %tmp180 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] + %"r.match at vtbl181" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp180, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] + %r.match183 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl181", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] + %tmp184 = call fastcc %"byte[]" %r.match183(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, i32 0) ; <%"byte[]"> [#uses=1] + %.len185 = extractvalue %"byte[]" %tmp184, 0 ; [#uses=1] + %.tmp = bitcast i8* %.newclass_gc_alloc.i to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_delclass(%object.Object* %.tmp) + br label %whilecond.i + +whilecond.i: ; preds = %whilebody.i, %endif175 + %tmp3.i = phi i32 [ %tmp18.i.c, %whilebody.i ], [ %.len185, %endif175 ] ; [#uses=11] + %tmp4.i = icmp ult i32 %tmp3.i, %line_arg830 ; [#uses=1] + br i1 %tmp4.i, label %andand.i, label %whilecond22.i + +whilebody.i: ; preds = %andand.i + %tmp18.i.c = add i32 %tmp3.i, 1 ; [#uses=1] + br label %whilecond.i + +andand.i: ; preds = %whilecond.i + %tmp11.i = getelementptr i8* %line_arg831, i32 %tmp3.i ; [#uses=1] + %tmp12.i = load i8* %tmp11.i ; [#uses=1] + %tmp14.i = icmp eq i8 %tmp12.i, 32 ; [#uses=1] + br i1 %tmp14.i, label %whilebody.i, label %whilecond22.i + +whilecond22.i: ; preds = %whilebody23.i, %andand.i, %whilecond.i + %tmp217.rle699 = phi i32 [ %tmp50.i, %whilebody23.i ], [ %tmp3.i, %andand.i ], [ %tmp3.i, %whilecond.i ] ; [#uses=2] + %tmp49.i = phi i32 [ %tmp3.i, %andand.i ], [ %tmp50.i, %whilebody23.i ], [ %tmp3.i, %whilecond.i ] ; [#uses=7] + %tmp32.i = icmp ult i32 %tmp49.i, %line_arg830 ; [#uses=1] + br i1 %tmp32.i, label %andand33.i, label %whilecond54.i + +whilebody23.i: ; preds = %andand33.i + %tmp50.i = add i32 %tmp49.i, 1 ; [#uses=2] + br label %whilecond22.i + +andand33.i: ; preds = %whilecond22.i + %tmp42.i = getelementptr i8* %line_arg831, i32 %tmp49.i ; [#uses=1] + %tmp43.i = load i8* %tmp42.i ; [#uses=1] + %tmp45.i = icmp eq i8 %tmp43.i, 32 ; [#uses=1] + br i1 %tmp45.i, label %whilecond54.i, label %whilebody23.i + +whilecond54.i: ; preds = %whilebody55.i, %andand33.i, %whilecond22.i + %tmp217 = phi i32 [ %tmp82.i, %whilebody55.i ], [ %tmp217.rle699, %andand33.i ], [ %tmp217.rle699, %whilecond22.i ] ; [#uses=2] + %tmp81.i = phi i32 [ %tmp49.i, %andand33.i ], [ %tmp82.i, %whilebody55.i ], [ %tmp49.i, %whilecond22.i ] ; [#uses=3] + %tmp64.i = icmp ult i32 %tmp81.i, %line_arg830 ; [#uses=1] + br i1 %tmp64.i, label %andand65.i, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit + +whilebody55.i: ; preds = %andand65.i + %tmp82.i = add i32 %tmp81.i, 1 ; [#uses=2] + br label %whilecond54.i + +andand65.i: ; preds = %whilecond54.i + %tmp74.i = getelementptr i8* %line_arg831, i32 %tmp81.i ; [#uses=1] + %tmp75.i = load i8* %tmp74.i ; [#uses=1] + %tmp77.i = icmp eq i8 %tmp75.i, 32 ; [#uses=1] + br i1 %tmp77.i, label %whilebody55.i, label %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit + +_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit: ; preds = %andand65.i, %whilecond54.i + %tmp89.i = getelementptr i8* %line_arg831, i32 %tmp3.i ; [#uses=4] + %tmp90.i = sub i32 %tmp49.i, %tmp3.i ; [#uses=2] + %tmp201 = load i8* %tmp89.i ; [#uses=2] + %tmp203 = icmp eq i8 %tmp201, 60 ; [#uses=1] + br i1 %tmp203, label %if204, label %else206 + +if204: ; preds = %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit + %tmp207 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 4, i32* %tmp207, align 8 + br label %endif193 + +else206: ; preds = %_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo10parse_wordMFZAa.exit + %tmp208 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 2 ; [#uses=1] + %tmp4.i.i274 = icmp eq i32 %tmp49.i, %tmp3.i ; [#uses=1] + br i1 %tmp4.i.i274, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %forcond.i.i278 + +forcond.i.i278: ; preds = %forinc.i.i, %else206 + %c.0.i.i = phi i8 [ %c.0.i.i.pre, %forinc.i.i ], [ %tmp201, %else206 ] ; [#uses=2] + %sign.1.i = phi i1 [ false, %else206 ], [ %sign.0.i, %forinc.i.i ] ; [#uses=4] + %len.0.i.i275 = phi i32 [ %tmp33.i.i, %forinc.i.i ], [ %tmp90.i, %else206 ] ; [#uses=3] + %p.0.i.i276 = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp89.i, %else206 ] ; [#uses=6] + %tmp8.i.i277 = icmp eq i32 %len.0.i.i275, 0 ; [#uses=1] + br i1 %tmp8.i.i277, label %endfor.i.i280, label %forbody.i.i279 + +forbody.i.i279: ; preds = %forcond.i.i278 + switch i8 %c.0.i.i, label %endfor.i.i280 [ + i8 32, label %forinc.i.i + i8 9, label %forinc.i.i + i8 45, label %if20.i.i + i8 43, label %if26.i.i + ] + +if20.i.i: ; preds = %forbody.i.i279 + br label %forinc.i.i + +if26.i.i: ; preds = %forbody.i.i279 + br label %forinc.i.i + +forinc.i.i: ; preds = %if26.i.i, %if20.i.i, %forbody.i.i279, %forbody.i.i279 + %sign.0.i = phi i1 [ false, %if26.i.i ], [ true, %if20.i.i ], [ %sign.1.i, %forbody.i.i279 ], [ %sign.1.i, %forbody.i.i279 ] ; [#uses=1] + %tmp30.i.i = getelementptr i8* %p.0.i.i276, i32 1 ; [#uses=2] + %tmp33.i.i = add i32 %len.0.i.i275, -1 ; [#uses=1] + %c.0.i.i.pre = load i8* %tmp30.i.i ; [#uses=1] + br label %forcond.i.i278 + +endfor.i.i280: ; preds = %forbody.i.i279, %forcond.i.i278 + %tmp37.i.i = icmp eq i8 %c.0.i.i, 48 ; [#uses=1] + %tmp39.i.i = icmp sgt i32 %len.0.i.i275, 1 ; [#uses=1] + %or.cond.i.i = and i1 %tmp37.i.i, %tmp39.i.i ; [#uses=1] + br i1 %or.cond.i.i, label %if40.i.i, label %endif41.i.i + +if40.i.i: ; preds = %endfor.i.i280 + %tmp43.i.i = getelementptr i8* %p.0.i.i276, i32 1 ; [#uses=2] + %tmp44.i.i = load i8* %tmp43.i.i ; [#uses=1] + %tmp45.i.i = zext i8 %tmp44.i.i to i32 ; [#uses=1] + switch i32 %tmp45.i.i, label %endif41.i.i [ + i32 120, label %case46.i.i + i32 88, label %case46.i.i + i32 98, label %case51.i.i + i32 66, label %case51.i.i + i32 111, label %case56.i.i + i32 79, label %case56.i.i + ] + +case46.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp48.i.i = getelementptr i8* %p.0.i.i276, i32 2 ; [#uses=1] + br label %endif41.i.i + +case51.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp53.i.i = getelementptr i8* %p.0.i.i276, i32 2 ; [#uses=1] + br label %endif41.i.i + +case56.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp58.i.i = getelementptr i8* %p.0.i.i276, i32 2 ; [#uses=1] + br label %endif41.i.i + +endif41.i.i: ; preds = %case56.i.i, %case51.i.i, %case46.i.i, %if40.i.i, %endfor.i.i280 + %r.0.i.i = phi i32 [ 0, %if40.i.i ], [ 8, %case56.i.i ], [ 2, %case51.i.i ], [ 16, %case46.i.i ], [ 0, %endfor.i.i280 ] ; [#uses=2] + %p.2.i.i = phi i8* [ %tmp43.i.i, %if40.i.i ], [ %tmp58.i.i, %case56.i.i ], [ %tmp53.i.i, %case51.i.i ], [ %tmp48.i.i, %case46.i.i ], [ %p.0.i.i276, %endfor.i.i280 ] ; [#uses=2] + %tmp63.i.i = icmp eq i32 %r.0.i.i, 0 ; [#uses=1] + br i1 %tmp63.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %if70.i.i + +if70.i.i: ; preds = %endif41.i.i + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i: ; preds = %if70.i.i, %endif41.i.i, %else206 + %sign.2.i = phi i1 [ false, %else206 ], [ %sign.1.i, %if70.i.i ], [ %sign.1.i, %endif41.i.i ] ; [#uses=1] + %radix.0.i = phi i32 [ 0, %else206 ], [ %r.0.i.i, %if70.i.i ], [ 10, %endif41.i.i ] ; [#uses=2] + %p.1.i.i = phi i8* [ %p.2.i.i, %if70.i.i ], [ %tmp89.i, %else206 ], [ %p.2.i.i, %endif41.i.i ] ; [#uses=1] + %tmp84.i.i = ptrtoint i8* %p.1.i.i to i32 ; [#uses=1] + %tmp85.i.i = ptrtoint i8* %tmp89.i to i32 ; [#uses=1] + %tmp86.i.i = sub i32 %tmp84.i.i, %tmp85.i.i ; [#uses=2] + %tmp6.i281 = sub i32 %tmp90.i, %tmp86.i.i ; [#uses=1] + br label %foreachcond.i.i + +foreachcond.i.i: ; preds = %if55.i.i, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + %value.0.i.i = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp65.i.i, %if55.i.i ] ; [#uses=3] + %foreachkey.0.i.i = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp70.i.i, %if55.i.i ] ; [#uses=3] + %tmp3.i.i = icmp ult i32 %foreachkey.0.i.i, %tmp6.i281 ; [#uses=1] + br i1 %tmp3.i.i, label %foreachbody.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +foreachbody.i.i: ; preds = %foreachcond.i.i + %tmp5.sum.i = add i32 %tmp86.i.i, %foreachkey.0.i.i ; [#uses=1] + %tmp89.i.sum = add i32 %tmp3.i, %tmp5.sum.i ; [#uses=1] + %tmp5.i.i282 = getelementptr i8* %line_arg831, i32 %tmp89.i.sum ; [#uses=1] + %tmp6.i.i = load i8* %tmp5.i.i282 ; [#uses=6] + %tmp6.off84.i.i = add i8 %tmp6.i.i, -48 ; [#uses=1] + %or.cond.i28.i = icmp ugt i8 %tmp6.off84.i.i, 9 ; [#uses=1] + br i1 %or.cond.i28.i, label %else.i.i, label %endif.i.i + +else.i.i: ; preds = %foreachbody.i.i + %tmp6.off83.i.i = add i8 %tmp6.i.i, -97 ; [#uses=1] + %or.cond81.i.i = icmp ugt i8 %tmp6.off83.i.i, 25 ; [#uses=1] + br i1 %or.cond81.i.i, label %else24.i.i, label %if22.i.i + +if22.i.i: ; preds = %else.i.i + %tmp27.i.i = add i8 %tmp6.i.i, -39 ; [#uses=1] + br label %endif.i.i + +else24.i.i: ; preds = %else.i.i + %tmp6.off.i.i = add i8 %tmp6.i.i, -65 ; [#uses=1] + %or.cond82.i.i = icmp ugt i8 %tmp6.off.i.i, 25 ; [#uses=1] + br i1 %or.cond82.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, label %if39.i.i + +if39.i.i: ; preds = %else24.i.i + %tmp44.i29.i = add i8 %tmp6.i.i, -7 ; [#uses=1] + br label %endif.i.i + +endif.i.i: ; preds = %if39.i.i, %if22.i.i, %foreachbody.i.i + %c.0.i30.i = phi i8 [ %tmp27.i.i, %if22.i.i ], [ %tmp44.i29.i, %if39.i.i ], [ %tmp6.i.i, %foreachbody.i.i ] ; [#uses=1] + %tmp48.i31.i = zext i8 %c.0.i30.i to i32 ; [#uses=1] + %tmp49.i.i = add i32 %tmp48.i31.i, 208 ; [#uses=1] + %tmp52.i.i = and i32 %tmp49.i.i, 255 ; [#uses=2] + %tmp54.i.i = icmp ult i32 %tmp52.i.i, %radix.0.i ; [#uses=1] + br i1 %tmp54.i.i, label %if55.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +if55.i.i: ; preds = %endif.i.i + %tmp59.i.i = zext i32 %radix.0.i to i64 ; [#uses=1] + %tmp61.i.i = mul i64 %value.0.i.i, %tmp59.i.i ; [#uses=1] + %tmp64.i.i = zext i32 %tmp52.i.i to i64 ; [#uses=1] + %tmp65.i.i = add i64 %tmp61.i.i, %tmp64.i.i ; [#uses=1] + %tmp70.i.i = add i32 %foreachkey.0.i.i, 1 ; [#uses=1] + br label %foreachcond.i.i + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit: ; preds = %endif.i.i, %else24.i.i, %foreachcond.i.i + %negval.i = sub i64 0, %value.0.i.i ; [#uses=1] + %condtmp.0.i = select i1 %sign.2.i, i64 %negval.i, i64 %value.0.i.i ; [#uses=1] + store i64 %condtmp.0.i, i64* %tmp208 + %tmp211 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 1, i32* %tmp211, align 8 + br label %endif193 + +endif193: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, %if204 + %tmp218 = getelementptr i8* %line_arg831, i32 %tmp217 ; [#uses=1] + %tmp219 = sub i32 %line_arg830, %tmp217 ; [#uses=1] + %tmp220 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp219, i32* %tmp220, align 8 + %tmp221 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp218, i8** %tmp221 + br label %switchend + +default223: ; preds = %_D5tango4text4Util15__T8containsTaZ8containsFAaaZb.exit + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %3 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %3 + %tmp224 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp224, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str177, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str176, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp229 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp229) + unreachable + +switchend: ; preds = %endif193, %if110, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, %endif81 + %tmp232 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 0 ; [#uses=1] + %.len233 = load i32* %tmp232, align 8 ; [#uses=2] + %tmp234 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 1 ; [#uses=1] + %.ptr235 = load i8** %tmp234 ; [#uses=2] + %tmp236 = insertvalue %"byte[]" undef, i32 %.len233, 0 ; <%"byte[]"> [#uses=1] + %tmp237 = insertvalue %"byte[]" %tmp236, i8* %.ptr235, 1 ; <%"byte[]"> [#uses=1] + %tmp238 = call i32 @_adEq(%"byte[]" %tmp237, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str178, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp239 = icmp eq i32 %tmp238, 0 ; [#uses=1] + br i1 %tmp239, label %else242, label %if240 + +if240: ; preds = %switchend + %tmp243 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 2, i32* %tmp243, align 8 + br label %endif241 + +else242: ; preds = %switchend + %tmp250 = insertvalue %"byte[]" undef, i32 %.len233, 0 ; <%"byte[]"> [#uses=1] + %tmp251 = insertvalue %"byte[]" %tmp250, i8* %.ptr235, 1 ; <%"byte[]"> [#uses=1] + %tmp252 = call i32 @_adEq(%"byte[]" %tmp251, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str179, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp253 = icmp eq i32 %tmp252, 0 ; [#uses=1] + br i1 %tmp253, label %endif241, label %if254 + +if254: ; preds = %else242 + %tmp256 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 3, i32* %tmp256, align 8 + br label %endif241 + +endif241: ; preds = %if254, %else242, %if240 + %tmp257 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp257, i8* %tmp2, i32 48, i32 1) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection13parseMlstLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %line_arg) { +entry: + %.frame.i = alloca %nest.delimit, align 8 ; <%nest.delimit*> [#uses=2] + %.rettmp.i = alloca %tango.net.ftp.FtpClient.FtpFeature, align 8 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=5] + %info = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 4 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=14] + %aatmpkeystorage = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage89 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage98 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage120 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage131 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage140 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage151 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage159 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %aatmpkeystorage174 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %aatmpkeystorage184 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %.rettmp198 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] + %aatmpkeystorage202 = alloca %"byte[]", align 8 ; <%"byte[]"*> [#uses=2] + %line_arg217 = extractvalue %"byte[]" %line_arg, 0 ; [#uses=3] + %line_arg218 = extractvalue %"byte[]" %line_arg, 1 ; [#uses=3] + %tmp = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %info to i8* ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (%tango.net.ftp.FtpClient.FtpFileInfo* @_D5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to i8*), i32 48, i32 4) + br label %whilecond + +whilecond: ; preds = %andand, %entry + %filename_pos.0 = phi i32 [ 0, %entry ], [ %tmp5, %andand ] ; [#uses=4] + %tmp3 = icmp ult i32 %filename_pos.0, %line_arg217 ; [#uses=1] + br i1 %tmp3, label %andand, label %endwhile + +andand: ; preds = %whilecond + %tmp5 = add i32 %filename_pos.0, 1 ; [#uses=2] + %tmp7 = getelementptr i8* %line_arg218, i32 %filename_pos.0 ; [#uses=1] + %tmp8 = load i8* %tmp7 ; [#uses=1] + %tmp10 = icmp eq i8 %tmp8, 32 ; [#uses=1] + br i1 %tmp10, label %endwhile, label %whilecond + +endwhile: ; preds = %andand, %whilecond + %filename_pos.1 = phi i32 [ %tmp5, %andand ], [ %filename_pos.0, %whilecond ] ; [#uses=5] + %tmp14 = icmp eq i32 %filename_pos.1, %line_arg217 ; [#uses=1] + br i1 %tmp14, label %if, label %endif + +if: ; preds = %endwhile + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp15 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp15, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str181, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 35, i8* getelementptr ([36 x i8]* @.str180, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp20 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp20) + unreachable + +endif: ; preds = %endwhile + %tmp27 = getelementptr i8* %line_arg218, i32 %filename_pos.1 ; [#uses=1] + %tmp28 = sub i32 %line_arg217, %filename_pos.1 ; [#uses=1] + %tmp29 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp28, i32* %tmp29 + %tmp30 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp27, i8** %tmp30 + %tmp32 = icmp ugt i32 %filename_pos.1, 1 ; [#uses=1] + br i1 %tmp32, label %if33, label %endif34 + +if33: ; preds = %endif + %tmp38 = add i32 %filename_pos.1, -1 ; [#uses=1] + %result.i = getelementptr %nest.delimit* %.frame.i, i32 0, i32 0 ; <%"char[][]"*> [#uses=2] + store %"char[][]" zeroinitializer, %"char[][]"* %result.i, align 8 + %1 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.rettmp.i, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp38, i32* %1, align 8 + %.sret_arg18.1.i.i = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.rettmp.i, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %line_arg218, i8** %.sret_arg18.1.i.i, align 4 + %.sret_arg.1.0.i.i = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.rettmp.i, i32 0, i32 1, i32 0 ; [#uses=1] + store i32 1, i32* %.sret_arg.1.0.i.i, align 8 + %.sret_arg.1.1.i.i = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.rettmp.i, i32 0, i32 1, i32 1 ; [#uses=1] + store i8* getelementptr ([2 x i8]* @.str182, i32 0, i32 0), i8** %.sret_arg.1.1.i.i, align 4 + %tmp2.i225 = bitcast %nest.delimit* %.frame.i to i8* ; [#uses=1] + %tmp3.i = insertvalue %"int delegate(ref char[])" undef, i8* %tmp2.i225, 0 ; <%"int delegate(ref char[])"> [#uses=1] + %.func.i = insertvalue %"int delegate(ref char[])" %tmp3.i, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util14__T7delimitTaZ7delimitFAaAaZAAa15__foreachbody43MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] + %tmp4.i = call fastcc i32 @_D5tango4text4Util18__T10DelimFructTaZ10DelimFruct7opApplyMFDFKAaZiZi(%tango.net.ftp.FtpClient.FtpFeature* %.rettmp.i, %"int delegate(ref char[])" %.func.i) ; [#uses=0] + %tmp5.i226 = load %"char[][]"* %result.i, align 8 ; <%"char[][]"> [#uses=2] + %tmp43215 = extractvalue %"char[][]" %tmp5.i226, 0 ; [#uses=1] + %tmp43216 = extractvalue %"char[][]" %tmp5.i226, 1 ; <%"byte[]"*> [#uses=1] + br label %foreachcond + +foreachcond: ; preds = %foreachnext, %if33 + %foreachkey.0 = phi i32 [ 0, %if33 ], [ %tmp85, %foreachnext ] ; [#uses=3] + %tmp49 = icmp ult i32 %foreachkey.0, %tmp43215 ; [#uses=1] + br i1 %tmp49, label %foreachbody, label %foreachend + +foreachbody: ; preds = %foreachcond + %tmp51 = getelementptr %"byte[]"* %tmp43216, i32 %foreachkey.0 ; <%"byte[]"*> [#uses=1] + %tmp52 = load %"byte[]"* %tmp51 ; <%"byte[]"> [#uses=2] + %tmp52213 = extractvalue %"byte[]" %tmp52, 0 ; [#uses=4] + %tmp52214 = extractvalue %"byte[]" %tmp52, 1 ; [#uses=4] + %tmp2.i.i = getelementptr i8* %tmp52214, i32 -1 ; [#uses=1] + br label %forcond.i.i + +forcond.i.i: ; preds = %forbody.i.i, %foreachbody + %len.0.i.i = phi i32 [ %tmp52213, %foreachbody ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] + %p.0.i.i = phi i8* [ %tmp2.i.i, %foreachbody ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] + %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] + %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] + br i1 %tmp5.i.i, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit, label %forbody.i.i + +forbody.i.i: ; preds = %forcond.i.i + %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] + %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] + %tmp12.i.i = icmp eq i8 %tmp8.i.i, 61 ; [#uses=1] + br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i + +if.i.i: ; preds = %forbody.i.i + %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] + %tmp16.i.i = ptrtoint i8* %tmp52214 to i32 ; [#uses=1] + %tmp17.i.i = sub i32 %tmp15.i.i, %tmp16.i.i ; [#uses=1] + br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + +_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit: ; preds = %if.i.i, %forcond.i.i + %tmp1318.i = phi i32 [ %tmp17.i.i, %if.i.i ], [ %tmp52213, %forcond.i.i ] ; [#uses=3] + %tmp58 = icmp eq i32 %tmp1318.i, %tmp52213 ; [#uses=1] + br i1 %tmp58, label %foreachnext, label %endif60 + +endif60: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %tmp62 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 6 ; [#uses=1] + %tmp68 = insertvalue %"byte[]" undef, i32 %tmp1318.i, 0 ; <%"byte[]"> [#uses=1] + %tmp69 = insertvalue %"byte[]" %tmp68, i8* %tmp52214, 1 ; <%"byte[]"> [#uses=1] + %tmp70 = call fastcc %"byte[]" @_D5tango4text5Ascii7toLowerFAaAaZAa(%"byte[]" %tmp69, %"byte[]" zeroinitializer) ; <%"byte[]"> [#uses=1] + %tmp71 = bitcast i8** %tmp62 to %32* ; <%32*> [#uses=1] + store %"byte[]" %tmp70, %"byte[]"* %aatmpkeystorage, align 8 + %tmp72 = bitcast %"byte[]"* %aatmpkeystorage to i8* ; [#uses=1] + %aa.index = call i8* @_aaGet(%32* nocapture %tmp71, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 8, i8* nocapture %tmp72) ; [#uses=2] + %tmp77 = add i32 %tmp1318.i, 1 ; [#uses=2] + %tmp80 = getelementptr i8* %tmp52214, i32 %tmp77 ; [#uses=1] + %tmp81 = sub i32 %tmp52213, %tmp77 ; [#uses=1] + %tmp82 = bitcast i8* %aa.index to i32* ; [#uses=1] + store i32 %tmp81, i32* %tmp82 + %tmp83 = getelementptr i8* %aa.index, i32 4 ; [#uses=1] + %2 = bitcast i8* %tmp83 to i8** ; [#uses=1] + store i8* %tmp80, i8** %2 + br label %foreachnext + +foreachnext: ; preds = %endif60, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit + %tmp85 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +foreachend: ; preds = %foreachcond + %tmp86 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 6 ; [#uses=1] + %tmp87 = load i8** %tmp86 ; [#uses=1] + %tmp88 = bitcast i8* %tmp87 to %32* ; <%32*> [#uses=10] + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str183, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage89, align 8 + %tmp90 = bitcast %"byte[]"* %aatmpkeystorage89 to i8* ; [#uses=1] + %aa.in = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp90) readonly ; [#uses=1] + %tmp94 = icmp eq i8* %aa.in, null ; [#uses=1] + br i1 %tmp94, label %endif93, label %if92 + +if92: ; preds = %foreachend + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str188, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage98, align 8 + %tmp99 = bitcast %"byte[]"* %aatmpkeystorage98 to i8* ; [#uses=1] + %aa.index100 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp99) readonly ; [#uses=1] + %tmp101 = bitcast i8* %aa.index100 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp102 = load %"byte[]"* %tmp101 ; <%"byte[]"> [#uses=1] + %tmp103 = call fastcc %"byte[]" @_D5tango4text5Ascii7toLowerFAaAaZAa(%"byte[]" %tmp102, %"byte[]" zeroinitializer) ; <%"byte[]"> [#uses=1] + %tmp104 = call i32 @_d_switch_string(%"char[][]" { i32 4, %"byte[]"* getelementptr ([4 x %"byte[]"]* @.string_switch_table_data, i32 0, i32 0) }, %"byte[]" %tmp103) readonly ; [#uses=1] + switch i32 %tmp104, label %default115 [ + i32 2, label %case + i32 1, label %case106 + i32 3, label %case109 + i32 0, label %case112 + ] + +case: ; preds = %if92 + %tmp105 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 1, i32* %tmp105 + br label %endif93 + +case106: ; preds = %if92 + %tmp107 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 2, i32* %tmp107 + br label %endif93 + +case109: ; preds = %if92 + %tmp110 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 3, i32* %tmp110 + br label %endif93 + +case112: ; preds = %if92 + %tmp113 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 4, i32* %tmp113 + br label %endif93 + +default115: ; preds = %if92 + %tmp116 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 1 ; [#uses=1] + store i32 5, i32* %tmp116 + br label %endif93 + +endif93: ; preds = %default115, %case112, %case109, %case106, %case, %foreachend + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str189, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage120, align 8 + %tmp121 = bitcast %"byte[]"* %aatmpkeystorage120 to i8* ; [#uses=1] + %aa.in122 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp121) readonly ; [#uses=1] + %tmp126 = icmp eq i8* %aa.in122, null ; [#uses=1] + br i1 %tmp126, label %endif125, label %if124 + +if124: ; preds = %endif93 + %tmp127 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 2 ; [#uses=1] + store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str190, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage131, align 8 + %tmp132 = bitcast %"byte[]"* %aatmpkeystorage131 to i8* ; [#uses=1] + %aa.index133 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp132) readonly ; [#uses=1] + %tmp134 = bitcast i8* %aa.index133 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp135 = load %"byte[]"* %tmp134 ; <%"byte[]"> [#uses=2] + %digits_arg26.i = extractvalue %"byte[]" %tmp135, 0 ; [#uses=3] + %digits_arg27.i = extractvalue %"byte[]" %tmp135, 1 ; [#uses=5] + %tmp4.i.i229 = icmp eq i32 %digits_arg26.i, 0 ; [#uses=1] + br i1 %tmp4.i.i229, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %forcond.i.i233 + +forcond.i.i233: ; preds = %forinc.i.i, %if124 + %sign.1.i = phi i1 [ false, %if124 ], [ %sign.0.i, %forinc.i.i ] ; [#uses=4] + %len.0.i.i230 = phi i32 [ %tmp33.i.i, %forinc.i.i ], [ %digits_arg26.i, %if124 ] ; [#uses=3] + %p.0.i.i231 = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %digits_arg27.i, %if124 ] ; [#uses=6] + %c.0.in.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %digits_arg27.i, %if124 ] ; [#uses=1] + %c.0.i.i = load i8* %c.0.in.i.i ; [#uses=2] + %tmp8.i.i232 = icmp eq i32 %len.0.i.i230, 0 ; [#uses=1] + br i1 %tmp8.i.i232, label %endfor.i.i235, label %forbody.i.i234 + +forbody.i.i234: ; preds = %forcond.i.i233 + switch i8 %c.0.i.i, label %endfor.i.i235 [ + i8 32, label %forinc.i.i + i8 9, label %forinc.i.i + i8 45, label %if20.i.i + i8 43, label %if26.i.i + ] + +if20.i.i: ; preds = %forbody.i.i234 + br label %forinc.i.i + +if26.i.i: ; preds = %forbody.i.i234 + br label %forinc.i.i + +forinc.i.i: ; preds = %if26.i.i, %if20.i.i, %forbody.i.i234, %forbody.i.i234 + %sign.0.i = phi i1 [ false, %if26.i.i ], [ true, %if20.i.i ], [ %sign.1.i, %forbody.i.i234 ], [ %sign.1.i, %forbody.i.i234 ] ; [#uses=1] + %tmp30.i.i = getelementptr i8* %p.0.i.i231, i32 1 ; [#uses=2] + %tmp33.i.i = add i32 %len.0.i.i230, -1 ; [#uses=1] + br label %forcond.i.i233 + +endfor.i.i235: ; preds = %forbody.i.i234, %forcond.i.i233 + %tmp37.i.i = icmp eq i8 %c.0.i.i, 48 ; [#uses=1] + %tmp39.i.i = icmp sgt i32 %len.0.i.i230, 1 ; [#uses=1] + %or.cond.i.i = and i1 %tmp37.i.i, %tmp39.i.i ; [#uses=1] + br i1 %or.cond.i.i, label %if40.i.i, label %endif41.i.i + +if40.i.i: ; preds = %endfor.i.i235 + %tmp43.i.i = getelementptr i8* %p.0.i.i231, i32 1 ; [#uses=2] + %tmp44.i.i = load i8* %tmp43.i.i ; [#uses=1] + %tmp45.i.i = zext i8 %tmp44.i.i to i32 ; [#uses=1] + switch i32 %tmp45.i.i, label %endif41.i.i [ + i32 120, label %case46.i.i + i32 88, label %case46.i.i + i32 98, label %case51.i.i + i32 66, label %case51.i.i + i32 111, label %case56.i.i + i32 79, label %case56.i.i + ] + +case46.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp48.i.i = getelementptr i8* %p.0.i.i231, i32 2 ; [#uses=1] + br label %endif41.i.i + +case51.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp53.i.i = getelementptr i8* %p.0.i.i231, i32 2 ; [#uses=1] + br label %endif41.i.i + +case56.i.i: ; preds = %if40.i.i, %if40.i.i + %tmp58.i.i = getelementptr i8* %p.0.i.i231, i32 2 ; [#uses=1] + br label %endif41.i.i + +endif41.i.i: ; preds = %case56.i.i, %case51.i.i, %case46.i.i, %if40.i.i, %endfor.i.i235 + %r.0.i.i = phi i32 [ 0, %if40.i.i ], [ 8, %case56.i.i ], [ 2, %case51.i.i ], [ 16, %case46.i.i ], [ 0, %endfor.i.i235 ] ; [#uses=2] + %p.2.i.i = phi i8* [ %tmp43.i.i, %if40.i.i ], [ %tmp58.i.i, %case56.i.i ], [ %tmp53.i.i, %case51.i.i ], [ %tmp48.i.i, %case46.i.i ], [ %p.0.i.i231, %endfor.i.i235 ] ; [#uses=2] + %tmp63.i.i = icmp eq i32 %r.0.i.i, 0 ; [#uses=1] + br i1 %tmp63.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %if70.i.i + +if70.i.i: ; preds = %endif41.i.i + br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + +_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i: ; preds = %if70.i.i, %endif41.i.i, %if124 + %sign.2.i = phi i1 [ false, %if124 ], [ %sign.1.i, %if70.i.i ], [ %sign.1.i, %endif41.i.i ] ; [#uses=1] + %radix.0.i = phi i32 [ 0, %if124 ], [ %r.0.i.i, %if70.i.i ], [ 10, %endif41.i.i ] ; [#uses=2] + %p.1.i.i = phi i8* [ %p.2.i.i, %if70.i.i ], [ %digits_arg27.i, %if124 ], [ %p.2.i.i, %endif41.i.i ] ; [#uses=1] + %tmp84.i.i = ptrtoint i8* %p.1.i.i to i32 ; [#uses=1] + %tmp85.i.i = ptrtoint i8* %digits_arg27.i to i32 ; [#uses=1] + %tmp86.i.i = sub i32 %tmp84.i.i, %tmp85.i.i ; [#uses=2] + %tmp6.i = sub i32 %digits_arg26.i, %tmp86.i.i ; [#uses=1] + br label %foreachcond.i.i + +foreachcond.i.i: ; preds = %if55.i.i, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i + %value.0.i.i = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp65.i.i, %if55.i.i ] ; [#uses=3] + %foreachkey.0.i.i = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp70.i.i, %if55.i.i ] ; [#uses=3] + %tmp3.i.i = icmp ult i32 %foreachkey.0.i.i, %tmp6.i ; [#uses=1] + br i1 %tmp3.i.i, label %foreachbody.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +foreachbody.i.i: ; preds = %foreachcond.i.i + %tmp5.sum.i = add i32 %tmp86.i.i, %foreachkey.0.i.i ; [#uses=1] + %tmp5.i.i236 = getelementptr i8* %digits_arg27.i, i32 %tmp5.sum.i ; [#uses=1] + %tmp6.i.i = load i8* %tmp5.i.i236 ; [#uses=6] + %tmp6.off84.i.i = add i8 %tmp6.i.i, -48 ; [#uses=1] + %or.cond.i28.i = icmp ugt i8 %tmp6.off84.i.i, 9 ; [#uses=1] + br i1 %or.cond.i28.i, label %else.i.i, label %endif.i.i + +else.i.i: ; preds = %foreachbody.i.i + %tmp6.off83.i.i = add i8 %tmp6.i.i, -97 ; [#uses=1] + %or.cond81.i.i = icmp ugt i8 %tmp6.off83.i.i, 25 ; [#uses=1] + br i1 %or.cond81.i.i, label %else24.i.i, label %if22.i.i + +if22.i.i: ; preds = %else.i.i + %tmp27.i.i = add i8 %tmp6.i.i, -39 ; [#uses=1] + br label %endif.i.i + +else24.i.i: ; preds = %else.i.i + %tmp6.off.i.i = add i8 %tmp6.i.i, -65 ; [#uses=1] + %or.cond82.i.i = icmp ugt i8 %tmp6.off.i.i, 25 ; [#uses=1] + br i1 %or.cond82.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, label %if39.i.i + +if39.i.i: ; preds = %else24.i.i + %tmp44.i29.i = add i8 %tmp6.i.i, -7 ; [#uses=1] + br label %endif.i.i + +endif.i.i: ; preds = %if39.i.i, %if22.i.i, %foreachbody.i.i + %c.0.i30.i = phi i8 [ %tmp27.i.i, %if22.i.i ], [ %tmp44.i29.i, %if39.i.i ], [ %tmp6.i.i, %foreachbody.i.i ] ; [#uses=1] + %tmp48.i31.i = zext i8 %c.0.i30.i to i32 ; [#uses=1] + %tmp49.i.i = add i32 %tmp48.i31.i, 208 ; [#uses=1] + %tmp52.i.i = and i32 %tmp49.i.i, 255 ; [#uses=2] + %tmp54.i.i = icmp ult i32 %tmp52.i.i, %radix.0.i ; [#uses=1] + br i1 %tmp54.i.i, label %if55.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit + +if55.i.i: ; preds = %endif.i.i + %tmp59.i.i = zext i32 %radix.0.i to i64 ; [#uses=1] + %tmp61.i.i = mul i64 %value.0.i.i, %tmp59.i.i ; [#uses=1] + %tmp64.i.i = zext i32 %tmp52.i.i to i64 ; [#uses=1] + %tmp65.i.i = add i64 %tmp61.i.i, %tmp64.i.i ; [#uses=1] + %tmp70.i.i = add i32 %foreachkey.0.i.i, 1 ; [#uses=1] + br label %foreachcond.i.i + +_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit: ; preds = %endif.i.i, %else24.i.i, %foreachcond.i.i + %negval.i = sub i64 0, %value.0.i.i ; [#uses=1] + %condtmp.0.i = select i1 %sign.2.i, i64 %negval.i, i64 %value.0.i.i ; [#uses=1] + store i64 %condtmp.0.i, i64* %tmp127 + br label %endif125 + +endif125: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, %endif93 + store %"byte[]" { i32 10, i8* getelementptr ([11 x i8]* @.str191, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage140, align 8 + %tmp141 = bitcast %"byte[]"* %aatmpkeystorage140 to i8* ; [#uses=1] + %aa.in142 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp141) readonly ; [#uses=1] + %tmp146 = icmp eq i8* %aa.in142, null ; [#uses=1] + br i1 %tmp146, label %endif145, label %if144 + +if144: ; preds = %endif125 + %tmp147 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 5 ; <%"byte[]"*> [#uses=1] + store %"byte[]" { i32 10, i8* getelementptr ([11 x i8]* @.str192, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage151, align 8 + %tmp152 = bitcast %"byte[]"* %aatmpkeystorage151 to i8* ; [#uses=1] + %aa.index153 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp152) readonly ; [#uses=1] + %tmp154 = bitcast i8* %aa.index153 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp155 = load %"byte[]"* %tmp154 ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp155, %"byte[]"* %tmp147 + br label %endif145 + +endif145: ; preds = %if144, %endif125 + store %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str193, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage159, align 8 + %tmp160 = bitcast %"byte[]"* %aatmpkeystorage159 to i8* ; [#uses=1] + %aa.in161 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp160) readonly ; [#uses=1] + %tmp165 = icmp eq i8* %aa.in161, null ; [#uses=1] + br i1 %tmp165, label %endif164, label %if163 + +if163: ; preds = %endif145 + %tmp168 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp169 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp168 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parseTimeval at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp169, i32 0, i32 31 ; [#uses=1] + %this.parseTimeval = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseTimeval at vtbl", align 4 ; [#uses=1] + store %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str194, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage174, align 8 + %tmp175 = bitcast %"byte[]"* %aatmpkeystorage174 to i8* ; [#uses=1] + %aa.index176 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp175) readonly ; [#uses=1] + %tmp177 = bitcast i8* %aa.index176 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp178 = load %"byte[]"* %tmp177 ; <%"byte[]"> [#uses=1] + call fastcc void %this.parseTimeval(%tango.time.Time.Time* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %tmp178) + %tmp180219 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] + %tmp221 = load i64* %tmp180219, align 8 ; [#uses=1] + %3 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 3, i32 0 ; [#uses=1] + store i64 %tmp221, i64* %3 + br label %endif164 + +endif164: ; preds = %if163, %endif145 + store %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str195, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage184, align 8 + %tmp185 = bitcast %"byte[]"* %aatmpkeystorage184 to i8* ; [#uses=1] + %aa.in186 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp185) readonly ; [#uses=1] + %tmp190 = icmp eq i8* %aa.in186, null ; [#uses=1] + br i1 %tmp190, label %endif34, label %if188 + +if188: ; preds = %endif164 + %tmp193 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp194 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp193 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.parseTimeval at vtbl195" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp194, i32 0, i32 31 ; [#uses=1] + %this.parseTimeval197 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseTimeval at vtbl195", align 4 ; [#uses=1] + store %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str196, i32 0, i32 0) }, %"byte[]"* %aatmpkeystorage202, align 8 + %tmp203 = bitcast %"byte[]"* %aatmpkeystorage202 to i8* ; [#uses=1] + %aa.index204 = call i8* @_aaIn(%32* nocapture %tmp88, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i8* nocapture %tmp203) readonly ; [#uses=1] + %tmp205 = bitcast i8* %aa.index204 to %"byte[]"* ; <%"byte[]"*> [#uses=1] + %tmp206 = load %"byte[]"* %tmp205 ; <%"byte[]"> [#uses=1] + call fastcc void %this.parseTimeval197(%tango.time.Time.Time* noalias nocapture sret %.rettmp198, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %tmp206) + %tmp208222 = getelementptr %tango.time.Time.Time* %.rettmp198, i32 0, i32 0 ; [#uses=1] + %tmp224 = load i64* %tmp208222, align 8 ; [#uses=1] + %4 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %info, i32 0, i32 4, i32 0 ; [#uses=1] + store i64 %tmp224, i64* %4 + br label %endif34 + +endif34: ; preds = %if188, %endif164, %endif + %tmp209 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp209, i8* %tmp, i32 48, i32 1) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection11getFileInfoMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp3 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp2 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.ls at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp3, i32 0, i32 46 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")**> [#uses=1] + %this.ls = load %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.ls at vtbl", align 4 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*> [#uses=1] + %tmp6 = tail call fastcc %"FtpFileInfo[]" %this.ls(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) ; <%"FtpFileInfo[]"> [#uses=2] + %tmp699 = extractvalue %"FtpFileInfo[]" %tmp6, 0 ; [#uses=1] + %tmp8 = icmp eq i32 %tmp699, 1 ; [#uses=1] + br i1 %tmp8, label %if, label %else + +if: ; preds = %entry + %tmp6100 = extractvalue %"FtpFileInfo[]" %tmp6, 1 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=1] + %tmp11 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + %tmp12 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %tmp6100 to i8* ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp11, i8* %tmp12, i32 48, i32 1) + ret void + +else: ; preds = %entry + %tmp15 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp2 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendListCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp15, i32 0, i32 49 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")**> [#uses=1] + %this.sendListCommand = load %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.sendListCommand at vtbl", align 4 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*> [#uses=1] + %tmp18 = tail call fastcc %"FtpFileInfo[]" %this.sendListCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) ; <%"FtpFileInfo[]"> [#uses=2] + %tmp1897 = extractvalue %"FtpFileInfo[]" %tmp18, 0 ; [#uses=2] + %tmp1898 = extractvalue %"FtpFileInfo[]" %tmp18, 1 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] + switch i32 %tmp1897, label %foreachcond [ + i32 0, label %if22 + i32 1, label %endif34 + ] + +if22: ; preds = %else + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] + store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp24 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp24, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) + %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str198, i32 0, i32 0), i32 3, i32 1) + %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %tmp7.i = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 37, i8* getelementptr ([38 x i8]* @.str197, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp29 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_throw_exception(%object.Object* %tmp29) + unreachable + +foreachcond: ; preds = %foreachnext, %else + %foreachkey.0 = phi i32 [ %tmp54, %foreachnext ], [ 0, %else ] ; [#uses=11] + %tmp40 = icmp ult i32 %foreachkey.0, %tmp1897 ; [#uses=1] + br i1 %tmp40, label %foreachbody, label %endif34 + +foreachbody: ; preds = %foreachcond + %tmp42.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 1 ; [#uses=1] + %tmp74 = load i32* %tmp42.1, align 8 ; [#uses=2] + %tmp47 = icmp eq i32 %tmp74, 2 ; [#uses=1] + br i1 %tmp47, label %if48, label %foreachnext + +if48: ; preds = %foreachbody + %tmp4291.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 0, i32 0 ; [#uses=1] + %tmp92 = load i32* %tmp4291.0 ; [#uses=1] + %tmp4291.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 0, i32 1 ; [#uses=1] + %tmp93 = load i8** %tmp4291.1, align 4 ; [#uses=1] + %tmp42.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 2 ; [#uses=1] + %tmp75 = load i64* %tmp42.2, align 4 ; [#uses=1] + %tmp42.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 3, i32 0 ; [#uses=1] + %tmp89 = load i64* %tmp42.3.0, align 4 ; [#uses=1] + %tmp42.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 4, i32 0 ; [#uses=1] + %tmp87 = load i64* %tmp42.4.0, align 4 ; [#uses=1] + %tmp42.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 5, i32 0 ; [#uses=1] + %tmp83 = load i32* %tmp42.5.0, align 4 ; [#uses=1] + %tmp42.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 5, i32 1 ; [#uses=1] + %tmp84 = load i8** %tmp42.5.1, align 4 ; [#uses=1] + %tmp42.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898, i32 %foreachkey.0, i32 6 ; [#uses=1] + %tmp82 = load i8** %tmp42.6, align 4 ; [#uses=1] + %1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 %tmp92, i32* %1 + %.sret_arg94.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 0, i32 1 ; [#uses=1] + store i8* %tmp93, i8** %.sret_arg94.1, align 4 + %.sret_arg.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 1 ; [#uses=1] + store i32 %tmp74, i32* %.sret_arg.1, align 8 + %.sret_arg.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 2 ; [#uses=1] + store i64 %tmp75, i64* %.sret_arg.2, align 4 + %.sret_arg.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 3, i32 0 ; [#uses=1] + store i64 %tmp89, i64* %.sret_arg.3.0, align 4 + %.sret_arg.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 4, i32 0 ; [#uses=1] + store i64 %tmp87, i64* %.sret_arg.4.0, align 4 + %.sret_arg.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 5, i32 0 ; [#uses=1] + store i32 %tmp83, i32* %.sret_arg.5.0, align 4 + %.sret_arg.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 5, i32 1 ; [#uses=1] + store i8* %tmp84, i8** %.sret_arg.5.1, align 4 + %.sret_arg.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg, i32 0, i32 6 ; [#uses=1] + store i8* %tmp82, i8** %.sret_arg.6, align 4 + ret void + +foreachnext: ; preds = %foreachbody + %tmp54 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +endif34: ; preds = %foreachcond, %else + %tmp58 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %.sret_arg to i8* ; [#uses=1] + %tmp59 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %tmp1898 to i8* ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp58, i8* %tmp59, i32 48, i32 1) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection3putMFAaAaDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %"byte[]" %local_file_arg, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) { +entry: + %style_arg = alloca i32, align 8 ; [#uses=2] + %tmpcast = bitcast i32* %style_arg to %tango.io.device.File.File.Style* ; <%tango.io.device.File.File.Style*> [#uses=1] + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango2io6device4File4File7__ClassZ) ; [#uses=10] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.io.device.File.File* ; <%tango.io.device.File.File*> [#uses=2] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.io.device.File.File.__vtbl** ; <%tango.io.device.File.File.__vtbl**> [#uses=3] + store %tango.io.device.File.File.__vtbl* @_D5tango2io6device4File4File6__vtblZ, %tango.io.device.File.File.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + tail call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (%13** getelementptr (%tango.io.device.File.File* bitcast (%27* @_D5tango2io6device4File4File6__initZ to %tango.io.device.File.File*), i32 0, i32 2) to i8*), i32 32, i32 1) + %tmp50 = load i32* bitcast (%tango.io.device.File.File.Style* @_D5tango2io6device4File4File12ReadExistingS5tango2io6device4File4File5Style to i32*), align 1 ; [#uses=1] + store i32 %tmp50, i32* %style_arg, align 8 + %tmp2.i = load %tango.io.device.File.File.__vtbl** %vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=1] + %"this.open at vtbl.i" = getelementptr %tango.io.device.File.File.__vtbl* %tmp2.i, i32 0, i32 18 ; [#uses=1] + %this.open.i = load void (%tango.io.device.File.File*, %"byte[]", %tango.io.device.File.File.Style*)** %"this.open at vtbl.i", align 4 ; [#uses=1] + tail call fastcc void %this.open.i(%tango.io.device.File.File* %.newclass_gc, %"byte[]" %local_file_arg, %tango.io.device.File.File.Style* byval %tmpcast) + %tmp13 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 7 ; [#uses=2] + %tmp14 = load i32* %tmp13 ; [#uses=2] + %tmp15 = icmp eq i32 %tmp14, 0 ; [#uses=1] + br i1 %tmp15, label %endif, label %if + +if: ; preds = %entry + %tmp18 = load %tango.io.device.File.File.__vtbl** %vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=1] + %"file.seek at vtbl" = getelementptr %tango.io.device.File.File.__vtbl* %tmp18, i32 0, i32 13 ; [#uses=1] + %file.seek = load i64 (%tango.io.device.File.File*, i64, i32)** %"file.seek at vtbl", align 4 ; [#uses=1] + %tmp23 = zext i32 %tmp14 to i64 ; [#uses=1] + %tmp24 = invoke fastcc i64 %file.seek(%tango.io.device.File.File* %.newclass_gc, i64 %tmp23, i32 0) + to label %postinvoke unwind label %landingpad ; [#uses=0] + +postinvoke: ; preds = %if + store i32 0, i32* %tmp13 + br label %endif + +endif: ; preds = %postinvoke, %entry + %tmp28 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp29 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp28 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.put at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp29, i32 0, i32 54 ; [#uses=1] + %this.put = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)", i32)** %"this.put at vtbl", align 4 ; [#uses=1] + %tmp34 = bitcast i8* %tmp to %tango.io.model.IConduit.InputStream* ; <%tango.io.model.IConduit.InputStream*> [#uses=1] + invoke fastcc void %this.put(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %tango.io.model.IConduit.InputStream* %tmp34, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) + to label %finally unwind label %landingpad + +finally: ; preds = %endif + %tmp39 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device* ; <%tango.io.device.Device.Device*> [#uses=1] + %tmp40 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device.__vtbl** ; <%tango.io.device.Device.Device.__vtbl**> [#uses=1] + %tmp41 = load %tango.io.device.Device.Device.__vtbl** %tmp40 ; <%tango.io.device.Device.Device.__vtbl*> [#uses=1] + %"(cast(Device)file).detach at vtbl42" = getelementptr %tango.io.device.Device.Device.__vtbl* %tmp41, i32 0, i32 8 ; [#uses=1] + %"(cast(Device)file).detach44" = load void (%tango.io.device.Device.Device*)** %"(cast(Device)file).detach at vtbl42", align 4 ; [#uses=1] + tail call fastcc void %"(cast(Device)file).detach44"(%tango.io.device.Device.Device* %tmp39) + %.tmp46 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_delclass(%object.Object* %.tmp46) + ret void + +landingpad: ; preds = %endif, %if + %1 = tail call i8* @llvm.eh.exception() ; [#uses=2] + %2 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %1, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %tmp7 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device* ; <%tango.io.device.Device.Device*> [#uses=1] + %tmp8 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device.__vtbl** ; <%tango.io.device.Device.Device.__vtbl**> [#uses=1] + %tmp9 = load %tango.io.device.Device.Device.__vtbl** %tmp8 ; <%tango.io.device.Device.Device.__vtbl*> [#uses=1] + %"(cast(Device)file).detach at vtbl" = getelementptr %tango.io.device.Device.Device.__vtbl* %tmp9, i32 0, i32 8 ; [#uses=1] + %"(cast(Device)file).detach" = load void (%tango.io.device.Device.Device*)** %"(cast(Device)file).detach at vtbl", align 4 ; [#uses=1] + tail call fastcc void %"(cast(Device)file).detach"(%tango.io.device.Device.Device* %tmp7) + %.tmp = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_delclass(%object.Object* %.tmp) + tail call void @_d_eh_resume_unwind(i8* %1) + unreachable +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection3putMFAaC5tango2io5model8IConduit11InputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %tango.io.model.IConduit.InputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) { +entry: + %__arrayArg150 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=4] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.type at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 29 ; [#uses=1] + %this.type = load void (%tango.net.ftp.FtpClient.FTPConnection*, i32)** %"this.type at vtbl", align 4 ; [#uses=1] + call fastcc void %this.type(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=1] + %tmp9 = getelementptr [1 x %"byte[]"]* %__arrayArg150, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp9, align 8 + %tmp12 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] + %tmp13 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str199, i32 0, i32 0) }, %"char[][]" %tmp12) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp15 = icmp eq %tango.io.model.IConduit.InputStream* %stream_arg, null ; [#uses=1] + br i1 %tmp15, label %endif, label %if + +if: ; preds = %entry + %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendStream at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 48 ; [#uses=1] + %this.sendStream = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)")** %"this.sendStream at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp13, %tango.io.model.IConduit.InputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg) + br label %endif + +endif: ; preds = %if, %entry + %tmp25 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp25, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp13) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection6appendMFAaC5tango2io5model8IConduit11InputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %tango.io.model.IConduit.InputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) { +entry: + %__arrayArg151 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=4] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.type at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 29 ; [#uses=1] + %this.type = load void (%tango.net.ftp.FtpClient.FTPConnection*, i32)** %"this.type at vtbl", align 4 ; [#uses=1] + call fastcc void %this.type(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=1] + %tmp9 = getelementptr [1 x %"byte[]"]* %__arrayArg151, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp9, align 8 + %tmp12 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] + %tmp13 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str200, i32 0, i32 0) }, %"char[][]" %tmp12) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendStream at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 48 ; [#uses=1] + %this.sendStream = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)")** %"this.sendStream at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp13, %tango.io.model.IConduit.InputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg) + %tmp23 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp23, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp13) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection11restartSeekMFkZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %offset_arg) { +entry: + %tmp = alloca [16 x i8], align 1 ; <[16 x i8]*> [#uses=3] + %__arrayArg152 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr [16 x i8]* %tmp, i32 0, i32 0 ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp1, i8 -1, i32 16, i32 1) + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg152, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + %tmp49.i = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] + %tmp49178.i = extractvalue %"byte[]" %tmp49.i, 1 ; [#uses=1] + %tmp52.i = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] + %tmp56.i = getelementptr [16 x i8]* %tmp, i32 0, i32 16 ; [#uses=1] + br label %dowhile.i + +dowhile.i: ; preds = %andand.i, %entry + %p.0.i = phi i8* [ %tmp65.i, %andand.i ], [ %tmp56.i, %entry ] ; [#uses=1] + %v.0.i = phi i32 [ %tmp75.i, %andand.i ], [ %offset_arg, %entry ] ; [#uses=2] + %len.0.i = phi i32 [ %tmp78.i, %andand.i ], [ 16, %entry ] ; [#uses=3] + %tmp65.i = getelementptr i8* %p.0.i, i32 -1 ; [#uses=2] + %tmp68.i = urem i32 %v.0.i, %tmp52.i ; [#uses=1] + %tmp71.i = getelementptr i8* %tmp49178.i, i32 %tmp68.i ; [#uses=1] + %tmp72.i = load i8* %tmp71.i ; [#uses=1] + store i8 %tmp72.i, i8* %tmp65.i + %tmp75.i = udiv i32 %v.0.i, %tmp52.i ; [#uses=2] + %tmp76.i = icmp eq i32 %tmp75.i, 0 ; [#uses=1] + br i1 %tmp76.i, label %condtrue.i, label %andand.i + +andand.i: ; preds = %dowhile.i + %tmp78.i = add i32 %len.0.i, -1 ; [#uses=2] + %tmp79.i = icmp eq i32 %len.0.i, 1 ; [#uses=1] + br i1 %tmp79.i, label %condtrue.i, label %dowhile.i + +condtrue.i: ; preds = %andand.i, %dowhile.i + %len.1.i = phi i32 [ %tmp78.i, %andand.i ], [ %len.0.i, %dowhile.i ] ; [#uses=2] + %tmp112.i = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] + %condtmp.0175.i = extractvalue %"byte[]" %tmp112.i, 0 ; [#uses=3] + %tmp117.i = icmp ugt i32 %len.1.i, %condtmp.0175.i ; [#uses=1] + br i1 %tmp117.i, label %if118.i, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +if118.i: ; preds = %condtrue.i + %condtmp.0176.i = extractvalue %"byte[]" %tmp112.i, 1 ; [#uses=1] + %tmp123.i = add i32 %condtmp.0175.i, 1 ; [#uses=1] + %tmp124.i = sub i32 %len.1.i, %tmp123.i ; [#uses=2] + %tmp156.i = getelementptr [16 x i8]* %tmp, i32 0, i32 %tmp124.i ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i, i8* %condtmp.0176.i, i32 %condtmp.0175.i, i32 1) + %tmp170.i = sub i32 16, %tmp124.i ; [#uses=1] + %tmp171.i = insertvalue %"byte[]" undef, i32 %tmp170.i, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i = insertvalue %"byte[]" %tmp171.i, i8* %tmp156.i, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit: ; preds = %if118.i, %condtrue.i + %tmp6.i21 = phi %"byte[]" [ %tmp172.i, %if118.i ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i21, %"byte[]"* %tmp6, align 8 + %tmp13 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str201, i32 0, i32 0) }, %"char[][]" %tmp13) + %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str202, i32 0, i32 0) }) + %tmp19 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 7 ; [#uses=1] + store i32 %offset_arg, i32* %tmp19 + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection8allocateMFlZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i64 %bytes_arg) { +entry: + %tmp = alloca [16 x i8], align 1 ; <[16 x i8]*> [#uses=3] + %__arrayArg153 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] + %tmp1 = getelementptr [16 x i8]* %tmp, i32 0, i32 0 ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp1, i8 -1, i32 16, i32 1) + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] + %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg153, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + %tmp10.i = icmp slt i64 %bytes_arg, 0 ; [#uses=1] + %negval.i = sub i64 0, %bytes_arg ; [#uses=1] + %bytes_arg.lobit = lshr i64 %bytes_arg, 63 ; [#uses=1] + %tmp36 = trunc i64 %bytes_arg.lobit to i32 ; [#uses=3] + %i.1.i = select i1 %tmp10.i, i64 %negval.i, i64 %bytes_arg ; [#uses=3] + %tmp48.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %tmp36, i32 2 ; <%"byte[]"*> [#uses=1] + %tmp49.i = load %"byte[]"* %tmp48.i ; <%"byte[]"> [#uses=1] + %tmp49178.i = extractvalue %"byte[]" %tmp49.i, 1 ; [#uses=2] + %tmp51.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %tmp36, i32 0 ; [#uses=1] + %tmp52.i = load i32* %tmp51.i ; [#uses=3] + %tmp56.i = getelementptr [16 x i8]* %tmp, i32 0, i32 16 ; [#uses=2] + %tmp58.i = icmp ugt i64 %i.1.i, 4294967295 ; [#uses=1] + br i1 %tmp58.i, label %dowhile82.i, label %if59.i + +if59.i: ; preds = %entry + %tmp63.i = trunc i64 %i.1.i to i32 ; [#uses=1] + br label %dowhile.i + +dowhile.i: ; preds = %andand.i, %if59.i + %p.0.i = phi i8* [ %tmp56.i, %if59.i ], [ %tmp65.i, %andand.i ] ; [#uses=1] + %v.0.i = phi i32 [ %tmp63.i, %if59.i ], [ %tmp75.i, %andand.i ] ; [#uses=2] + %len.0.i = phi i32 [ 16, %if59.i ], [ %tmp78.i, %andand.i ] ; [#uses=3] + %tmp65.i = getelementptr i8* %p.0.i, i32 -1 ; [#uses=2] + %tmp68.i = urem i32 %v.0.i, %tmp52.i ; [#uses=1] + %tmp71.i = getelementptr i8* %tmp49178.i, i32 %tmp68.i ; [#uses=1] + %tmp72.i = load i8* %tmp71.i ; [#uses=1] + store i8 %tmp72.i, i8* %tmp65.i + %tmp75.i = udiv i32 %v.0.i, %tmp52.i ; [#uses=2] + %tmp76.i = icmp eq i32 %tmp75.i, 0 ; [#uses=1] + br i1 %tmp76.i, label %condtrue.i, label %andand.i + +andand.i: ; preds = %dowhile.i + %tmp78.i = add i32 %len.0.i, -1 ; [#uses=2] + %tmp79.i = icmp eq i32 %len.0.i, 1 ; [#uses=1] + br i1 %tmp79.i, label %condtrue.i, label %dowhile.i + +dowhile82.i: ; preds = %andand100.i, %entry + %p.2.i = phi i8* [ %tmp86.i, %andand100.i ], [ %tmp56.i, %entry ] ; [#uses=1] + %v80.0.i = phi i64 [ %tmp99.i, %andand100.i ], [ %i.1.i, %entry ] ; [#uses=2] + %len.2.i = phi i32 [ %tmp104.i, %andand100.i ], [ 16, %entry ] ; [#uses=3] + %tmp86.i = getelementptr i8* %p.2.i, i32 -1 ; [#uses=2] + %tmp88.i = zext i32 %tmp52.i to i64 ; [#uses=2] + %tmp90.i = urem i64 %v80.0.i, %tmp88.i ; [#uses=1] + %tmp91.i = trunc i64 %tmp90.i to i32 ; [#uses=1] + %tmp94.i = getelementptr i8* %tmp49178.i, i32 %tmp91.i ; [#uses=1] + %tmp95.i = load i8* %tmp94.i ; [#uses=1] + store i8 %tmp95.i, i8* %tmp86.i + %tmp99.i = udiv i64 %v80.0.i, %tmp88.i ; [#uses=2] + %tmp102.i = icmp eq i64 %tmp99.i, 0 ; [#uses=1] + br i1 %tmp102.i, label %condtrue.i, label %andand100.i + +andand100.i: ; preds = %dowhile82.i + %tmp104.i = add i32 %len.2.i, -1 ; [#uses=2] + %tmp105.i = icmp eq i32 %len.2.i, 1 ; [#uses=1] + br i1 %tmp105.i, label %condtrue.i, label %dowhile82.i + +condtrue.i: ; preds = %andand100.i, %dowhile82.i, %andand.i, %dowhile.i + %len.1.i = phi i32 [ %tmp78.i, %andand.i ], [ %len.0.i, %dowhile.i ], [ %tmp104.i, %andand100.i ], [ %len.2.i, %dowhile82.i ] ; [#uses=2] + %tmp111.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %tmp36, i32 1 ; <%"byte[]"*> [#uses=1] + %tmp112.i = load %"byte[]"* %tmp111.i ; <%"byte[]"> [#uses=2] + %condtmp.0175.i = extractvalue %"byte[]" %tmp112.i, 0 ; [#uses=3] + %tmp117.i = icmp ugt i32 %len.1.i, %condtmp.0175.i ; [#uses=1] + br i1 %tmp117.i, label %if118.i, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +if118.i: ; preds = %condtrue.i + %condtmp.0176.i = extractvalue %"byte[]" %tmp112.i, 1 ; [#uses=1] + %tmp123.i = add i32 %condtmp.0175.i, 1 ; [#uses=1] + %tmp124.i = sub i32 %len.1.i, %tmp123.i ; [#uses=2] + %tmp156.i = getelementptr [16 x i8]* %tmp, i32 0, i32 %tmp124.i ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp156.i, i8* %condtmp.0176.i, i32 %condtmp.0175.i, i32 1) + %tmp170.i = sub i32 16, %tmp124.i ; [#uses=1] + %tmp171.i = insertvalue %"byte[]" undef, i32 %tmp170.i, 0 ; <%"byte[]"> [#uses=1] + %tmp172.i = insertvalue %"byte[]" %tmp171.i, i8* %tmp156.i, 1 ; <%"byte[]"> [#uses=1] + br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + +_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit: ; preds = %if118.i, %condtrue.i + %tmp6.i35 = phi %"byte[]" [ %tmp172.i, %if118.i ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i ] ; <%"byte[]"> [#uses=1] + store %"byte[]" %tmp6.i35, %"byte[]"* %tmp6, align 8 + %tmp12 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str203, i32 0, i32 0) }, %"char[][]" %tmp12) + %tmp15 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp15, i32 0, i32 37 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) + %tmp17 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=3] + %tmp18 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp17, i8* %tmp18, i32 12, i32 4) + %tmp21 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp17, 1 ; <%"byte[]"> [#uses=1] + %tmp22 = call i32 @_adEq(%"byte[]" %tmp21, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str204, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp23 = icmp eq i32 %tmp22, 0 ; [#uses=1] + br i1 %tmp23, label %andand, label %endif + +andand: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + %tmp27 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp17, 1 ; <%"byte[]"> [#uses=1] + %tmp28 = call i32 @_adEq(%"byte[]" %tmp27, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str205, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] + %tmp29 = icmp eq i32 %tmp28, 0 ; [#uses=1] + br i1 %tmp29, label %if, label %endif + +if: ; preds = %andand + %tmp33 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp33, i32 0, i32 14 ; [#uses=1] + %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] + call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) + ret void + +endif: ; preds = %andand, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection3getMFAaAaDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %"byte[]" %local_file_arg, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) { +entry: + %style_arg57 = alloca i32, align 8 ; [#uses=2] + %style_arg = alloca i32, align 8 ; [#uses=2] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 7 ; [#uses=3] + %tmp2 = load i32* %tmp1 ; [#uses=1] + %tmp3 = icmp eq i32 %tmp2, 0 ; [#uses=1] + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango2io6device4File4File7__ClassZ) ; [#uses=11] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.io.device.File.File* ; <%tango.io.device.File.File*> [#uses=3] + %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.io.device.File.File.__vtbl** ; <%tango.io.device.File.File.__vtbl**> [#uses=4] + store %tango.io.device.File.File.__vtbl* @_D5tango2io6device4File4File6__vtblZ, %tango.io.device.File.File.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp4 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp4, i8* bitcast (%13** getelementptr (%tango.io.device.File.File* bitcast (%27* @_D5tango2io6device4File4File6__initZ to %tango.io.device.File.File*), i32 0, i32 2) to i8*), i32 32, i32 1) + br i1 %tmp3, label %if, label %else + +if: ; preds = %entry + %tmpcast = bitcast i32* %style_arg to %tango.io.device.File.File.Style* ; <%tango.io.device.File.File.Style*> [#uses=1] + %tmp65 = load i32* bitcast (%tango.io.device.File.File.Style* @_D5tango2io6device4File4File15ReadWriteCreateS5tango2io6device4File4File5Style to i32*), align 1 ; [#uses=1] + store i32 %tmp65, i32* %style_arg, align 8 + %tmp2.i = load %tango.io.device.File.File.__vtbl** %vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=1] + %"this.open at vtbl.i" = getelementptr %tango.io.device.File.File.__vtbl* %tmp2.i, i32 0, i32 18 ; [#uses=1] + %this.open.i = load void (%tango.io.device.File.File*, %"byte[]", %tango.io.device.File.File.Style*)** %"this.open at vtbl.i", align 4 ; [#uses=1] + tail call fastcc void %this.open.i(%tango.io.device.File.File* %.newclass_gc, %"byte[]" %local_file_arg, %tango.io.device.File.File.Style* byval %tmpcast) + br label %try + +else: ; preds = %entry + %tmpcast68 = bitcast i32* %style_arg57 to %tango.io.device.File.File.Style* ; <%tango.io.device.File.File.Style*> [#uses=1] + %tmp = load i32* bitcast (%tango.io.device.File.File.Style* @_D5tango2io6device4File4File17ReadWriteExistingS5tango2io6device4File4File5Style to i32*), align 1 ; [#uses=1] + store i32 %tmp, i32* %style_arg57, align 8 + %tmp2.i61 = load %tango.io.device.File.File.__vtbl** %vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=1] + %"this.open at vtbl.i62" = getelementptr %tango.io.device.File.File.__vtbl* %tmp2.i61, i32 0, i32 18 ; [#uses=1] + %this.open.i63 = load void (%tango.io.device.File.File*, %"byte[]", %tango.io.device.File.File.Style*)** %"this.open at vtbl.i62", align 4 ; [#uses=1] + tail call fastcc void %this.open.i63(%tango.io.device.File.File* %.newclass_gc, %"byte[]" %local_file_arg, %tango.io.device.File.File.Style* byval %tmpcast68) + %tmp22 = load %tango.io.device.File.File.__vtbl** %vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=1] + %"file.seek at vtbl" = getelementptr %tango.io.device.File.File.__vtbl* %tmp22, i32 0, i32 13 ; [#uses=1] + %file.seek = load i64 (%tango.io.device.File.File*, i64, i32)** %"file.seek at vtbl", align 4 ; [#uses=1] + %tmp26 = load i32* %tmp1 ; [#uses=1] + %tmp27 = zext i32 %tmp26 to i64 ; [#uses=1] + %tmp28 = tail call fastcc i64 %file.seek(%tango.io.device.File.File* %.newclass_gc, i64 %tmp27, i32 0) ; [#uses=0] + store i32 0, i32* %tmp1 + br label %try + +try: ; preds = %else, %if + %tmp38 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp39 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp38 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.get at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp39, i32 0, i32 60 ; [#uses=1] + %this.get = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)", i32)** %"this.get at vtbl", align 4 ; [#uses=1] + %tmp43 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %tmp44 = bitcast i8* %tmp43 to %tango.io.model.IConduit.OutputStream* ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] + invoke fastcc void %this.get(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %tango.io.model.IConduit.OutputStream* %tmp44, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) + to label %finally unwind label %landingpad + +finally: ; preds = %try + %tmp48 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device* ; <%tango.io.device.Device.Device*> [#uses=1] + %tmp49 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device.__vtbl** ; <%tango.io.device.Device.Device.__vtbl**> [#uses=1] + %tmp50 = load %tango.io.device.Device.Device.__vtbl** %tmp49 ; <%tango.io.device.Device.Device.__vtbl*> [#uses=1] + %"(cast(Device)file).detach at vtbl51" = getelementptr %tango.io.device.Device.Device.__vtbl* %tmp50, i32 0, i32 8 ; [#uses=1] + %"(cast(Device)file).detach53" = load void (%tango.io.device.Device.Device*)** %"(cast(Device)file).detach at vtbl51", align 4 ; [#uses=1] + tail call fastcc void %"(cast(Device)file).detach53"(%tango.io.device.Device.Device* %tmp48) + %.tmp55 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_delclass(%object.Object* %.tmp55) + ret void + +landingpad: ; preds = %try + %1 = tail call i8* @llvm.eh.exception() ; [#uses=2] + %2 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %1, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] + %tmp32 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device* ; <%tango.io.device.Device.Device*> [#uses=1] + %tmp33 = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Device.Device.__vtbl** ; <%tango.io.device.Device.Device.__vtbl**> [#uses=1] + %tmp34 = load %tango.io.device.Device.Device.__vtbl** %tmp33 ; <%tango.io.device.Device.Device.__vtbl*> [#uses=1] + %"(cast(Device)file).detach at vtbl" = getelementptr %tango.io.device.Device.Device.__vtbl* %tmp34, i32 0, i32 8 ; [#uses=1] + %"(cast(Device)file).detach" = load void (%tango.io.device.Device.Device*)** %"(cast(Device)file).detach at vtbl", align 4 ; [#uses=1] + tail call fastcc void %"(cast(Device)file).detach"(%tango.io.device.Device.Device* %tmp32) + %.tmp = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_delclass(%object.Object* %.tmp) + tail call void @_d_eh_resume_unwind(i8* %1) + unreachable +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection10enableUTF8MFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { +entry: + %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] + %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 12, i8* getelementptr ([13 x i8]* @.str206, i32 0, i32 0) }, %"char[][]" zeroinitializer) + %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 36 ; [#uses=1] + %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str207, i32 0, i32 0) }) + ret void +} + +define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection3getMFAaC5tango2io5model8IConduit12OutputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, %tango.io.model.IConduit.OutputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg, i32 %format_arg) { +entry: + %__arrayArg155 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=4] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.type at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 29 ; [#uses=1] + %this.type = load void (%tango.net.ftp.FtpClient.FTPConnection*, i32)** %"this.type at vtbl", align 4 ; [#uses=1] + call fastcc void %this.type(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) + %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=1] + %tmp9 = getelementptr [1 x %"byte[]"]* %__arrayArg155, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp9, align 8 + %tmp12 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] + %tmp13 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str208, i32 0, i32 0) }, %"char[][]" %tmp12) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] + %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.readStream at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 47 ; [#uses=1] + %this.readStream = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")** %"this.readStream at vtbl", align 4 ; [#uses=1] + call fastcc void %this.readStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp13, %tango.io.model.IConduit.OutputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg) + %tmp23 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp23, i32 0, i32 44 ; [#uses=1] + %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] + call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp13) + ret void +} + +define fastcc %tango.io.model.IConduit.InputStream* @_D5tango3net3ftp9FtpClient13FTPConnection5inputMFAaZC5tango2io5model8IConduit11InputStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %__arrayArg156 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=1] + %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg156, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp6, align 8 + %tmp9 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] + %tmp10 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str209, i32 0, i32 0) }, %"char[][]" %tmp9) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=3] + store %tango.net.SocketConduit.SocketConduit* %tmp10, %tango.net.SocketConduit.SocketConduit** %tmp1 + %tmp14 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp10, i32 0, i32 2 ; <%15**> [#uses=1] + %tmp15 = bitcast %15** %tmp14 to %tango.io.model.IConduit.InputStream* ; <%tango.io.model.IConduit.InputStream*> [#uses=1] + %.nullcheck = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp10, null ; [#uses=1] + %.interface = select i1 %.nullcheck, %tango.io.model.IConduit.InputStream* null, %tango.io.model.IConduit.InputStream* %tmp15 ; <%tango.io.model.IConduit.InputStream*> [#uses=1] + ret %tango.io.model.IConduit.InputStream* %.interface +} + +define fastcc %tango.io.model.IConduit.OutputStream* @_D5tango3net3ftp9FtpClient13FTPConnection6outputMFAaZC5tango2io5model8IConduit12OutputStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { +entry: + %__arrayArg157 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] + %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] + %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=1] + %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg157, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] + store %"byte[]" %path_arg, %"byte[]"* %tmp6, align 8 + %tmp9 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] + %tmp10 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str210, i32 0, i32 0) }, %"char[][]" %tmp9) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=3] + store %tango.net.SocketConduit.SocketConduit* %tmp10, %tango.net.SocketConduit.SocketConduit** %tmp1 + %tmp14 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp10, i32 0, i32 3 ; <%16**> [#uses=1] + %tmp15 = bitcast %16** %tmp14 to %tango.io.model.IConduit.OutputStream* ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] + %.nullcheck = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp10, null ; [#uses=1] + %.interface = select i1 %.nullcheck, %tango.io.model.IConduit.OutputStream* null, %tango.io.model.IConduit.OutputStream* %tmp15 ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] + ret %tango.io.model.IConduit.OutputStream* %.interface +} + +define fastcc %tango.net.ftp.FtpClient.FTPConnection* @_D5tango3net3ftp9FtpClient13FTPConnection5_ctorMFZC5tango3net3ftp9FtpClient13FTPConnection(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) nounwind readnone { +entry: + ret %tango.net.ftp.FtpClient.FTPConnection* %.this_arg +} + +define fastcc %tango.net.ftp.FtpClient.FTPConnection* @_D5tango3net3ftp9FtpClient13FTPConnection5_ctorMFAaAaAakZC5tango3net3ftp9FtpClient13FTPConnection(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %hostname_arg, %"byte[]" %username_arg, %"byte[]" %password_arg, i32 %port_arg) { +entry: + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.connect at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 16 ; [#uses=1] + %this.connect = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)** %"this.connect at vtbl", align 4 ; [#uses=1] + tail call fastcc void %this.connect(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %hostname_arg, %"byte[]" %username_arg, %"byte[]" %password_arg, i32 %port_arg) + ret %tango.net.ftp.FtpClient.FTPConnection* %.this_arg +} + +define fastcc %tango.net.ftp.FtpClient.FTPConnection* @_D5tango3net3ftp9FtpClient13FTPConnection5_ctorMFS5tango3net3ftp9FtpClient10FtpAddressZC5tango3net3ftp9FtpClient13FTPConnection(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpAddress* byval %fad_arg) { +entry: + %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] + %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] + %"this.connect at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 15 ; [#uses=1] + %this.connect = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpAddress*)** %"this.connect at vtbl", align 4 ; [#uses=1] + tail call fastcc void %this.connect(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpAddress* byval %fad_arg) + ret %tango.net.ftp.FtpClient.FTPConnection* %.this_arg +} + +define weak_odr fastcc i32 @_D5tango4text5Regex11__T4TNFATwZ4TNFA8tagCountMFZk(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg) nounwind readonly { +entry: + %tmp1 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 6 ; [#uses=1] + %tmp2 = load i32* %tmp1 ; [#uses=1] + %tmp3 = add i32 %tmp2, -1 ; [#uses=1] + ret i32 %tmp3 +} + +define weak_odr fastcc void @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i1 %unanchored_arg) { +entry: + %tmp.i872 = alloca i32, align 4 ; [#uses=2] + %tmp.i823 = alloca i32, align 4 ; [#uses=2] + %tmp.i798 = alloca i32, align 4 ; [#uses=2] + %tmp.i773 = alloca i32, align 4 ; [#uses=2] + %tmp.i = alloca i32, align 4 ; [#uses=2] + %.frame = alloca %nest.parse, align 8 ; <%nest.parse*> [#uses=43] + %occur = alloca %tango.net.Socket.timeval, align 8 ; <%tango.net.Socket.timeval*> [#uses=3] + %cc = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=3] + %cc323 = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=3] + %cc351 = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=3] + %cc381 = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=4] + %cc448 = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=4] + %trans = alloca [4 x %"tango.text.Regex.List!(TNFATransition).List"*], align 4 ; <[4 x %"tango.text.Regex.List!(TNFATransition).List"*]*> [#uses=4] + %layout = getelementptr %nest.parse* %.frame, i32 0, i32 0 ; <%"tango.text.convert.Layout.Layout!(char).Layout"**> [#uses=1] + %frags = getelementptr %nest.parse* %.frame, i32 0, i32 1 ; <%"tango.text.Regex.List!(TNFAFragment).List"**> [#uses=27] + %opStack = getelementptr %nest.parse* %.frame, i32 0, i32 2 ; <%"tango.text.Regex.Stack!(Operator).Stack"*> [#uses=1] + %tagStack = getelementptr %nest.parse* %.frame, i32 0, i32 3 ; <%"tango.text.Regex.Stack!(Operator).Stack"*> [#uses=1] + %occurStack = getelementptr %nest.parse* %.frame, i32 0, i32 4 ; <%"tango.text.Regex.Stack!(Pair!(uint)).Stack"*> [#uses=1] + %finish = getelementptr %nest.parse* %.frame, i32 0, i32 5 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %todo = getelementptr %nest.parse* %.frame, i32 0, i32 6 ; <%"tango.text.Regex.Stack!(TNFATransition).Stack"*> [#uses=1] + %nextPrio = getelementptr %nest.parse* %.frame, i32 0, i32 7 ; [#uses=1] + %this = getelementptr %nest.parse* %.frame, i32 0, i32 8 ; <%"tango.text.Regex.TNFA!(dchar).TNFA"**> [#uses=1] + store %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFA!(dchar).TNFA"** %this, align 8 + %tmp2 = call fastcc %"tango.text.convert.Layout.Layout!(char).Layout"* @_D5tango4text7convert6Layout13__T6LayoutTaZ6Layout8instanceFZC5tango4text7convert6Layout13__T6LayoutTaZ6Layout() ; <%"tango.text.convert.Layout.Layout!(char).Layout"*> [#uses=1] + store %"tango.text.convert.Layout.Layout!(char).Layout"* %tmp2, %"tango.text.convert.Layout.Layout!(char).Layout"** %layout, align 8 + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.List!(TNFAFragment).List"* ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ, %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp3 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp3, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFAFragment).List"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFAFragment).List"* %.newclass_gc, %"tango.text.Regex.List!(TNFAFragment).List"** %frags + %tmp7 = bitcast %"tango.text.Regex.Stack!(Operator).Stack"* %opStack to i8* ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp7, i8 0, i32 12, i32 8) + %tmp8 = bitcast %"tango.text.Regex.Stack!(Operator).Stack"* %tagStack to i8* ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp8, i8 0, i32 12, i32 4) + %tmp9 = bitcast %"tango.text.Regex.Stack!(Pair!(uint)).Stack"* %occurStack to i8* ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp9, i8 0, i32 12, i32 8) + %tmp1.i = getelementptr %nest.parse* %.frame, i32 0, i32 2, i32 0 ; [#uses=4] + %tmp4.i = getelementptr %nest.parse* %.frame, i32 0, i32 2, i32 1, i32 0 ; [#uses=2] + %.len.i = load i32* %tmp4.i ; [#uses=3] + %tmp5.i = load i32* %tmp1.i, align 8 ; [#uses=2] + %tmp6.i = icmp ult i32 %tmp5.i, %.len.i ; [#uses=1] + br i1 %tmp6.i, label %entry.endif_crit_edge.i, label %if.i + +entry.endif_crit_edge.i: ; preds = %entry + %tmp26.pre.i = getelementptr %nest.parse* %.frame, i32 0, i32 2, i32 1, i32 1 ; [#uses=1] + %.ptr27.i.pre = load i32** %tmp26.pre.i ; [#uses=1] + br label %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit + +if.i: ; preds = %entry + %tmp13.i = shl i32 %.len.i, 1 ; [#uses=1] + %tmp1437.i = or i32 %tmp13.i, 1 ; [#uses=2] + %tmp17.i = getelementptr %nest.parse* %.frame, i32 0, i32 2, i32 1, i32 1 ; [#uses=2] + %.ptr.i = load i32** %tmp17.i ; [#uses=1] + %tmp18.i = bitcast i32* %.ptr.i to i8* ; [#uses=1] + %.gc_mem.i = call i8* @_d_arraysetlengthT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D55TypeInfo_AE5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ to %object.TypeInfo*), i32 %tmp1437.i, i32 %.len.i, i8* %tmp18.i) ; [#uses=1] + %.gc_mem19.i = bitcast i8* %.gc_mem.i to i32* ; [#uses=2] + store i32 %tmp1437.i, i32* %tmp4.i + store i32* %.gc_mem19.i, i32** %tmp17.i + %tmp28.pre.i = load i32* %tmp1.i, align 8 ; [#uses=1] + br label %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit + +_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit: ; preds = %if.i, %entry.endif_crit_edge.i + %.ptr27.i = phi i32* [ %.ptr27.i.pre, %entry.endif_crit_edge.i ], [ %.gc_mem19.i, %if.i ] ; [#uses=1] + %tmp28.i = phi i32 [ %tmp5.i, %entry.endif_crit_edge.i ], [ %tmp28.pre.i, %if.i ] ; [#uses=1] + %tmp29.i = getelementptr i32* %.ptr27.i, i32 %tmp28.i ; [#uses=1] + store i32 0, i32* %tmp29.i + %tmp35.i = load i32* %tmp1.i, align 8 ; [#uses=1] + %tmp36.i = add i32 %tmp35.i, 1 ; [#uses=1] + store i32 %tmp36.i, i32* %tmp1.i, align 8 + br i1 %unanchored_arg, label %if, label %whilecond + +if: ; preds = %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit + %tmp11 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp12 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp11, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp13 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp12 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp13, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp16 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass8any_charS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 0) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp17 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp11, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp16) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp18 = bitcast %nest.parse* %.frame to i8* ; [#uses=3] + %tmp19 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp18, i32 12, i1 false) ; [#uses=0] + %tmp21 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp18, i32 1, i1 false) ; [#uses=0] + %tmp23 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp18, i32 3, i1 false) ; [#uses=0] + br label %whilecond + +whilecond: ; preds = %endif532, %default515, %endif436, %endif370, %case350, %case338, %case322, %case310, %case296, %case284, %case272, %case260, %case248, %endif181, %endif165, %endif148, %endif131, %else120, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896, %else99, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847, %else85, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822, %else71, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797, %case61, %else, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741, %case, %if, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit + %.rettmp.0.1.0 = phi i32 [ undef, %if ], [ %.rettmp.0.1.0, %endif532 ], [ %.rettmp.0.1.0, %default515 ], [ %.rettmp.0.1.0, %endif436 ], [ %.rettmp.0.1.0, %endif370 ], [ %.rettmp.0.1.0, %case350 ], [ %.rettmp.0.1.0, %case338 ], [ %.rettmp.0.1.0, %case322 ], [ %.rettmp.0.1.0, %case310 ], [ %tmp, %case296 ], [ %.rettmp.0.1.0, %case284 ], [ %.rettmp.0.1.0, %case272 ], [ %.rettmp.0.1.0, %case260 ], [ %.rettmp.0.1.0, %case248 ], [ %.rettmp.0.1.0, %endif148 ], [ %.rettmp.0.1.0, %endif131 ], [ %.rettmp.0.1.0, %endif181 ], [ %.rettmp.0.1.0, %endif165 ], [ %.rettmp.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 ], [ %.rettmp.0.1.0, %else120 ], [ %.rettmp.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 ], [ %.rettmp.0.1.0, %else99 ], [ %.rettmp.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 ], [ %.rettmp.0.1.0, %else85 ], [ %.rettmp.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 ], [ %.rett! mp.0.1.0, %else71 ], [ %.rettmp.0.1.0, %case61 ], [ %.rettmp.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 ], [ %.rettmp.0.1.0, %else ], [ %.rettmp.0.1.0, %case ], [ undef, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit ] ; [#uses=28] + %.rettmp324.0.1.0 = phi i32 [ undef, %if ], [ %.rettmp324.0.1.0, %endif532 ], [ %.rettmp324.0.1.0, %default515 ], [ %.rettmp324.0.1.0, %endif436 ], [ %.rettmp324.0.1.0, %endif370 ], [ %.rettmp324.0.1.0, %case350 ], [ %.rettmp324.0.1.0, %case338 ], [ %tmp1018, %case322 ], [ %.rettmp324.0.1.0, %case310 ], [ %.rettmp324.0.1.0, %case296 ], [ %.rettmp324.0.1.0, %case284 ], [ %.rettmp324.0.1.0, %case272 ], [ %.rettmp324.0.1.0, %case260 ], [ %.rettmp324.0.1.0, %case248 ], [ %.rettmp324.0.1.0, %endif148 ], [ %.rettmp324.0.1.0, %endif131 ], [ %.rettmp324.0.1.0, %endif181 ], [ %.rettmp324.0.1.0, %endif165 ], [ %.rettmp324.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 ], [ %.rettmp324.0.1.0, %else120 ], [ %.rettmp324.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 ], [ %.rettmp324.0.1.0, %else99 ], [ %.rettmp324.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 ], [ %.rettmp324.0.1.0, %else85 ], [ %.rettmp324.0.1.0,! %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 ], [ %.rettmp324.0.1.0, %else71 ], [ %.rettmp324.0.1.0, %case61 ], [ %.rettmp324.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 ], [ %.rettmp324.0.1.0, %else ], [ %.rettmp324.0.1.0, %case ], [ undef, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit ] ; [#uses=28] + %.rettmp352.0.1.0 = phi i32 [ undef, %if ], [ %.rettmp352.0.1.0, %endif532 ], [ %.rettmp352.0.1.0, %default515 ], [ %.rettmp352.0.1.0, %endif436 ], [ %.rettmp352.0.1.0, %endif370 ], [ %tmp1013, %case350 ], [ %.rettmp352.0.1.0, %case338 ], [ %.rettmp352.0.1.0, %case322 ], [ %.rettmp352.0.1.0, %case310 ], [ %.rettmp352.0.1.0, %case296 ], [ %.rettmp352.0.1.0, %case284 ], [ %.rettmp352.0.1.0, %case272 ], [ %.rettmp352.0.1.0, %case260 ], [ %.rettmp352.0.1.0, %case248 ], [ %.rettmp352.0.1.0, %endif148 ], [ %.rettmp352.0.1.0, %endif131 ], [ %.rettmp352.0.1.0, %endif181 ], [ %.rettmp352.0.1.0, %endif165 ], [ %.rettmp352.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 ], [ %.rettmp352.0.1.0, %else120 ], [ %.rettmp352.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 ], [ %.rettmp352.0.1.0, %else99 ], [ %.rettmp352.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 ], [ %.rettmp352.0.1.0, %else85 ], [ %.rettmp352.0.1.0,! %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 ], [ %.rettmp352.0.1.0, %else71 ], [ %.rettmp352.0.1.0, %case61 ], [ %.rettmp352.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 ], [ %.rettmp352.0.1.0, %else ], [ %.rettmp352.0.1.0, %case ], [ undef, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit ] ; [#uses=28] + %.rettmp382.0.1.0 = phi i32 [ undef, %if ], [ %.rettmp382.0.1.0, %endif532 ], [ %.rettmp382.0.1.0, %default515 ], [ %.rettmp382.0.1.0, %endif436 ], [ %tmp1008, %endif370 ], [ %.rettmp382.0.1.0, %case350 ], [ %.rettmp382.0.1.0, %case338 ], [ %.rettmp382.0.1.0, %case322 ], [ %.rettmp382.0.1.0, %case310 ], [ %.rettmp382.0.1.0, %case296 ], [ %.rettmp382.0.1.0, %case284 ], [ %.rettmp382.0.1.0, %case272 ], [ %.rettmp382.0.1.0, %case260 ], [ %.rettmp382.0.1.0, %case248 ], [ %.rettmp382.0.1.0, %endif148 ], [ %.rettmp382.0.1.0, %endif131 ], [ %.rettmp382.0.1.0, %endif181 ], [ %.rettmp382.0.1.0, %endif165 ], [ %.rettmp382.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 ], [ %.rettmp382.0.1.0, %else120 ], [ %.rettmp382.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 ], [ %.rettmp382.0.1.0, %else99 ], [ %.rettmp382.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 ], [ %.rettmp382.0.1.0, %else85 ], [ %.rettmp382.0.1.0,! %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 ], [ %.rettmp382.0.1.0, %else71 ], [ %.rettmp382.0.1.0, %case61 ], [ %.rettmp382.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 ], [ %.rettmp382.0.1.0, %else ], [ %.rettmp382.0.1.0, %case ], [ undef, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit ] ; [#uses=28] + %.rettmp449.0.1.0 = phi i32 [ undef, %if ], [ %.rettmp449.0.1.0, %endif532 ], [ %.rettmp449.0.1.0, %default515 ], [ %tmp1003, %endif436 ], [ %.rettmp449.0.1.0, %endif370 ], [ %.rettmp449.0.1.0, %case350 ], [ %.rettmp449.0.1.0, %case338 ], [ %.rettmp449.0.1.0, %case322 ], [ %.rettmp449.0.1.0, %case310 ], [ %.rettmp449.0.1.0, %case296 ], [ %.rettmp449.0.1.0, %case284 ], [ %.rettmp449.0.1.0, %case272 ], [ %.rettmp449.0.1.0, %case260 ], [ %.rettmp449.0.1.0, %case248 ], [ %.rettmp449.0.1.0, %endif148 ], [ %.rettmp449.0.1.0, %endif131 ], [ %.rettmp449.0.1.0, %endif181 ], [ %.rettmp449.0.1.0, %endif165 ], [ %.rettmp449.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 ], [ %.rettmp449.0.1.0, %else120 ], [ %.rettmp449.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 ], [ %.rettmp449.0.1.0, %else99 ], [ %.rettmp449.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 ], [ %.rettmp449.0.1.0, %else85 ], [ %.rettmp449.0.1.0,! %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 ], [ %.rettmp449.0.1.0, %else71 ], [ %.rettmp449.0.1.0, %case61 ], [ %.rettmp449.0.1.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 ], [ %.rettmp449.0.1.0, %else ], [ %.rettmp449.0.1.0, %case ], [ undef, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit ] ; [#uses=28] + %implicit_concat.0 = phi i1 [ true, %endif532 ], [ true, %default515 ], [ true, %endif436 ], [ true, %endif370 ], [ true, %case350 ], [ true, %case338 ], [ true, %case322 ], [ true, %case310 ], [ true, %case296 ], [ true, %case284 ], [ true, %case272 ], [ true, %case260 ], [ true, %case248 ], [ true, %endif131 ], [ true, %endif148 ], [ true, %endif181 ], [ true, %endif165 ], [ %implicit_concat.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 ], [ %implicit_concat.0, %else120 ], [ %implicit_concat.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 ], [ %implicit_concat.0, %else99 ], [ %implicit_concat.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 ], [ %implicit_concat.0, %else85 ], [ %implicit_concat.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 ], [ %implicit_concat.0, %else71 ], [ %implicit_concat.0, %case61 ], [ false, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 ], [ false, %e! lse ], [ false, %case ], [ false, %if ], [ false, %_D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack4pushMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZv.exit ] ; [#uses=17] + %tmp1.i692 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=23] + %tmp4.i693 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=14] + %.len.i694 = load i32* %tmp4.i693 ; [#uses=1] + %tmp5.i695 = load i32* %tmp1.i692 ; [#uses=2] + %tmp6.i696 = icmp ult i32 %tmp5.i695, %.len.i694 ; [#uses=1] + br i1 %tmp6.i696, label %whilebody, label %endwhile + +whilebody: ; preds = %whilecond + %tmp1.i697 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=9] + store i32 %tmp5.i695, i32* %tmp1.i697 + %tmp13.i700 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i = load %"Act[]"* %tmp13.i700 ; <%"Act[]"> [#uses=1] + %tmp17.i701 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i, i32* %tmp1.i692) ; [#uses=2] + switch i32 %tmp17.i701, label %default529 [ + i32 124, label %case + i32 40, label %case31 + i32 41, label %case61 + i32 63, label %case65 + i32 42, label %case79 + i32 43, label %case93 + i32 123, label %case107 + i32 91, label %case128 + i32 46, label %case145 + i32 36, label %case162 + i32 94, label %case178 + i32 62, label %case194 + i32 60, label %case214 + i32 92, label %case236 + ] + +case: ; preds = %whilebody + %tmp29 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp30 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp29, i32 2, i1 true) ; [#uses=0] + br label %whilecond + +case31: ; preds = %whilebody + br i1 %implicit_concat.0, label %if33, label %endif34 + +if33: ; preds = %case31 + %tmp35 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp36 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp35, i32 1, i1 false) ; [#uses=0] + br label %endif34 + +endif34: ; preds = %if33, %case31 + %tmp3.i718 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp3.i718, i32* %tmp.i + %.len.i720 = load i32* %tmp4.i693 ; [#uses=1] + %tmp8.i721 = icmp ult i32 %tmp3.i718, %.len.i720 ; [#uses=1] + br i1 %tmp8.i721, label %if.i724, label %else + +if.i724: ; preds = %endif34 + %tmp10.i722 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i723 = load %"Act[]"* %tmp10.i722 ; <%"Act[]"> [#uses=1] + %tmp12.i = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i723, i32* %tmp.i) ; [#uses=1] + %phitmp = icmp eq i32 %tmp12.i, 63 ; [#uses=1] + br i1 %phitmp, label %if40, label %else + +if40: ; preds = %if.i724 + %tmp4.i732 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i732, i32* %tmp1.i697 + %.len.i734 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i735 = icmp ult i32 %tmp4.i732, %.len.i734 ; [#uses=1] + br i1 %tmp11.i735, label %if.i739, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 + +if.i739: ; preds = %if40 + %tmp13.i736 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i737 = load %"Act[]"* %tmp13.i736 ; <%"Act[]"> [#uses=1] + %tmp17.i738 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i737, i32* %tmp1.i692) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit741: ; preds = %if.i739, %if40 + %tmp44 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp46 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 5 ; [#uses=1] + %tmp47 = load i1* %tmp46 ; [#uses=1] + %condtmp.0 = select i1 %tmp47, i32 3, i32 14 ; [#uses=1] + %tmp49 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp44, i32 %condtmp.0, i1 true) ; [#uses=0] + br label %whilecond + +else: ; preds = %if.i724, %endif34 + %tmp50 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp56 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 5 ; [#uses=1] + %tmp57 = load i1* %tmp56 ; [#uses=1] + %condtmp51.0 = select i1 %tmp57, i32 14, i32 3 ; [#uses=1] + %tmp59 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp50, i32 %condtmp51.0, i1 true) ; [#uses=0] + br label %whilecond + +case61: ; preds = %whilebody + %tmp62 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp63 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp62, i32 4, i1 true) ; [#uses=0] + br label %whilecond + +case65: ; preds = %whilebody + %tmp3.i775 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp3.i775, i32* %tmp.i773 + %.len.i777 = load i32* %tmp4.i693 ; [#uses=1] + %tmp8.i778 = icmp ult i32 %tmp3.i775, %.len.i777 ; [#uses=1] + br i1 %tmp8.i778, label %if.i782, label %else71 + +if.i782: ; preds = %case65 + %tmp10.i779 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i780 = load %"Act[]"* %tmp10.i779 ; <%"Act[]"> [#uses=1] + %tmp12.i781 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i780, i32* %tmp.i773) ; [#uses=1] + %phitmp1066 = icmp eq i32 %tmp12.i781, 63 ; [#uses=1] + br i1 %phitmp1066, label %if69, label %else71 + +if69: ; preds = %if.i782 + %tmp4.i788 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i788, i32* %tmp1.i697 + %.len.i790 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i791 = icmp ult i32 %tmp4.i788, %.len.i790 ; [#uses=1] + br i1 %tmp11.i791, label %if.i795, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 + +if.i795: ; preds = %if69 + %tmp13.i792 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i793 = load %"Act[]"* %tmp13.i792 ; <%"Act[]"> [#uses=1] + %tmp17.i794 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i793, i32* %tmp1.i692) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit797: ; preds = %if.i795, %if69 + %tmp74 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp75 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp74, i32 8, i1 true) ; [#uses=0] + br label %whilecond + +else71: ; preds = %if.i782, %case65 + %tmp76 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp77 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp76, i32 5, i1 true) ; [#uses=0] + br label %whilecond + +case79: ; preds = %whilebody + %tmp3.i800 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp3.i800, i32* %tmp.i798 + %.len.i802 = load i32* %tmp4.i693 ; [#uses=1] + %tmp8.i803 = icmp ult i32 %tmp3.i800, %.len.i802 ; [#uses=1] + br i1 %tmp8.i803, label %if.i807, label %else85 + +if.i807: ; preds = %case79 + %tmp10.i804 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i805 = load %"Act[]"* %tmp10.i804 ; <%"Act[]"> [#uses=1] + %tmp12.i806 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i805, i32* %tmp.i798) ; [#uses=1] + %phitmp1067 = icmp eq i32 %tmp12.i806, 63 ; [#uses=1] + br i1 %phitmp1067, label %if83, label %else85 + +if83: ; preds = %if.i807 + %tmp4.i813 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i813, i32* %tmp1.i697 + %.len.i815 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i816 = icmp ult i32 %tmp4.i813, %.len.i815 ; [#uses=1] + br i1 %tmp11.i816, label %if.i820, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 + +if.i820: ; preds = %if83 + %tmp13.i817 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i818 = load %"Act[]"* %tmp13.i817 ; <%"Act[]"> [#uses=1] + %tmp17.i819 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i818, i32* %tmp1.i692) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit822: ; preds = %if.i820, %if83 + %tmp88 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp89 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp88, i32 9, i1 true) ; [#uses=0] + br label %whilecond + +else85: ; preds = %if.i807, %case79 + %tmp90 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp91 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp90, i32 6, i1 true) ; [#uses=0] + br label %whilecond + +case93: ; preds = %whilebody + %tmp3.i825 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp3.i825, i32* %tmp.i823 + %.len.i827 = load i32* %tmp4.i693 ; [#uses=1] + %tmp8.i828 = icmp ult i32 %tmp3.i825, %.len.i827 ; [#uses=1] + br i1 %tmp8.i828, label %if.i832, label %else99 + +if.i832: ; preds = %case93 + %tmp10.i829 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i830 = load %"Act[]"* %tmp10.i829 ; <%"Act[]"> [#uses=1] + %tmp12.i831 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i830, i32* %tmp.i823) ; [#uses=1] + %phitmp1068 = icmp eq i32 %tmp12.i831, 63 ; [#uses=1] + br i1 %phitmp1068, label %if97, label %else99 + +if97: ; preds = %if.i832 + %tmp4.i838 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i838, i32* %tmp1.i697 + %.len.i840 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i841 = icmp ult i32 %tmp4.i838, %.len.i840 ; [#uses=1] + br i1 %tmp11.i841, label %if.i845, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 + +if.i845: ; preds = %if97 + %tmp13.i842 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i843 = load %"Act[]"* %tmp13.i842 ; <%"Act[]"> [#uses=1] + %tmp17.i844 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i843, i32* %tmp1.i692) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit847: ; preds = %if.i845, %if97 + %tmp102 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp103 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp102, i32 10, i1 true) ; [#uses=0] + br label %whilecond + +else99: ; preds = %if.i832, %case93 + %tmp104 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp105 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp104, i32 7, i1 true) ; [#uses=0] + br label %whilecond + +case107: ; preds = %whilebody + %occur672 = bitcast %tango.net.Socket.timeval* %occur to i64* ; [#uses=1] + store i64 0, i64* %occur672, align 8 + %tmp110 = getelementptr %tango.net.Socket.timeval* %occur, i32 0, i32 0 ; [#uses=3] + %tmp113 = getelementptr i32* %tmp110, i32 1 ; [#uses=1] + call fastcc void @_D5tango4text5Regex11__T4TNFATwZ4TNFA15parseOccurCountMFJkJkZv(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32* %tmp110, i32* %tmp113) + %tmp1025 = load i32* %tmp110, align 8 ; [#uses=1] + %occur.1 = getelementptr %tango.net.Socket.timeval* %occur, i32 0, i32 1 ; [#uses=1] + %tmp1026 = load i32* %occur.1, align 4 ; [#uses=1] + %tmp1.i850 = getelementptr %nest.parse* %.frame, i32 0, i32 4, i32 0 ; [#uses=4] + %tmp4.i851 = getelementptr %nest.parse* %.frame, i32 0, i32 4, i32 1, i32 0 ; [#uses=2] + %.len.i852 = load i32* %tmp4.i851 ; [#uses=3] + %tmp5.i853 = load i32* %tmp1.i850, align 8 ; [#uses=2] + %tmp6.i854 = icmp ult i32 %tmp5.i853, %.len.i852 ; [#uses=1] + br i1 %tmp6.i854, label %entry.endif_crit_edge.i856, label %if.i864 + +entry.endif_crit_edge.i856: ; preds = %case107 + %tmp26.pre.i855 = getelementptr %nest.parse* %.frame, i32 0, i32 4, i32 1, i32 1 ; <%tango.net.Socket.timeval**> [#uses=1] + %.ptr27.i867.pre = load %tango.net.Socket.timeval** %tmp26.pre.i855 ; <%tango.net.Socket.timeval*> [#uses=1] + br label %_D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack4pushMFS5tango4text5Regex11__T4PairTkZ4PairZv.exit + +if.i864: ; preds = %case107 + %tmp13.i857 = shl i32 %.len.i852, 1 ; [#uses=1] + %tmp1438.i = or i32 %tmp13.i857, 1 ; [#uses=2] + %tmp17.i858 = getelementptr %nest.parse* %.frame, i32 0, i32 4, i32 1, i32 1 ; <%tango.net.Socket.timeval**> [#uses=2] + %.ptr.i859 = load %tango.net.Socket.timeval** %tmp17.i858 ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp18.i860 = bitcast %tango.net.Socket.timeval* %.ptr.i859 to i8* ; [#uses=1] + %.gc_mem.i861 = call i8* @_d_arraysetlengthT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D46TypeInfo_AS5tango4text5Regex11__T4PairTkZ4Pair6__initZ to %object.TypeInfo*), i32 %tmp1438.i, i32 %.len.i852, i8* %tmp18.i860) ; [#uses=1] + %.gc_mem19.i862 = bitcast i8* %.gc_mem.i861 to %tango.net.Socket.timeval* ; <%tango.net.Socket.timeval*> [#uses=2] + store i32 %tmp1438.i, i32* %tmp4.i851 + store %tango.net.Socket.timeval* %.gc_mem19.i862, %tango.net.Socket.timeval** %tmp17.i858 + %tmp28.pre.i863 = load i32* %tmp1.i850, align 8 ; [#uses=1] + br label %_D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack4pushMFS5tango4text5Regex11__T4PairTkZ4PairZv.exit + +_D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack4pushMFS5tango4text5Regex11__T4PairTkZ4PairZv.exit: ; preds = %if.i864, %entry.endif_crit_edge.i856 + %.ptr27.i867 = phi %tango.net.Socket.timeval* [ %.ptr27.i867.pre, %entry.endif_crit_edge.i856 ], [ %.gc_mem19.i862, %if.i864 ] ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp28.i866 = phi i32 [ %tmp5.i853, %entry.endif_crit_edge.i856 ], [ %tmp28.pre.i863, %if.i864 ] ; [#uses=1] + %tmp29.i868 = getelementptr %tango.net.Socket.timeval* %.ptr27.i867, i32 %tmp28.i866 ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp3040.i = bitcast %tango.net.Socket.timeval* %tmp29.i868 to i64* ; [#uses=1] + %1 = zext i32 %tmp1025 to i64 ; [#uses=1] + %2 = shl i64 %1, 32 ; [#uses=1] + %3 = zext i32 %tmp1026 to i64 ; [#uses=1] + %4 = or i64 %3, %2 ; [#uses=1] + store i64 %4, i64* %tmp3040.i, align 1 + %tmp36.i870 = load i32* %tmp1.i850, align 8 ; [#uses=1] + %tmp37.i = add i32 %tmp36.i870, 1 ; [#uses=1] + store i32 %tmp37.i, i32* %tmp1.i850, align 8 + %tmp3.i874 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp3.i874, i32* %tmp.i872 + %.len.i876 = load i32* %tmp4.i693 ; [#uses=1] + %tmp8.i877 = icmp ult i32 %tmp3.i874, %.len.i876 ; [#uses=1] + br i1 %tmp8.i877, label %if.i881, label %else120 + +if.i881: ; preds = %_D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack4pushMFS5tango4text5Regex11__T4PairTkZ4PairZv.exit + %tmp10.i878 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i879 = load %"Act[]"* %tmp10.i878 ; <%"Act[]"> [#uses=1] + %tmp12.i880 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i879, i32* %tmp.i872) ; [#uses=1] + %phitmp1069 = icmp eq i32 %tmp12.i880, 63 ; [#uses=1] + br i1 %phitmp1069, label %if118, label %else120 + +if118: ; preds = %if.i881 + %tmp4.i887 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i887, i32* %tmp1.i697 + %.len.i889 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i890 = icmp ult i32 %tmp4.i887, %.len.i889 ; [#uses=1] + br i1 %tmp11.i890, label %if.i894, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 + +if.i894: ; preds = %if118 + %tmp13.i891 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i892 = load %"Act[]"* %tmp13.i891 ; <%"Act[]"> [#uses=1] + %tmp17.i893 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i892, i32* %tmp1.i692) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit896: ; preds = %if.i894, %if118 + %tmp123 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp124 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp123, i32 16, i1 true) ; [#uses=0] + br label %whilecond + +else120: ; preds = %if.i881, %_D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack4pushMFS5tango4text5Regex11__T4PairTkZ4PairZv.exit + %tmp125 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp126 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp125, i32 15, i1 true) ; [#uses=0] + br label %whilecond + +case128: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908, %whilebody + %pred_type.0 = phi i32 [ 3, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 ], [ 2, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 ], [ 0, %whilebody ] ; [#uses=1] + br i1 %implicit_concat.0, label %if130, label %endif131 + +if130: ; preds = %case128 + %tmp132 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp133 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp132, i32 1, i1 false) ; [#uses=0] + br label %endif131 + +endif131: ; preds = %if130, %case128 + %tmp134 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp135 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp134, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp136 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp135 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl137" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp136, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign139 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl137", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp142 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA18constructCharClassMFE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 %pred_type.0) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp143 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign139(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp134, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp142) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case145: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908, %whilebody + %pred_type.1 = phi i32 [ 0, %whilebody ], [ 2, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 ], [ 3, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 ] ; [#uses=1] + br i1 %implicit_concat.0, label %if147, label %endif148 + +if147: ; preds = %case145 + %tmp149 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp150 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp149, i32 1, i1 false) ; [#uses=0] + br label %endif148 + +endif148: ; preds = %if147, %case145 + %tmp151 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp152 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp151, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp153 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp152 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl154" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp153, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign156 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl154", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp159 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass8dot_operS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 %pred_type.1) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp160 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign156(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp151, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp159) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case162: ; preds = %whilebody + br i1 %implicit_concat.0, label %if164, label %endif165 + +if164: ; preds = %case162 + %tmp166 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp167 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp166, i32 1, i1 false) ; [#uses=0] + br label %endif165 + +endif165: ; preds = %if164, %case162 + %tmp168 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp169 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp168, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp170 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp169 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl171" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp170, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign173 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl171", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp175 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass13line_startendS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp176 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign173(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp168, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp175) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case178: ; preds = %whilebody + br i1 %implicit_concat.0, label %if180, label %endif181 + +if180: ; preds = %case178 + %tmp182 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp183 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp182, i32 1, i1 false) ; [#uses=0] + br label %endif181 + +endif181: ; preds = %if180, %case178 + %tmp184 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp185 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp184, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp186 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp185 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl187" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp186, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign189 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl187", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp191 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass13line_startendS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 3) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp192 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign189(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp184, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp191) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case194: ; preds = %whilebody + %tmp4.i899 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i899, i32* %tmp1.i697 + %.len.i901 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i902 = icmp ult i32 %tmp4.i899, %.len.i901 ; [#uses=1] + br i1 %tmp11.i902, label %if.i906, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 + +if.i906: ; preds = %case194 + %tmp13.i903 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i904 = load %"Act[]"* %tmp13.i903 ; <%"Act[]"> [#uses=1] + %tmp17.i905 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i904, i32* %tmp1.i692) ; [#uses=1] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908: ; preds = %if.i906, %case194 + %tmp196909 = phi i32 [ %tmp17.i905, %if.i906 ], [ 0, %case194 ] ; [#uses=2] + switch i32 %tmp196909, label %default529 [ + i32 91, label %case128 + i32 92, label %case236 + i32 46, label %case145 + ] + +case214: ; preds = %whilebody + %tmp4.i912 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i912, i32* %tmp1.i697 + %.len.i914 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i915 = icmp ult i32 %tmp4.i912, %.len.i914 ; [#uses=1] + br i1 %tmp11.i915, label %if.i919, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 + +if.i919: ; preds = %case214 + %tmp13.i916 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i917 = load %"Act[]"* %tmp13.i916 ; <%"Act[]"> [#uses=1] + %tmp17.i918 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i917, i32* %tmp1.i692) ; [#uses=1] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921: ; preds = %if.i919, %case214 + %tmp216922 = phi i32 [ %tmp17.i918, %if.i919 ], [ 0, %case214 ] ; [#uses=2] + switch i32 %tmp216922, label %default529 [ + i32 91, label %case128 + i32 92, label %case236 + i32 46, label %case145 + ] + +case236: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908, %whilebody + %pred_type.2 = phi i32 [ 0, %whilebody ], [ 2, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 ], [ 3, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 ] ; [#uses=12] + %tmp4.i925 = load i32* %tmp1.i692 ; [#uses=2] + store i32 %tmp4.i925, i32* %tmp1.i697 + %.len.i927 = load i32* %tmp4.i693 ; [#uses=1] + %tmp11.i928 = icmp ult i32 %tmp4.i925, %.len.i927 ; [#uses=1] + br i1 %tmp11.i928, label %if.i932, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit934 + +if.i932: ; preds = %case236 + %tmp13.i929 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i930 = load %"Act[]"* %tmp13.i929 ; <%"Act[]"> [#uses=1] + %tmp17.i931 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i930, i32* %tmp1.i692) ; [#uses=1] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit934 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit934: ; preds = %if.i932, %case236 + %tmp238935 = phi i32 [ %tmp17.i931, %if.i932 ], [ 0, %case236 ] ; [#uses=2] + br i1 %implicit_concat.0, label %if240, label %endif241 + +if240: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit934 + %tmp242 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp243 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp242, i32 1, i1 false) ; [#uses=0] + br label %endif241 + +endif241: ; preds = %if240, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit934 + switch i32 %tmp238935, label %default515 [ + i32 116, label %case248 + i32 110, label %case260 + i32 114, label %case272 + i32 119, label %case284 + i32 87, label %case296 + i32 115, label %case310 + i32 83, label %case322 + i32 100, label %case338 + i32 68, label %case350 + i32 98, label %case366 + i32 66, label %case432 + ] + +case248: ; preds = %endif241 + %tmp249 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp250 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp249, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp251 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp250 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl252" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp251, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign254 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl252", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp257 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA19constructSingleCharMFwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 9, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp258 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign254(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp249, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp257) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case260: ; preds = %endif241 + %tmp261 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp262 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp261, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp263 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp262 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl264" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp263, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign266 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl264", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp269 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA19constructSingleCharMFwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 10, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp270 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign266(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp261, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp269) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case272: ; preds = %endif241 + %tmp273 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp274 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp273, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp275 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp274 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl276" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp275, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign278 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl276", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp281 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA19constructSingleCharMFwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 13, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp282 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign278(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp273, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp281) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case284: ; preds = %endif241 + %tmp285 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp286 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp285, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp287 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp286 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl288" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp287, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign290 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl288", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp293 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass9alphanum_S5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp294 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign290(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp285, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp293) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case296: ; preds = %endif241 + %srcval = load i64* bitcast (%"tango.text.Regex.CharClass!(dchar).CharClass"* @_D5tango4text5Regex16__T9CharClassTwZ9CharClass9alphanum_S5tango4text5Regex16__T9CharClassTwZ9CharClass to i64*), align 4 ; [#uses=2] + %tmp1028 = lshr i64 %srcval, 32 ; [#uses=1] + %tmp1029 = trunc i64 %tmp1028 to i32 ; [#uses=1] + %tmp1030 = insertvalue %"byte[]" undef, i32 %tmp1029, 0 ; <%"byte[]"> [#uses=1] + %tmp1031 = trunc i64 %srcval to i32 ; [#uses=1] + %tmp1032 = inttoptr i32 %tmp1031 to i8* ; [#uses=1] + %tmp1033 = insertvalue %"byte[]" %tmp1030, i8* %tmp1032, 1 ; <%"byte[]"> [#uses=1] + %tmp5.i940 = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), %"byte[]" %tmp1033) ; <%"byte[]"> [#uses=2] + %tmp6.i941 = extractvalue %"byte[]" %tmp5.i940, 0 ; [#uses=1] + %tmp8.i942 = extractvalue %"byte[]" %tmp5.i940, 1 ; [#uses=1] + %tmp = ptrtoint i8* %tmp8.i942 to i32 ; [#uses=2] + %tmp297674 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc to i64* ; [#uses=1] + %5 = zext i32 %tmp6.i941 to i64 ; [#uses=1] + %6 = shl i64 %5, 32 ; [#uses=1] + %7 = zext i32 %tmp to i64 ; [#uses=1] + %8 = or i64 %7, %6 ; [#uses=1] + store i64 %8, i64* %tmp297674, align 8 + call fastcc void @_D5tango4text5Regex16__T9CharClassTwZ9CharClass6negateMFZv(%"tango.text.Regex.CharClass!(dchar).CharClass"* %cc) + %tmp299 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp300 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp299, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp301 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp300 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl302" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp301, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign304 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl302", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp307 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp308 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign304(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp299, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp307) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case310: ; preds = %endif241 + %tmp311 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp312 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp311, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp313 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp312 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl314" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp313, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign316 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl314", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp319 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp320 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign316(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp311, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp319) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case322: ; preds = %endif241 + %srcval1041 = load i64* bitcast (%"tango.text.Regex.CharClass!(dchar).CharClass"* @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass to i64*), align 4 ; [#uses=2] + %tmp1035 = lshr i64 %srcval1041, 32 ; [#uses=1] + %tmp1036 = trunc i64 %tmp1035 to i32 ; [#uses=1] + %tmp1037 = insertvalue %"byte[]" undef, i32 %tmp1036, 0 ; <%"byte[]"> [#uses=1] + %tmp1038 = trunc i64 %srcval1041 to i32 ; [#uses=1] + %tmp1039 = inttoptr i32 %tmp1038 to i8* ; [#uses=1] + %tmp1040 = insertvalue %"byte[]" %tmp1037, i8* %tmp1039, 1 ; <%"byte[]"> [#uses=1] + %tmp5.i949 = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), %"byte[]" %tmp1040) ; <%"byte[]"> [#uses=2] + %tmp6.i950 = extractvalue %"byte[]" %tmp5.i949, 0 ; [#uses=1] + %tmp8.i951 = extractvalue %"byte[]" %tmp5.i949, 1 ; [#uses=1] + %tmp1018 = ptrtoint i8* %tmp8.i951 to i32 ; [#uses=2] + %tmp325676 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc323 to i64* ; [#uses=1] + %9 = zext i32 %tmp6.i950 to i64 ; [#uses=1] + %10 = shl i64 %9, 32 ; [#uses=1] + %11 = zext i32 %tmp1018 to i64 ; [#uses=1] + %12 = or i64 %11, %10 ; [#uses=1] + store i64 %12, i64* %tmp325676, align 8 + call fastcc void @_D5tango4text5Regex16__T9CharClassTwZ9CharClass6negateMFZv(%"tango.text.Regex.CharClass!(dchar).CharClass"* %cc323) + %tmp327 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp328 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp327, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp329 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp328 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl330" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp329, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign332 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl330", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp335 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc323, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp336 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign332(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp327, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp335) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case338: ; preds = %endif241 + %tmp339 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp340 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp339, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp341 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp340 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl342" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp341, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign344 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl342", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp347 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass5digitS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp348 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign344(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp339, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp347) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case350: ; preds = %endif241 + %srcval1049 = load i64* bitcast (%"tango.text.Regex.CharClass!(dchar).CharClass"* @_D5tango4text5Regex16__T9CharClassTwZ9CharClass5digitS5tango4text5Regex16__T9CharClassTwZ9CharClass to i64*), align 4 ; [#uses=2] + %tmp1043 = lshr i64 %srcval1049, 32 ; [#uses=1] + %tmp1044 = trunc i64 %tmp1043 to i32 ; [#uses=1] + %tmp1045 = insertvalue %"byte[]" undef, i32 %tmp1044, 0 ; <%"byte[]"> [#uses=1] + %tmp1046 = trunc i64 %srcval1049 to i32 ; [#uses=1] + %tmp1047 = inttoptr i32 %tmp1046 to i8* ; [#uses=1] + %tmp1048 = insertvalue %"byte[]" %tmp1045, i8* %tmp1047, 1 ; <%"byte[]"> [#uses=1] + %tmp5.i959 = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), %"byte[]" %tmp1048) ; <%"byte[]"> [#uses=2] + %tmp6.i960 = extractvalue %"byte[]" %tmp5.i959, 0 ; [#uses=1] + %tmp8.i961 = extractvalue %"byte[]" %tmp5.i959, 1 ; [#uses=1] + %tmp1013 = ptrtoint i8* %tmp8.i961 to i32 ; [#uses=2] + %tmp353679 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc351 to i64* ; [#uses=1] + %13 = zext i32 %tmp6.i960 to i64 ; [#uses=1] + %14 = shl i64 %13, 32 ; [#uses=1] + %15 = zext i32 %tmp1013 to i64 ; [#uses=1] + %16 = or i64 %15, %14 ; [#uses=1] + store i64 %16, i64* %tmp353679, align 8 + call fastcc void @_D5tango4text5Regex16__T9CharClassTwZ9CharClass6negateMFZv(%"tango.text.Regex.CharClass!(dchar).CharClass"* %cc351) + %tmp355 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp356 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp355, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp357 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp356 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl358" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp357, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign360 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl358", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp363 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc351, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp364 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign360(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp355, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp363) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +case366: ; preds = %endif241 + %tmp368 = icmp eq i32 %pred_type.2, 0 ; [#uses=1] + br i1 %tmp368, label %endif370, label %if369 + +if369: ; preds = %case366 + %.newclass_gc_alloc371 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc372 = bitcast i8* %.newclass_gc_alloc371 to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl373 = bitcast i8* %.newclass_gc_alloc371 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl373 + %monitor374 = getelementptr i8* %.newclass_gc_alloc371, i32 4 ; [#uses=1] + %17 = bitcast i8* %monitor374 to i8** ; [#uses=1] + store i8* null, i8** %17 + %tmp375 = getelementptr i8* %.newclass_gc_alloc371, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp375, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %.gc_mem.i965 = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 63) ; [#uses=3] + %.gc_mem12.i = bitcast i8* %.gc_mem.i965 to i64* ; [#uses=1] + %tmp.i966 = load i64* bitcast ([9 x i8]* @.str280 to i64*), align 8 ; [#uses=1] + store i64 %tmp.i966, i64* %.gc_mem12.i, align 1 + %tmp4.i967 = getelementptr i8* %.gc_mem.i965, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp4.i967, i8* getelementptr ([56 x i8]* @.str217, i32 0, i32 0), i32 55, i32 1) + %tmp6.i968 = insertvalue %"byte[]" undef, i32 63, 0 ; <%"byte[]"> [#uses=1] + %tmp7.i969 = insertvalue %"byte[]" %tmp6.i968, i8* %.gc_mem.i965, 1 ; <%"byte[]"> [#uses=1] + %tmp8.i970 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc372, %"byte[]" %tmp7.i969, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp380 = bitcast i8* %.newclass_gc_alloc371 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp380) + unreachable + +endif370: ; preds = %case366 + %srcval1057 = load i64* bitcast (%"tango.text.Regex.CharClass!(dchar).CharClass"* @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass to i64*), align 4 ; [#uses=2] + %tmp1051 = lshr i64 %srcval1057, 32 ; [#uses=1] + %tmp1052 = trunc i64 %tmp1051 to i32 ; [#uses=1] + %tmp1053 = insertvalue %"byte[]" undef, i32 %tmp1052, 0 ; <%"byte[]"> [#uses=1] + %tmp1054 = trunc i64 %srcval1057 to i32 ; [#uses=1] + %tmp1055 = inttoptr i32 %tmp1054 to i8* ; [#uses=1] + %tmp1056 = insertvalue %"byte[]" %tmp1053, i8* %tmp1055, 1 ; <%"byte[]"> [#uses=1] + %tmp5.i976 = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), %"byte[]" %tmp1056) ; <%"byte[]"> [#uses=2] + %tmp6.i977 = extractvalue %"byte[]" %tmp5.i976, 0 ; [#uses=1] + %tmp8.i978 = extractvalue %"byte[]" %tmp5.i976, 1 ; [#uses=1] + %tmp1008 = ptrtoint i8* %tmp8.i978 to i32 ; [#uses=2] + %tmp383682 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc381 to i64* ; [#uses=1] + %18 = zext i32 %tmp6.i977 to i64 ; [#uses=1] + %19 = shl i64 %18, 32 ; [#uses=1] + %20 = zext i32 %tmp1008 to i64 ; [#uses=1] + %21 = or i64 %20, %19 ; [#uses=1] + store i64 %21, i64* %tmp383682, align 8 + call fastcc void @_D5tango4text5Regex16__T9CharClassTwZ9CharClass6negateMFZv(%"tango.text.Regex.CharClass!(dchar).CharClass"* %cc381) + %tmp385 = bitcast %nest.parse* %.frame to i8* ; [#uses=5] + %tmp386 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp385, i32 14, i1 true) ; [#uses=0] + %tmp387 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp388 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp387, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp389 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp388 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl390" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp389, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign392 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl390", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp394 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc381, i32 3) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp395 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign392(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp387, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp394) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp397 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp385, i32 1, i1 false) ; [#uses=0] + %tmp398 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp399 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp398, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp400 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp399 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl401" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp400, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign403 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl401", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp405 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp406 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign403(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp398, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp405) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp408 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp385, i32 2, i1 false) ; [#uses=0] + %tmp409 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp410 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp409, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp411 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp410 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl412" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp411, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign414 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl412", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp416 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 3) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp417 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign414(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp409, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp416) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp419 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp385, i32 1, i1 false) ; [#uses=0] + %tmp420 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp421 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp420, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp422 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp421 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl423" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp422, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign425 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl423", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp427 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc381, i32 2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp428 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign425(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp420, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp427) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp430 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp385, i32 4, i1 false) ; [#uses=0] + br label %whilecond + +case432: ; preds = %endif241 + %tmp434 = icmp eq i32 %pred_type.2, 0 ; [#uses=1] + br i1 %tmp434, label %endif436, label %if435 + +if435: ; preds = %case432 + %.newclass_gc_alloc437 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc438 = bitcast i8* %.newclass_gc_alloc437 to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl439 = bitcast i8* %.newclass_gc_alloc437 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl439 + %monitor440 = getelementptr i8* %.newclass_gc_alloc437, i32 4 ; [#uses=1] + %22 = bitcast i8* %monitor440 to i8** ; [#uses=1] + store i8* null, i8** %22 + %tmp441 = getelementptr i8* %.newclass_gc_alloc437, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp441, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %.gc_mem.i984 = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 63) ; [#uses=3] + %.gc_mem12.i985 = bitcast i8* %.gc_mem.i984 to i64* ; [#uses=1] + %tmp.i986 = load i64* bitcast ([9 x i8]* @.str280 to i64*), align 8 ; [#uses=1] + store i64 %tmp.i986, i64* %.gc_mem12.i985, align 1 + %tmp4.i987 = getelementptr i8* %.gc_mem.i984, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp4.i987, i8* getelementptr ([56 x i8]* @.str218, i32 0, i32 0), i32 55, i32 1) + %tmp6.i988 = insertvalue %"byte[]" undef, i32 63, 0 ; <%"byte[]"> [#uses=1] + %tmp7.i989 = insertvalue %"byte[]" %tmp6.i988, i8* %.gc_mem.i984, 1 ; <%"byte[]"> [#uses=1] + %tmp8.i990 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc438, %"byte[]" %tmp7.i989, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp446 = bitcast i8* %.newclass_gc_alloc437 to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp446) + unreachable + +endif436: ; preds = %case432 + %srcval1065 = load i64* bitcast (%"tango.text.Regex.CharClass!(dchar).CharClass"* @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass to i64*), align 4 ; [#uses=2] + %tmp1059 = lshr i64 %srcval1065, 32 ; [#uses=1] + %tmp1060 = trunc i64 %tmp1059 to i32 ; [#uses=1] + %tmp1061 = insertvalue %"byte[]" undef, i32 %tmp1060, 0 ; <%"byte[]"> [#uses=1] + %tmp1062 = trunc i64 %srcval1065 to i32 ; [#uses=1] + %tmp1063 = inttoptr i32 %tmp1062 to i8* ; [#uses=1] + %tmp1064 = insertvalue %"byte[]" %tmp1061, i8* %tmp1063, 1 ; <%"byte[]"> [#uses=1] + %tmp5.i996 = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), %"byte[]" %tmp1064) ; <%"byte[]"> [#uses=2] + %tmp6.i997 = extractvalue %"byte[]" %tmp5.i996, 0 ; [#uses=1] + %tmp8.i998 = extractvalue %"byte[]" %tmp5.i996, 1 ; [#uses=1] + %tmp1003 = ptrtoint i8* %tmp8.i998 to i32 ; [#uses=2] + %tmp450685 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc448 to i64* ; [#uses=1] + %23 = zext i32 %tmp6.i997 to i64 ; [#uses=1] + %24 = shl i64 %23, 32 ; [#uses=1] + %25 = zext i32 %tmp1003 to i64 ; [#uses=1] + %26 = or i64 %25, %24 ; [#uses=1] + store i64 %26, i64* %tmp450685, align 8 + call fastcc void @_D5tango4text5Regex16__T9CharClassTwZ9CharClass6negateMFZv(%"tango.text.Regex.CharClass!(dchar).CharClass"* %cc448) + %tmp452 = bitcast %nest.parse* %.frame to i8* ; [#uses=5] + %tmp453 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp452, i32 14, i1 true) ; [#uses=0] + %tmp454 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp455 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp454, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp456 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp455 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl457" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp456, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign459 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl457", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp461 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc448, i32 3) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp462 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign459(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp454, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp461) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp464 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp452, i32 1, i1 false) ; [#uses=0] + %tmp465 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp466 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp465, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp467 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp466 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl468" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp467, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign470 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl468", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp472 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc448, i32 2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp473 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign470(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp465, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp472) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp475 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp452, i32 2, i1 false) ; [#uses=0] + %tmp476 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp477 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp476, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp478 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp477 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl479" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp478, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign481 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl479", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp483 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 3) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp484 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign481(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp476, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp483) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp486 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp452, i32 1, i1 false) ; [#uses=0] + %tmp487 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp488 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp487, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp489 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp488 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl490" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp489, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign492 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl490", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp494 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp495 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign492(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp487, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp494) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp497 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp452, i32 4, i1 false) ; [#uses=0] + br label %whilecond + +default515: ; preds = %endif241 + %tmp516 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp517 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp516, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp518 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp517 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl519" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp518, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign521 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl519", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp525 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA19constructSingleCharMFwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 %tmp238935, i32 %pred_type.2) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp526 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign521(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp516, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp525) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +default529: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908, %whilebody + %c.0 = phi i32 [ %tmp17.i701, %whilebody ], [ %tmp196909, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 ], [ %tmp216922, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 ] ; [#uses=1] + %pred_type.3 = phi i32 [ 0, %whilebody ], [ 2, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit908 ], [ 3, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit921 ] ; [#uses=1] + br i1 %implicit_concat.0, label %if531, label %endif532 + +if531: ; preds = %default529 + %tmp533 = bitcast %nest.parse* %.frame to i8* ; [#uses=1] + %tmp534 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp533, i32 1, i1 false) ; [#uses=0] + br label %endif532 + +endif532: ; preds = %if531, %default529 + %tmp535 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp536 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp535, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp537 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp536 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl538" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp537, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign540 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl538", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp544 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA19constructSingleCharMFwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 %c.0, i32 %pred_type.3) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp545 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign540(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp535, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp544) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + br label %whilecond + +endwhile: ; preds = %whilecond + br i1 %unanchored_arg, label %if547, label %whilecond567 + +if547: ; preds = %endwhile + %tmp549 = bitcast %nest.parse* %.frame to i8* ; [#uses=3] + %tmp550 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp549, i32 4, i1 false) ; [#uses=0] + br i1 %implicit_concat.0, label %if552, label %endif553 + +if552: ; preds = %if547 + %tmp555 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp549, i32 1, i1 false) ; [#uses=0] + br label %endif553 + +endif553: ; preds = %if552, %if547 + %tmp556 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp557 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp556, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp558 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp557 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opCatAssign at vtbl559" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp558, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)**> [#uses=1] + %frags.opCatAssign561 = load %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)** %"frags.opCatAssign at vtbl559", align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*> [#uses=1] + %tmp563 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval @_D5tango4text5Regex16__T9CharClassTwZ9CharClass8any_charS5tango4text5Regex16__T9CharClassTwZ9CharClass, i32 0) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %tmp564 = call fastcc %"tango.text.Regex.List!(TNFAFragment).List"* %frags.opCatAssign561(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp556, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp563) ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=0] + %tmp566 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp549, i32 9, i1 false) ; [#uses=0] + br label %whilecond567 + +whilecond567: ; preds = %whilecond567, %endif553, %endwhile + %tmp570 = bitcast %nest.parse* %.frame to i8* ; [#uses=4] + %tmp571 = call fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv7performMFE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorbZb(i8* %tmp570, i32 0, i1 true) ; [#uses=1] + br i1 %tmp571, label %endwhile569, label %whilecond567 + +endwhile569: ; preds = %whilecond567 + %tmp573 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 4 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=2] + %.newclass_gc_alloc.i752 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ) ; [#uses=6] + %.newclass_gc.i753 = bitcast i8* %.newclass_gc_alloc.i752 to %"tango.text.Regex.TNFAState!(dchar).TNFAState"* ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=2] + %vtbl.i754 = bitcast i8* %.newclass_gc_alloc.i752 to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl.i754 + %monitor.i755 = getelementptr i8* %.newclass_gc_alloc.i752, i32 4 ; [#uses=1] + %27 = bitcast i8* %monitor.i755 to i8** ; [#uses=1] + store i8* null, i8** %27 + %tmp.i756 = getelementptr i8* %.newclass_gc_alloc.i752, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i756, i8* bitcast (i1* getelementptr (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + %tmp1.i.i757 = getelementptr i8* %.newclass_gc_alloc.i752, i32 16 ; [#uses=1] + %28 = bitcast i8* %tmp1.i.i757 to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i.i758 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc.i.i759 = bitcast i8* %.newclass_gc_alloc.i.i758 to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl.i.i760 = bitcast i8* %.newclass_gc_alloc.i.i758 to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i.i760 + %monitor.i.i761 = getelementptr i8* %.newclass_gc_alloc.i.i758, i32 4 ; [#uses=1] + %29 = bitcast i8* %monitor.i.i761 to i8** ; [#uses=1] + store i8* null, i8** %29 + %tmp2.i.i762 = getelementptr i8* %.newclass_gc_alloc.i.i758, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i.i762, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i.i759, %"tango.text.Regex.List!(TNFATransition).List"** %28 + %tmp6.i763 = getelementptr i8* %.newclass_gc_alloc.i752, i32 12 ; [#uses=1] + %30 = bitcast i8* %tmp6.i763 to i32* ; [#uses=1] + %tmp9.i764 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 3, i32 0 ; [#uses=4] + %.len.i765 = load i32* %tmp9.i764 ; [#uses=4] + store i32 %.len.i765, i32* %30 + %tmp14.i766 = add i32 %.len.i765, 1 ; [#uses=2] + %tmp17.i767 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 3, i32 1 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"***> [#uses=4] + %.ptr.i768 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp17.i767 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp18.i769 = bitcast %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.ptr.i768 to i8* ; [#uses=1] + %.gc_mem.i770 = call i8* @_d_arraysetlengthT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*), i32 %tmp14.i766, i32 %.len.i765, i8* %tmp18.i769) ; [#uses=1] + %.gc_mem19.i771 = bitcast i8* %.gc_mem.i770 to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=2] + %tmp20.i772 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem19.i771, i32 %.len.i765 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc.i753, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp20.i772 + store i32 %tmp14.i766, i32* %tmp9.i764 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem19.i771, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp17.i767 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc.i753, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp573 + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ) ; [#uses=6] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.TNFAState!(dchar).TNFAState"* ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=2] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %31 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %31 + %tmp.i742 = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp.i742, i8* bitcast (i1* getelementptr (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + %tmp1.i.i = getelementptr i8* %.newclass_gc_alloc.i, i32 16 ; [#uses=1] + %32 = bitcast i8* %tmp1.i.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc.i.i = bitcast i8* %.newclass_gc_alloc.i.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl.i.i = bitcast i8* %.newclass_gc_alloc.i.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i.i + %monitor.i.i = getelementptr i8* %.newclass_gc_alloc.i.i, i32 4 ; [#uses=1] + %33 = bitcast i8* %monitor.i.i to i8** ; [#uses=1] + store i8* null, i8** %33 + %tmp2.i.i = getelementptr i8* %.newclass_gc_alloc.i.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i.i, %"tango.text.Regex.List!(TNFATransition).List"** %32 + %tmp6.i743 = getelementptr i8* %.newclass_gc_alloc.i, i32 12 ; [#uses=1] + %34 = bitcast i8* %tmp6.i743 to i32* ; [#uses=1] + %.len.i745 = load i32* %tmp9.i764 ; [#uses=4] + store i32 %.len.i745, i32* %34 + %tmp14.i746 = add i32 %.len.i745, 1 ; [#uses=2] + %.ptr.i748 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp17.i767 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp18.i749 = bitcast %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.ptr.i748 to i8* ; [#uses=1] + %.gc_mem.i750 = call i8* @_d_arraysetlengthT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*), i32 %tmp14.i746, i32 %.len.i745, i8* %tmp18.i749) ; [#uses=1] + %.gc_mem19.i751 = bitcast i8* %.gc_mem.i750 to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=2] + %tmp20.i = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem19.i751, i32 %.len.i745 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc.i, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp20.i + store i32 %tmp14.i746, i32* %tmp9.i764 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem19.i751, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp17.i767 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc.i, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %finish + %35 = bitcast i8* %tmp.i742 to i1* ; [#uses=1] + store i1 true, i1* %35 + %tmp580 = load %"tango.text.Regex.List!(TNFAFragment).List"** %frags ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] + %tmp581 = getelementptr %"tango.text.Regex.List!(TNFAFragment).List"* %tmp580, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"**> [#uses=1] + %tmp582 = load %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"** %tmp581 ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=1] + %"frags.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* %tmp582, i32 0, i32 20 ; [#uses=1] + %frags.opApply = load i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")** %"frags.opApply at vtbl", align 4 ; [#uses=1] + %tmp585 = insertvalue %"int delegate(ref TNFAFragment)" undef, i8* %tmp570, 0 ; <%"int delegate(ref TNFAFragment)"> [#uses=1] + %.func = insertvalue %"int delegate(ref TNFAFragment)" %tmp585, i32 (i8*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv15__foreachbody44MFKC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZi, 1 ; <%"int delegate(ref TNFAFragment)"> [#uses=1] + %tmp586 = call fastcc i32 %frags.opApply(%"tango.text.Regex.List!(TNFAFragment).List"* %tmp580, %"int delegate(ref TNFAFragment)" %.func) ; [#uses=0] + %tmp588 = bitcast [4 x %"tango.text.Regex.List!(TNFATransition).List"*]* %trans to i8* ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp588, i8 0, i32 16, i32 4) + br label %foreachcond + +foreachcond: ; preds = %foreachbody, %endwhile569 + %foreachkey.0 = phi i32 [ 0, %endwhile569 ], [ %tmp603, %foreachbody ] ; [#uses=3] + %tmp591 = icmp ult i32 %foreachkey.0, 4 ; [#uses=1] + br i1 %tmp591, label %foreachbody, label %foreachend + +foreachbody: ; preds = %foreachcond + %tmp593 = getelementptr [4 x %"tango.text.Regex.List!(TNFATransition).List"*]* %trans, i32 0, i32 %foreachkey.0 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc594 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc595 = bitcast i8* %.newclass_gc_alloc594 to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl596 = bitcast i8* %.newclass_gc_alloc594 to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl596 + %monitor597 = getelementptr i8* %.newclass_gc_alloc594, i32 4 ; [#uses=1] + %36 = bitcast i8* %monitor597 to i8** ; [#uses=1] + store i8* null, i8** %36 + %tmp598 = getelementptr i8* %.newclass_gc_alloc594, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp598, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc595, %"tango.text.Regex.List!(TNFATransition).List"** %tmp593 + %tmp603 = add i32 %foreachkey.0, 1 ; [#uses=1] + br label %foreachcond + +foreachend: ; preds = %foreachcond + %tmp604 = bitcast %"tango.text.Regex.Stack!(TNFATransition).Stack"* %todo to i8* ; [#uses=1] + call void @llvm.memset.i32(i8* %tmp604, i8 0, i32 12, i32 8) + br label %whilecond608 + +whilecond608: ; preds = %endif634, %foreachend + %state.0.in = phi %"tango.text.Regex.TNFAState!(dchar).TNFAState"** [ %tmp573, %foreachend ], [ %tmp649, %endif634 ] ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %state.0 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %state.0.in ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=2] + %tmp1.i727 = getelementptr %nest.parse* %.frame, i32 0, i32 6, i32 0 ; [#uses=3] + %tmp2.i728 = load i32* %tmp1.i727, align 8 ; [#uses=2] + %tmp3.i729 = icmp eq i32 %tmp2.i728, 0 ; [#uses=1] + %tmp613 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %state.0, i32 0, i32 3 ; [#uses=3] + br i1 %tmp3.i729, label %oror, label %whilebody609 + +whilebody609: ; preds = %oror, %whilecond608 + %tmp617 = load i1* %tmp613 ; [#uses=1] + br i1 %tmp617, label %endif619, label %if618 + +oror: ; preds = %whilecond608 + %tmp614 = load i1* %tmp613 ; [#uses=1] + br i1 %tmp614, label %endwhile610, label %whilebody609 + +if618: ; preds = %whilebody609 + store i1 true, i1* %tmp613 + %tmp623 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %state.0, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp624 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp623 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp625 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp624, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp626 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp625 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"state.transitions.opApplyReverse at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp626, i32 0, i32 21 ; [#uses=1] + %state.transitions.opApplyReverse = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"state.transitions.opApplyReverse at vtbl", align 4 ; [#uses=1] + %tmp629 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp570, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func630 = insertvalue %"int delegate(ref TNFATransition)" %tmp629, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv15__foreachbody45MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp631 = call fastcc i32 %state.transitions.opApplyReverse(%"tango.text.Regex.List!(TNFATransition).List"* %tmp624, %"int delegate(ref TNFATransition)" %.func630) ; [#uses=0] + %tmp2.i.pre = load i32* %tmp1.i727, align 8 ; [#uses=1] + br label %endif619 + +endif619: ; preds = %if618, %whilebody609 + %tmp6.i705 = phi i32 [ %tmp2.i728, %whilebody609 ], [ %tmp2.i.pre, %if618 ] ; [#uses=2] + %tmp3.i716 = icmp eq i32 %tmp6.i705, 0 ; [#uses=1] + br i1 %tmp3.i716, label %endwhile610, label %endif634 + +endif634: ; preds = %endif619 + %tmp5.i710 = add i32 %tmp6.i705, -1 ; [#uses=2] + %tmp6.i711 = getelementptr %nest.parse* %.frame, i32 0, i32 6, i32 1, i32 1 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"***> [#uses=1] + %.ptr.i712 = load %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*** %tmp6.i711 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**> [#uses=1] + %tmp7.i713 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %.ptr.i712, i32 %tmp5.i710 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**> [#uses=1] + %tmp8.i714 = load %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %tmp7.i713 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=3] + store i32 %tmp5.i710, i32* %tmp1.i727, align 8 + %tmp639 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp8.i714, i32 0, i32 6 ; [#uses=1] + %tmp640 = load i32* %tmp639 ; [#uses=1] + %tmp641 = getelementptr [4 x %"tango.text.Regex.List!(TNFATransition).List"*]* %trans, i32 0, i32 %tmp640 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp642 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp641 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp643 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp642, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp644 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp643 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"(trans[cast(uint)t.priorityClass]).opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp644, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %"(trans[cast(uint)t.priorityClass]).opCatAssign" = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"(trans[cast(uint)t.priorityClass]).opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp647 = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %"(trans[cast(uint)t.priorityClass]).opCatAssign"(%"tango.text.Regex.List!(TNFATransition).List"* %tmp642, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp8.i714) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + %tmp649 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp8.i714, i32 0, i32 2 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + br label %whilecond608 + +endwhile610: ; preds = %endif619, %oror + store i32 0, i32* %nextPrio + br label %foreachcond653 + +foreachcond653: ; preds = %foreachbody654, %endwhile610 + %foreachkey651.0 = phi i32 [ 0, %endwhile610 ], [ %tmp671, %foreachbody654 ] ; [#uses=3] + %tmp658 = icmp ult i32 %foreachkey651.0, 4 ; [#uses=1] + br i1 %tmp658, label %foreachbody654, label %foreachend656 + +foreachbody654: ; preds = %foreachcond653 + %tmp660 = getelementptr [4 x %"tango.text.Regex.List!(TNFATransition).List"*]* %trans, i32 0, i32 %foreachkey651.0 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp661 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp660 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp663 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp661, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp664 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp663 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"ts.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp664, i32 0, i32 20 ; [#uses=1] + %ts.opApply = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"ts.opApply at vtbl", align 4 ; [#uses=1] + %tmp667 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp570, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func668 = insertvalue %"int delegate(ref TNFATransition)" %tmp667, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv15__foreachbody46MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp669 = call fastcc i32 %ts.opApply(%"tango.text.Regex.List!(TNFATransition).List"* %tmp661, %"int delegate(ref TNFATransition)" %.func668) ; [#uses=0] + %tmp671 = add i32 %foreachkey651.0, 1 ; [#uses=1] + br label %foreachcond653 + +foreachend656: ; preds = %foreachcond653 + ret void +} + +define weak_odr fastcc %"tango.text.Regex.TNFA!(dchar).TNFA"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5_ctorMFAwZC5tango4text5Regex11__T4TNFATwZ4TNFA(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"Act[]" %regex_arg) { +entry: + %tmp1 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 6 ; [#uses=1] + store i32 1, i32* %tmp1 + %tmp3 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 9 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp4 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp4, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc, %"tango.text.Regex.List!(TNFATransition).List"** %tmp3 + %tmp9 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + store %"Act[]" %regex_arg, %"Act[]"* %tmp9 + ret %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg +} + +define weak_odr fastcc i32 @_D5tango4text5Regex11__T4TNFATwZ4TNFA11peekPatternMFZw(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg) { +entry: + %tmp = alloca i32, align 4 ; [#uses=2] + %tmp2 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=1] + %tmp3 = load i32* %tmp2 ; [#uses=2] + store i32 %tmp3, i32* %tmp + %tmp6 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=1] + %.len = load i32* %tmp6 ; [#uses=1] + %tmp8 = icmp ult i32 %tmp3, %.len ; [#uses=1] + br i1 %tmp8, label %if, label %endif + +if: ; preds = %entry + %tmp10 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11 = load %"Act[]"* %tmp10 ; <%"Act[]"> [#uses=1] + %tmp12 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11, i32* %tmp) ; [#uses=1] + ret i32 %tmp12 + +endif: ; preds = %entry + ret i32 0 +} + +define weak_odr fastcc i32 @_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg) { +entry: + %tmp1 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=1] + %tmp3 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=2] + %tmp4 = load i32* %tmp3 ; [#uses=2] + store i32 %tmp4, i32* %tmp1 + %tmp9 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=1] + %.len = load i32* %tmp9 ; [#uses=1] + %tmp11 = icmp ult i32 %tmp4, %.len ; [#uses=1] + br i1 %tmp11, label %if, label %endif + +if: ; preds = %entry + %tmp13 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14 = load %"Act[]"* %tmp13 ; <%"Act[]"> [#uses=1] + %tmp17 = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14, i32* %tmp3) ; [#uses=1] + ret i32 %tmp17 + +endif: ; preds = %entry + ret i32 0 +} + +define weak_odr fastcc i1 @_D5tango4text5Regex11__T4TNFATwZ4TNFA12endOfPatternMFZb(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg) nounwind readonly { +entry: + %tmp1 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=1] + %tmp4 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=1] + %.len = load i32* %tmp4 ; [#uses=1] + %tmp5 = load i32* %tmp1 ; [#uses=1] + %tmp6 = icmp uge i32 %tmp5, %.len ; [#uses=1] + ret i1 %tmp6 +} + +define weak_odr fastcc %"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA8addStateMFZC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg) { +entry: + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ) ; [#uses=6] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAState!(dchar).TNFAState"* ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=2] + %vtbl = bitcast i8* %.newclass_gc_alloc to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (i1* getelementptr (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + %tmp1.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %1 = bitcast i8* %tmp1.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %2 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %2 + %tmp2.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp2.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i, %"tango.text.Regex.List!(TNFATransition).List"** %1 + %tmp6 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %3 = bitcast i8* %tmp6 to i32* ; [#uses=1] + %tmp9 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 3, i32 0 ; [#uses=2] + %.len = load i32* %tmp9 ; [#uses=4] + store i32 %.len, i32* %3 + %tmp14 = add i32 %.len, 1 ; [#uses=2] + %tmp17 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 3, i32 1 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"***> [#uses=2] + %.ptr = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp17 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp18 = bitcast %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.ptr to i8* ; [#uses=1] + %.gc_mem = tail call i8* @_d_arraysetlengthT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*), i32 %tmp14, i32 %.len, i8* %tmp18) ; [#uses=1] + %.gc_mem19 = bitcast i8* %.gc_mem to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=2] + %tmp20 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem19, i32 %.len ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp20 + store i32 %tmp14, i32* %tmp9 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem19, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp17 + ret %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc +} + +define weak_odr fastcc %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA13addTransitionMFE5tango4text5Regex13PriorityClassZC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg, i32 %pc_arg) { +entry: + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ) ; [#uses=5] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=2] + %vtbl = bitcast i8* %.newclass_gc_alloc to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"** getelementptr (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ, i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp1.i = getelementptr i8* %.newclass_gc_alloc, i32 48 ; [#uses=1] + %1 = bitcast i8* %tmp1.i to i32* ; [#uses=1] + store i32 %pc_arg, i32* %1 + %tmp7 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 9 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp8 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp7 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp9 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp8, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp10 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp9 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"this.transitions.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp10, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %this.transitions.opCatAssign = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"this.transitions.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp13 = tail call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %this.transitions.opCatAssign(%"tango.text.Regex.List!(TNFATransition).List"* %tmp8, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + ret %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc +} + +define weak_odr fastcc i32 @_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg) { +entry: + %tmp.i = alloca i32, align 4 ; [#uses=2] + br label %whilecond + +whilecond: ; preds = %if.i, %endif, %entry + %res.0 = phi i32 [ 0, %entry ], [ %tmp12, %endif ], [ %tmp12, %if.i ] ; [#uses=2] + %tmp1.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=3] + %tmp4.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=2] + %.len.i = load i32* %tmp4.i ; [#uses=1] + %tmp5.i = load i32* %tmp1.i ; [#uses=2] + %tmp6.i = icmp ult i32 %tmp5.i, %.len.i ; [#uses=1] + br i1 %tmp6.i, label %whilebody, label %endwhile + +whilebody: ; preds = %whilecond + store i32 %tmp5.i, i32* %tmp.i + %tmp10.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i22 = load %"Act[]"* %tmp10.i ; <%"Act[]"> [#uses=1] + %tmp12.i = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i22, i32* %tmp.i) ; [#uses=1] + %phitmp = add i32 %tmp12.i, -48 ; [#uses=2] + %or.cond = icmp ugt i32 %phitmp, 9 ; [#uses=1] + br i1 %or.cond, label %endwhile, label %endif + +endif: ; preds = %whilebody + %tmp9 = mul i32 %res.0, 10 ; [#uses=1] + %tmp12 = add i32 %tmp9, %phitmp ; [#uses=2] + %tmp1.i16 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=1] + %tmp4.i17 = load i32* %tmp1.i ; [#uses=2] + store i32 %tmp4.i17, i32* %tmp1.i16 + %.len.i18 = load i32* %tmp4.i ; [#uses=1] + %tmp11.i = icmp ult i32 %tmp4.i17, %.len.i18 ; [#uses=1] + br i1 %tmp11.i, label %if.i, label %whilecond + +if.i: ; preds = %endif + %tmp13.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i = load %"Act[]"* %tmp13.i ; <%"Act[]"> [#uses=1] + %tmp17.i = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i, i32* %tmp1.i) ; [#uses=0] + br label %whilecond + +endwhile: ; preds = %whilebody, %whilecond + ret i32 %res.0 +} + +define weak_odr fastcc void @_D5tango4text5Regex11__T4TNFATwZ4TNFA15parseOccurCountMFJkJkZv(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32* nocapture %minOccur_arg, i32* nocapture %maxOccur_arg) { +entry: + %tmp.i235 = alloca i32, align 4 ; [#uses=2] + %tmp.i210 = alloca i32, align 4 ; [#uses=2] + %tmp.i.i158 = alloca i32, align 4 ; [#uses=2] + %tmp.i147 = alloca i32, align 4 ; [#uses=2] + %tmp.i.i = alloca i32, align 4 ; [#uses=2] + store i32 0, i32* %minOccur_arg + store i32 0, i32* %maxOccur_arg + br label %whilecond.i + +whilecond.i: ; preds = %if.i.i, %endif.i, %entry + %res.0.i = phi i32 [ 0, %entry ], [ %tmp12.i, %endif.i ], [ %tmp12.i, %if.i.i ] ; [#uses=2] + %tmp1.i.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=15] + %tmp4.i.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=13] + %.len.i.i = load i32* %tmp4.i.i ; [#uses=1] + %tmp5.i.i = load i32* %tmp1.i.i ; [#uses=2] + %tmp6.i.i = icmp ult i32 %tmp5.i.i, %.len.i.i ; [#uses=1] + br i1 %tmp6.i.i, label %whilebody.i, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit + +whilebody.i: ; preds = %whilecond.i + store i32 %tmp5.i.i, i32* %tmp.i.i + %tmp10.i.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=2] + %tmp11.i22.i = load %"Act[]"* %tmp10.i.i ; <%"Act[]"> [#uses=1] + %tmp12.i.i = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i22.i, i32* %tmp.i.i) ; [#uses=1] + %phitmp = add i32 %tmp12.i.i, -48 ; [#uses=2] + %or.cond.i = icmp ugt i32 %phitmp, 9 ; [#uses=1] + br i1 %or.cond.i, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit, label %endif.i + +endif.i: ; preds = %whilebody.i + %tmp9.i = mul i32 %res.0.i, 10 ; [#uses=1] + %tmp12.i = add i32 %tmp9.i, %phitmp ; [#uses=2] + %tmp1.i16.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=1] + %tmp4.i17.i = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp4.i17.i, i32* %tmp1.i16.i + %.len.i18.i = load i32* %tmp4.i.i ; [#uses=1] + %tmp11.i.i = icmp ult i32 %tmp4.i17.i, %.len.i18.i ; [#uses=1] + br i1 %tmp11.i.i, label %if.i.i, label %whilecond.i + +if.i.i: ; preds = %endif.i + %tmp14.i.i = load %"Act[]"* %tmp10.i.i ; <%"Act[]"> [#uses=1] + %tmp17.i.i = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i.i, i32* %tmp1.i.i) ; [#uses=0] + br label %whilecond.i + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit: ; preds = %whilebody.i, %whilecond.i + store i32 %res.0.i, i32* %minOccur_arg + %tmp3.i237 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp3.i237, i32* %tmp.i235 + %.len.i239 = load i32* %tmp4.i.i ; [#uses=1] + %tmp8.i240 = icmp ult i32 %tmp3.i237, %.len.i239 ; [#uses=1] + br i1 %tmp8.i240, label %if.i244, label %endif + +if.i244: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit + %tmp10.i241 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i242 = load %"Act[]"* %tmp10.i241 ; <%"Act[]"> [#uses=1] + %tmp12.i243 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i242, i32* %tmp.i235) ; [#uses=1] + %phitmp251 = icmp eq i32 %tmp12.i243, 125 ; [#uses=1] + br i1 %phitmp251, label %if, label %endif + +if: ; preds = %if.i244 + %tmp1.i223 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=1] + %tmp4.i225 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp4.i225, i32* %tmp1.i223 + %.len.i227 = load i32* %tmp4.i.i ; [#uses=1] + %tmp11.i228 = icmp ult i32 %tmp4.i225, %.len.i227 ; [#uses=1] + br i1 %tmp11.i228, label %if.i232, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit234 + +if.i232: ; preds = %if + %tmp13.i229 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i230 = load %"Act[]"* %tmp13.i229 ; <%"Act[]"> [#uses=1] + %tmp17.i231 = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i230, i32* %tmp1.i.i) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit234 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit234: ; preds = %if.i232, %if + %tmp7 = load i32* %minOccur_arg ; [#uses=1] + store i32 %tmp7, i32* %maxOccur_arg + ret void + +endif: ; preds = %if.i244, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit + %tmp3.i212 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp3.i212, i32* %tmp.i210 + %.len.i214 = load i32* %tmp4.i.i ; [#uses=1] + %tmp8.i215 = icmp ult i32 %tmp3.i212, %.len.i214 ; [#uses=1] + br i1 %tmp8.i215, label %if.i219, label %if11 + +if.i219: ; preds = %endif + %tmp10.i216 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i217 = load %"Act[]"* %tmp10.i216 ; <%"Act[]"> [#uses=1] + %tmp12.i218 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i217, i32* %tmp.i210) ; [#uses=1] + %phitmp250 = icmp eq i32 %tmp12.i218, 44 ; [#uses=1] + br i1 %phitmp250, label %endif12, label %if11 + +if11: ; preds = %if.i219, %endif + %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp13 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp13, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %tmp19 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 1 ; [#uses=1] + %.ptr = load i32** %tmp19 ; [#uses=1] + %tmp21 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=1] + %.len = load i32* %tmp4.i.i ; [#uses=1] + %tmp23 = load i32* %tmp21 ; [#uses=2] + %tmp24 = getelementptr i32* %.ptr, i32 %tmp23 ; [#uses=1] + %tmp25 = sub i32 %.len, %tmp23 ; [#uses=1] + %tmp26 = insertvalue %"Act[]" undef, i32 %tmp25, 0 ; <%"Act[]"> [#uses=1] + %tmp27 = insertvalue %"Act[]" %tmp26, i32* %tmp24, 1 ; <%"Act[]"> [#uses=1] + %tmp28 = tail call fastcc %"byte[]" @_D5tango4text7convert3Utf8toStringFAwAaPkZAa(%"Act[]" %tmp27, %"byte[]" zeroinitializer, i32* null) ; <%"byte[]"> [#uses=2] + %.len29 = extractvalue %"byte[]" %tmp28, 0 ; [#uses=4] + %tmp30 = add i32 %.len29, 28 ; [#uses=3] + %.nongc_mem = alloca i8, i32 %tmp30, align 1 ; [#uses=3] + %.ptr31 = extractvalue %"byte[]" %tmp28, 1 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %.nongc_mem, i8* getelementptr ([29 x i8]* @.str219, i32 0, i32 0), i32 28, i32 1) + %tmp32 = getelementptr i8* %.nongc_mem, i32 28 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp32, i8* %.ptr31, i32 %.len29, i32 1) + %tmp34 = add i32 %.len29, 29 ; [#uses=2] + %.nongc_mem252 = alloca i8, i32 %tmp34, align 1 ; [#uses=3] + tail call void @llvm.memcpy.i32(i8* %.nongc_mem252, i8* %.nongc_mem, i32 %tmp30, i32 1) + %tmp37 = getelementptr i8* %.nongc_mem252, i32 %tmp30 ; [#uses=1] + store i8 34, i8* %tmp37, align 1 + %tmp2.i202 = add i32 %.len29, 37 ; [#uses=2] + %.gc_mem.i203 = tail call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp2.i202) ; [#uses=3] + %.gc_mem12.i204 = bitcast i8* %.gc_mem.i203 to i64* ; [#uses=1] + %tmp.i205 = load i64* bitcast ([9 x i8]* @.str280 to i64*), align 8 ; [#uses=1] + store i64 %tmp.i205, i64* %.gc_mem12.i204, align 1 + %tmp4.i206 = getelementptr i8* %.gc_mem.i203, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp4.i206, i8* %.nongc_mem252, i32 %tmp34, i32 1) + %tmp6.i207 = insertvalue %"byte[]" undef, i32 %tmp2.i202, 0 ; <%"byte[]"> [#uses=1] + %tmp7.i208 = insertvalue %"byte[]" %tmp6.i207, i8* %.gc_mem.i203, 1 ; <%"byte[]"> [#uses=1] + %tmp8.i209 = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc, %"byte[]" %tmp7.i208, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp41 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_throw_exception(%object.Object* %tmp41) + unreachable + +endif12: ; preds = %if.i219 + %tmp1.i188 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=5] + %tmp4.i190 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp4.i190, i32* %tmp1.i188 + %.len.i192 = load i32* %tmp4.i.i ; [#uses=1] + %tmp11.i193 = icmp ult i32 %tmp4.i190, %.len.i192 ; [#uses=1] + br i1 %tmp11.i193, label %if.i197, label %whilecond.i165 + +if.i197: ; preds = %endif12 + %tmp13.i194 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i195 = load %"Act[]"* %tmp13.i194 ; <%"Act[]"> [#uses=1] + %tmp17.i196 = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i195, i32* %tmp1.i.i) ; [#uses=0] + br label %whilecond.i165 + +whilecond.i165: ; preds = %if.i.i184, %endif.i180, %if.i197, %endif12 + %res.0.i159 = phi i32 [ 0, %endif12 ], [ 0, %if.i197 ], [ %tmp12.i175, %endif.i180 ], [ %tmp12.i175, %if.i.i184 ] ; [#uses=2] + %.len.i.i162 = load i32* %tmp4.i.i ; [#uses=1] + %tmp5.i.i163 = load i32* %tmp1.i.i ; [#uses=2] + %tmp6.i.i164 = icmp ult i32 %tmp5.i.i163, %.len.i.i162 ; [#uses=1] + br i1 %tmp6.i.i164, label %whilebody.i166, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit187 + +whilebody.i166: ; preds = %whilecond.i165 + store i32 %tmp5.i.i163, i32* %tmp.i.i158 + %tmp10.i.i167 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=2] + %tmp11.i22.i168 = load %"Act[]"* %tmp10.i.i167 ; <%"Act[]"> [#uses=1] + %tmp12.i.i169 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i22.i168, i32* %tmp.i.i158) ; [#uses=1] + %phitmp248 = add i32 %tmp12.i.i169, -48 ; [#uses=2] + %or.cond.i172 = icmp ugt i32 %phitmp248, 9 ; [#uses=1] + br i1 %or.cond.i172, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit187, label %endif.i180 + +endif.i180: ; preds = %whilebody.i166 + %tmp9.i174 = mul i32 %res.0.i159, 10 ; [#uses=1] + %tmp12.i175 = add i32 %tmp9.i174, %phitmp248 ; [#uses=2] + %tmp4.i17.i177 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp4.i17.i177, i32* %tmp1.i188 + %.len.i18.i178 = load i32* %tmp4.i.i ; [#uses=1] + %tmp11.i.i179 = icmp ult i32 %tmp4.i17.i177, %.len.i18.i178 ; [#uses=1] + br i1 %tmp11.i.i179, label %if.i.i184, label %whilecond.i165 + +if.i.i184: ; preds = %endif.i180 + %tmp14.i.i182 = load %"Act[]"* %tmp10.i.i167 ; <%"Act[]"> [#uses=1] + %tmp17.i.i183 = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i.i182, i32* %tmp1.i.i) ; [#uses=0] + br label %whilecond.i165 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit187: ; preds = %whilebody.i166, %whilecond.i165 + store i32 %res.0.i159, i32* %maxOccur_arg + %tmp3.i149 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp3.i149, i32* %tmp.i147 + %.len.i151 = load i32* %tmp4.i.i ; [#uses=1] + %tmp8.i152 = icmp ult i32 %tmp3.i149, %.len.i151 ; [#uses=1] + br i1 %tmp8.i152, label %if.i155, label %if49 + +if.i155: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit187 + %tmp10.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i153 = load %"Act[]"* %tmp10.i ; <%"Act[]"> [#uses=1] + %tmp12.i154 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i153, i32* %tmp.i147) ; [#uses=1] + %phitmp249 = icmp eq i32 %tmp12.i154, 125 ; [#uses=1] + br i1 %phitmp249, label %endif50, label %if49 + +if49: ; preds = %if.i155, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11parseNumberMFZk.exit187 + %.newclass_gc_alloc51 = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc52 = bitcast i8* %.newclass_gc_alloc51 to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl53 = bitcast i8* %.newclass_gc_alloc51 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl53 + %monitor54 = getelementptr i8* %.newclass_gc_alloc51, i32 4 ; [#uses=1] + %1 = bitcast i8* %monitor54 to i8** ; [#uses=1] + store i8* null, i8** %1 + %tmp55 = getelementptr i8* %.newclass_gc_alloc51, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp55, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %tmp61 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 1 ; [#uses=1] + %.ptr62 = load i32** %tmp61 ; [#uses=1] + %.len66 = load i32* %tmp4.i.i ; [#uses=1] + %tmp67 = load i32* %tmp1.i188 ; [#uses=2] + %tmp68 = getelementptr i32* %.ptr62, i32 %tmp67 ; [#uses=1] + %tmp69 = sub i32 %.len66, %tmp67 ; [#uses=1] + %tmp70 = insertvalue %"Act[]" undef, i32 %tmp69, 0 ; <%"Act[]"> [#uses=1] + %tmp71 = insertvalue %"Act[]" %tmp70, i32* %tmp68, 1 ; <%"Act[]"> [#uses=1] + %tmp72 = tail call fastcc %"byte[]" @_D5tango4text7convert3Utf8toStringFAwAaPkZAa(%"Act[]" %tmp71, %"byte[]" zeroinitializer, i32* null) ; <%"byte[]"> [#uses=2] + %.len73 = extractvalue %"byte[]" %tmp72, 0 ; [#uses=4] + %tmp74 = add i32 %.len73, 28 ; [#uses=3] + %.nongc_mem253 = alloca i8, i32 %tmp74, align 1 ; [#uses=3] + %.ptr76 = extractvalue %"byte[]" %tmp72, 1 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %.nongc_mem253, i8* getelementptr ([29 x i8]* @.str221, i32 0, i32 0), i32 28, i32 1) + %tmp77 = getelementptr i8* %.nongc_mem253, i32 28 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp77, i8* %.ptr76, i32 %.len73, i32 1) + %tmp79 = add i32 %.len73, 29 ; [#uses=2] + %.nongc_mem254 = alloca i8, i32 %tmp79, align 1 ; [#uses=3] + tail call void @llvm.memcpy.i32(i8* %.nongc_mem254, i8* %.nongc_mem253, i32 %tmp74, i32 1) + %tmp82 = getelementptr i8* %.nongc_mem254, i32 %tmp74 ; [#uses=1] + store i8 34, i8* %tmp82, align 1 + %tmp2.i139 = add i32 %.len73, 37 ; [#uses=2] + %.gc_mem.i140 = tail call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp2.i139) ; [#uses=3] + %.gc_mem12.i141 = bitcast i8* %.gc_mem.i140 to i64* ; [#uses=1] + %tmp.i142 = load i64* bitcast ([9 x i8]* @.str280 to i64*), align 8 ; [#uses=1] + store i64 %tmp.i142, i64* %.gc_mem12.i141, align 1 + %tmp4.i143 = getelementptr i8* %.gc_mem.i140, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp4.i143, i8* %.nongc_mem254, i32 %tmp79, i32 1) + %tmp6.i144 = insertvalue %"byte[]" undef, i32 %tmp2.i139, 0 ; <%"byte[]"> [#uses=1] + %tmp7.i145 = insertvalue %"byte[]" %tmp6.i144, i8* %.gc_mem.i140, 1 ; <%"byte[]"> [#uses=1] + %tmp8.i146 = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc52, %"byte[]" %tmp7.i145, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp86 = bitcast i8* %.newclass_gc_alloc51 to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_throw_exception(%object.Object* %tmp86) + unreachable + +endif50: ; preds = %if.i155 + %tmp4.i134 = load i32* %tmp1.i.i ; [#uses=2] + store i32 %tmp4.i134, i32* %tmp1.i188 + %.len.i = load i32* %tmp4.i.i ; [#uses=1] + %tmp11.i = icmp ult i32 %tmp4.i134, %.len.i ; [#uses=1] + br i1 %tmp11.i, label %if.i, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit + +if.i: ; preds = %endif50 + %tmp13.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i = load %"Act[]"* %tmp13.i ; <%"Act[]"> [#uses=1] + %tmp17.i = tail call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i, i32* %tmp1.i.i) ; [#uses=0] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit: ; preds = %if.i, %endif50 + %tmp90 = load i32* %maxOccur_arg ; [#uses=2] + %tmp91 = icmp eq i32 %tmp90, 0 ; [#uses=1] + br i1 %tmp91, label %endif96, label %andand + +andand: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit + %tmp93 = load i32* %minOccur_arg ; [#uses=1] + %tmp94 = icmp ult i32 %tmp90, %tmp93 ; [#uses=1] + br i1 %tmp94, label %if95, label %endif96 + +if95: ; preds = %andand + %.newclass_gc_alloc97 = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc98 = bitcast i8* %.newclass_gc_alloc97 to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl99 = bitcast i8* %.newclass_gc_alloc97 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl99 + %monitor100 = getelementptr i8* %.newclass_gc_alloc97, i32 4 ; [#uses=1] + %2 = bitcast i8* %monitor100 to i8** ; [#uses=1] + store i8* null, i8** %2 + %tmp101 = getelementptr i8* %.newclass_gc_alloc97, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp101, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %tmp107 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 1 ; [#uses=1] + %.ptr108 = load i32** %tmp107 ; [#uses=1] + %.len112 = load i32* %tmp4.i.i ; [#uses=1] + %tmp113 = load i32* %tmp1.i188 ; [#uses=2] + %tmp114 = getelementptr i32* %.ptr108, i32 %tmp113 ; [#uses=1] + %tmp115 = sub i32 %.len112, %tmp113 ; [#uses=1] + %tmp116 = insertvalue %"Act[]" undef, i32 %tmp115, 0 ; <%"Act[]"> [#uses=1] + %tmp117 = insertvalue %"Act[]" %tmp116, i32* %tmp114, 1 ; <%"Act[]"> [#uses=1] + %tmp118 = tail call fastcc %"byte[]" @_D5tango4text7convert3Utf8toStringFAwAaPkZAa(%"Act[]" %tmp117, %"byte[]" zeroinitializer, i32* null) ; <%"byte[]"> [#uses=2] + %.len119 = extractvalue %"byte[]" %tmp118, 0 ; [#uses=4] + %tmp120 = add i32 %.len119, 40 ; [#uses=3] + %.nongc_mem255 = alloca i8, i32 %tmp120, align 1 ; [#uses=3] + %.ptr122 = extractvalue %"byte[]" %tmp118, 1 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %.nongc_mem255, i8* getelementptr ([41 x i8]* @.str223, i32 0, i32 0), i32 40, i32 1) + %tmp123 = getelementptr i8* %.nongc_mem255, i32 40 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp123, i8* %.ptr122, i32 %.len119, i32 1) + %tmp125 = add i32 %.len119, 41 ; [#uses=2] + %.nongc_mem256 = alloca i8, i32 %tmp125, align 1 ; [#uses=3] + tail call void @llvm.memcpy.i32(i8* %.nongc_mem256, i8* %.nongc_mem255, i32 %tmp120, i32 1) + %tmp128 = getelementptr i8* %.nongc_mem256, i32 %tmp120 ; [#uses=1] + store i8 34, i8* %tmp128, align 1 + %tmp2.i = add i32 %.len119, 49 ; [#uses=2] + %.gc_mem.i = tail call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp2.i) ; [#uses=3] + %.gc_mem12.i = bitcast i8* %.gc_mem.i to i64* ; [#uses=1] + %tmp.i = load i64* bitcast ([9 x i8]* @.str280 to i64*), align 8 ; [#uses=1] + store i64 %tmp.i, i64* %.gc_mem12.i, align 1 + %tmp4.i = getelementptr i8* %.gc_mem.i, i32 8 ; [#uses=1] + tail call void @llvm.memcpy.i32(i8* %tmp4.i, i8* %.nongc_mem256, i32 %tmp125, i32 1) + %tmp6.i = insertvalue %"byte[]" undef, i32 %tmp2.i, 0 ; <%"byte[]"> [#uses=1] + %tmp7.i = insertvalue %"byte[]" %tmp6.i, i8* %.gc_mem.i, 1 ; <%"byte[]"> [#uses=1] + %tmp8.i = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc98, %"byte[]" %tmp7.i, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp132 = bitcast i8* %.newclass_gc_alloc97 to %object.Object* ; <%object.Object*> [#uses=1] + tail call void @_d_throw_exception(%object.Object* %tmp132) + unreachable + +endif96: ; preds = %andand, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit + ret void +} + +define weak_odr fastcc %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %t_arg) { +entry: + %t = alloca %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, align 4 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**> [#uses=4] + store %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %t_arg, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %t + %tmp1 = icmp eq %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %t_arg, null ; [#uses=1] + br i1 %tmp1, label %if, label %endif + +if: ; preds = %entry + ret %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* null + +endif: ; preds = %entry + %tmp4 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 11 ; [#uses=2] + %tmp5 = load i8** %tmp4 ; [#uses=1] + %tmp6 = bitcast i8* %tmp5 to %32* ; <%32*> [#uses=1] + %tmp7 = bitcast %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %t to i8* ; [#uses=2] + %aa.in = call i8* @_aaIn(%32* nocapture %tmp6, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to %object.TypeInfo*), i8* nocapture %tmp7) readonly ; [#uses=2] + %tmp10 = icmp eq i8* %aa.in, null ; [#uses=1] + br i1 %tmp10, label %endif12, label %if11 + +if11: ; preds = %endif + %tmp8 = bitcast i8* %aa.in to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**> [#uses=1] + %tmp14 = load %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %tmp8 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=1] + ret %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp14 + +endif12: ; preds = %endif + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ) ; [#uses=8] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=3] + %vtbl = bitcast i8* %.newclass_gc_alloc to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp16 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp16, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"** getelementptr (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ, i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp21 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %t_arg, i32 0, i32 6 ; [#uses=1] + %tmp22 = load i32* %tmp21 ; [#uses=1] + %tmp1.i = getelementptr i8* %.newclass_gc_alloc, i32 48 ; [#uses=1] + %1 = bitcast i8* %tmp1.i to i32* ; [#uses=1] + store i32 %tmp22, i32* %1 + %tmp26 = bitcast i8** %tmp4 to %32* ; <%32*> [#uses=1] + %aa.index = call i8* @_aaGet(%32* nocapture %tmp26, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to %object.TypeInfo*), i32 4, i8* nocapture %tmp7) ; [#uses=1] + %tmp28 = bitcast i8* %aa.index to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**> [#uses=1] + store %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %tmp28 + %tmp31 = getelementptr i8* %.newclass_gc_alloc, i32 44 ; [#uses=1] + %2 = bitcast i8* %tmp31 to i32* ; [#uses=1] + %tmp32 = load %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %t ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=3] + %tmp33 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp32, i32 0, i32 5 ; [#uses=1] + %tmp34 = load i32* %tmp33 ; [#uses=1] + store i32 %tmp34, i32* %2 + %tmp36 = getelementptr i8* %.newclass_gc_alloc, i32 40 ; [#uses=1] + %3 = bitcast i8* %tmp36 to i32* ; [#uses=1] + %tmp38 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp32, i32 0, i32 4 ; [#uses=1] + %tmp39 = load i32* %tmp38 ; [#uses=1] + store i32 %tmp39, i32* %3 + %tmp43 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp32, i32 0, i32 3 ; <%"tango.text.Regex.Predicate!(dchar).Predicate"*> [#uses=1] + %tmp41 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %tmp45 = bitcast %"tango.text.Regex.Predicate!(dchar).Predicate"* %tmp43 to i8* ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp41, i8* %tmp45, i32 28, i32 1) + %4 = bitcast i8* %tmp16 to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp49 = load %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** %t ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=1] + %tmp50 = getelementptr %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %tmp49, i32 0, i32 2 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp51 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp50 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp52 = call fastcc %"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp51) ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp52, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %4 + %tmp54 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 9 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp55 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp54 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp56 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp55, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp57 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp56 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"this.transitions.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp57, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %this.transitions.opCatAssign = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"this.transitions.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp60 = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %this.transitions.opCatAssign(%"tango.text.Regex.List!(TNFATransition).List"* %tmp55, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + ret %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc +} + +define weak_odr fastcc %"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %s_arg) { +entry: + %s = alloca %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, align 4 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=5] + %.frame = alloca %nest.clone, align 8 ; <%nest.clone*> [#uses=3] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %s_arg, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s + %s2 = getelementptr %nest.clone* %.frame, i32 0, i32 0 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=7] + %this = getelementptr %nest.clone* %.frame, i32 0, i32 1 ; <%"tango.text.Regex.TNFA!(dchar).TNFA"**> [#uses=1] + store %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFA!(dchar).TNFA"** %this + %tmp3 = icmp eq %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %s_arg, null ; [#uses=1] + br i1 %tmp3, label %if, label %endif + +if: ; preds = %entry + ret %"tango.text.Regex.TNFAState!(dchar).TNFAState"* null + +endif: ; preds = %entry + %tmp6 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 10 ; [#uses=2] + %tmp7 = load i8** %tmp6 ; [#uses=1] + %tmp8 = bitcast i8* %tmp7 to %32* ; <%32*> [#uses=1] + %tmp9 = bitcast %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s to i8* ; [#uses=2] + %aa.in = call i8* @_aaIn(%32* nocapture %tmp8, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*), i8* nocapture %tmp9) readonly ; [#uses=2] + %tmp12 = icmp eq i8* %aa.in, null ; [#uses=1] + br i1 %tmp12, label %endif14, label %if13 + +if13: ; preds = %endif + %tmp10 = bitcast i8* %aa.in to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp16 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp10 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + ret %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp16 + +endif14: ; preds = %endif + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ) ; [#uses=5] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAState!(dchar).TNFAState"* ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp18 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp18, i8* bitcast (i1* getelementptr (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + %tmp1.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %1 = bitcast i8* %tmp1.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %2 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %2 + %tmp2.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i, %"tango.text.Regex.List!(TNFATransition).List"** %1 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %.newclass_gc, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 + %tmp25 = bitcast i8** %tmp6 to %32* ; <%32*> [#uses=1] + %aa.index = call i8* @_aaGet(%32* nocapture %tmp25, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*), i32 4, i8* nocapture %tmp9) ; [#uses=1] + %tmp27 = bitcast i8* %aa.index to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp28 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp28, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp27 + %tmp29 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp30 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp29, i32 0, i32 2 ; [#uses=1] + %tmp31 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp32 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp31, i32 0, i32 2 ; [#uses=1] + %tmp33 = load i1* %tmp32 ; [#uses=1] + store i1 %tmp33, i1* %tmp30 + %tmp34 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp35 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp34, i32 0, i32 3 ; [#uses=1] + %tmp36 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp37 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp36, i32 0, i32 3 ; [#uses=1] + %tmp38 = load i1* %tmp37 ; [#uses=1] + store i1 %tmp38, i1* %tmp35 + %tmp39 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp40 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp39, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp41 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp40 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp42 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp41, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp43 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp42 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"s.transitions.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp43, i32 0, i32 20 ; [#uses=1] + %s.transitions.opApply = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"s.transitions.opApply at vtbl", align 4 ; [#uses=1] + %tmp45 = bitcast %nest.clone* %.frame to i8* ; [#uses=1] + %tmp46 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp45, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func = insertvalue %"int delegate(ref TNFATransition)" %tmp46, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState15__foreachbody47MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp47 = call fastcc i32 %s.transitions.opApply(%"tango.text.Regex.List!(TNFATransition).List"* %tmp41, %"int delegate(ref TNFATransition)" %.func) ; [#uses=0] + %tmp48 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + %tmp49 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp48, i32 0, i32 4 ; [#uses=1] + %tmp52 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 3, i32 0 ; [#uses=3] + %.len = load i32* %tmp52 ; [#uses=1] + store i32 %.len, i32* %tmp49 + %.len56 = load i32* %tmp52 ; [#uses=3] + %tmp57 = add i32 %.len56, 1 ; [#uses=2] + %tmp60 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 3, i32 1 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"***> [#uses=2] + %.ptr = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp60 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp61 = bitcast %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.ptr to i8* ; [#uses=1] + %.gc_mem = call i8* @_d_arraysetlengthT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*), i32 %tmp57, i32 %.len56, i8* %tmp61) ; [#uses=1] + %.gc_mem62 = bitcast i8* %.gc_mem to %"tango.text.Regex.TNFAState!(dchar).TNFAState"** ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=2] + %tmp63 = getelementptr %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem62, i32 %.len56 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"**> [#uses=1] + %tmp64 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp64, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %tmp63 + store i32 %tmp57, i32* %tmp52 + store %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %.gc_mem62, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*** %tmp60 + %tmp67 = load %"tango.text.Regex.TNFAState!(dchar).TNFAState"** %s2, align 8 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=1] + ret %"tango.text.Regex.TNFAState!(dchar).TNFAState"* %tmp67 +} + +define weak_odr fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %f_arg) { +entry: + %.frame = alloca %33, align 8 ; <%33*> [#uses=3] + %f2 = getelementptr %33* %.frame, i32 0, i32 0 ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"**> [#uses=2] + %this = getelementptr %33* %.frame, i32 0, i32 1 ; <%"tango.text.Regex.TNFA!(dchar).TNFA"**> [#uses=1] + store %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.TNFA!(dchar).TNFA"** %this + %tmp3 = icmp eq %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %f_arg, null ; [#uses=1] + br i1 %tmp3, label %if, label %endif + +if: ; preds = %entry + ret %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* null + +endif: ; preds = %entry + %tmp5 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 10 ; [#uses=1] + store i8* null, i8** %tmp5 + %tmp7 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 11 ; [#uses=1] + store i8* null, i8** %tmp7 + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ) ; [#uses=7] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"** ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"**> [#uses=1] + store %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp8 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp8, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List"** getelementptr (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ, i32 0, i32 2) to i8*), i32 17, i32 1) + %1 = bitcast i8* %tmp8 to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %2 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %2 + %tmp2.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i, %"tango.text.Regex.List!(TNFATransition).List"** %1 + %tmp7.i = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %3 = bitcast i8* %tmp7.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc8.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc9.i = bitcast i8* %.newclass_gc_alloc8.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl10.i = bitcast i8* %.newclass_gc_alloc8.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl10.i + %monitor11.i = getelementptr i8* %.newclass_gc_alloc8.i, i32 4 ; [#uses=1] + %4 = bitcast i8* %monitor11.i to i8** ; [#uses=1] + store i8* null, i8** %4 + %tmp12.i = getelementptr i8* %.newclass_gc_alloc8.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp12.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc9.i, %"tango.text.Regex.List!(TNFATransition).List"** %3 + %tmp17.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %5 = bitcast i8* %tmp17.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc18.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc19.i = bitcast i8* %.newclass_gc_alloc18.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl20.i = bitcast i8* %.newclass_gc_alloc18.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl20.i + %monitor21.i = getelementptr i8* %.newclass_gc_alloc18.i, i32 4 ; [#uses=1] + %6 = bitcast i8* %monitor21.i to i8** ; [#uses=1] + store i8* null, i8** %6 + %tmp22.i = getelementptr i8* %.newclass_gc_alloc18.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp22.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc19.i, %"tango.text.Regex.List!(TNFATransition).List"** %5 + %tmp27.i = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] + %7 = bitcast i8* %tmp27.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc28.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc29.i = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl30.i = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl30.i + %monitor31.i = getelementptr i8* %.newclass_gc_alloc28.i, i32 4 ; [#uses=1] + %8 = bitcast i8* %monitor31.i to i8** ; [#uses=1] + store i8* null, i8** %8 + %tmp32.i = getelementptr i8* %.newclass_gc_alloc28.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp32.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc29.i, %"tango.text.Regex.List!(TNFATransition).List"** %7 + store %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %.newclass_gc, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"** %f2, align 8 + %tmp14 = getelementptr %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %f_arg, i32 0, i32 2 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp15 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp14 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp16 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp15, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp17 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp16 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"f.entries.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp17, i32 0, i32 20 ; [#uses=1] + %f.entries.opApply = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"f.entries.opApply at vtbl", align 4 ; [#uses=1] + %tmp19 = bitcast %33* %.frame to i8* ; [#uses=4] + %tmp20 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp19, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func = insertvalue %"int delegate(ref TNFATransition)" %tmp20, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment15__foreachbody48MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp21 = call fastcc i32 %f.entries.opApply(%"tango.text.Regex.List!(TNFATransition).List"* %tmp15, %"int delegate(ref TNFATransition)" %.func) ; [#uses=0] + %tmp23 = getelementptr %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %f_arg, i32 0, i32 3 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp24 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp23 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp25 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp24, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp26 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp25 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"f.exits.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp26, i32 0, i32 20 ; [#uses=1] + %f.exits.opApply = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"f.exits.opApply at vtbl", align 4 ; [#uses=1] + %tmp29 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp19, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func30 = insertvalue %"int delegate(ref TNFATransition)" %tmp29, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment15__foreachbody49MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp31 = call fastcc i32 %f.exits.opApply(%"tango.text.Regex.List!(TNFATransition).List"* %tmp24, %"int delegate(ref TNFATransition)" %.func30) ; [#uses=0] + %tmp33 = getelementptr %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %f_arg, i32 0, i32 4 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp34 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp33 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp35 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp34, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp36 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp35 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"f.entry_state.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp36, i32 0, i32 20 ; [#uses=1] + %f.entry_state.opApply = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"f.entry_state.opApply at vtbl", align 4 ; [#uses=1] + %tmp39 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp19, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func40 = insertvalue %"int delegate(ref TNFATransition)" %tmp39, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment15__foreachbody50MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp41 = call fastcc i32 %f.entry_state.opApply(%"tango.text.Regex.List!(TNFATransition).List"* %tmp34, %"int delegate(ref TNFATransition)" %.func40) ; [#uses=0] + %tmp43 = getelementptr %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %f_arg, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp44 = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp43 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp45 = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp44, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp46 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp45 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"f.exit_state.opApply at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp46, i32 0, i32 20 ; [#uses=1] + %f.exit_state.opApply = load i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")** %"f.exit_state.opApply at vtbl", align 4 ; [#uses=1] + %tmp49 = insertvalue %"int delegate(ref TNFATransition)" undef, i8* %tmp19, 0 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %.func50 = insertvalue %"int delegate(ref TNFATransition)" %tmp49, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5cloneMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment15__foreachbody51MFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZi, 1 ; <%"int delegate(ref TNFATransition)"> [#uses=1] + %tmp51 = call fastcc i32 %f.exit_state.opApply(%"tango.text.Regex.List!(TNFATransition).List"* %tmp44, %"int delegate(ref TNFATransition)" %.func50) ; [#uses=0] + %tmp52 = load %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"** %f2, align 8 ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + ret %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp52 +} + +define weak_odr fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA19constructSingleCharMFwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg, i32 %c_arg, i32 %type_arg) { +entry: + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ) ; [#uses=8] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=3] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"** getelementptr (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ, i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp1.i.i = getelementptr i8* %.newclass_gc_alloc.i, i32 48 ; [#uses=1] + %1 = bitcast i8* %tmp1.i.i to i32* ; [#uses=1] + store i32 1, i32* %1 + %tmp7.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 9 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp8.i = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp7.i ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp9.i = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp8.i, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp10.i = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp9.i ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"this.transitions.opCatAssign at vtbl.i" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp10.i, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %this.transitions.opCatAssign.i = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"this.transitions.opCatAssign at vtbl.i", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp13.i = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %this.transitions.opCatAssign.i(%"tango.text.Regex.List!(TNFATransition).List"* %tmp8.i, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + %tmp2.i.i = getelementptr i8* %.newclass_gc_alloc.i, i32 12 ; [#uses=1] + %2 = bitcast i8* %tmp2.i.i to i32* ; [#uses=2] + %.len.i.i = load i32* %2 ; [#uses=3] + %tmp3.i.i = add i32 %.len.i.i, 1 ; [#uses=2] + %tmp6.i.i = getelementptr i8* %.newclass_gc_alloc.i, i32 16 ; [#uses=1] + %3 = bitcast i8* %tmp6.i.i to %tango.net.Socket.timeval** ; <%tango.net.Socket.timeval**> [#uses=2] + %.ptr.i.i = load %tango.net.Socket.timeval** %3 ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp7.i.i = bitcast %tango.net.Socket.timeval* %.ptr.i.i to i8* ; [#uses=1] + %.gc_mem.i.i = call i8* @_d_arraysetlengthiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), i32 %tmp3.i.i, i32 %.len.i.i, i8* %tmp7.i.i) ; [#uses=1] + %.gc_mem8.i.i = bitcast i8* %.gc_mem.i.i to %tango.net.Socket.timeval* ; <%tango.net.Socket.timeval*> [#uses=2] + %tmp9.i.i = getelementptr %tango.net.Socket.timeval* %.gc_mem8.i.i, i32 %.len.i.i ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp1015.i.i = bitcast %tango.net.Socket.timeval* %tmp9.i.i to i64* ; [#uses=1] + %4 = zext i32 %c_arg to i64 ; [#uses=2] + %5 = shl i64 %4, 32 ; [#uses=1] + %6 = or i64 %4, %5 ; [#uses=1] + store i64 %6, i64* %tmp1015.i.i, align 1 + store i32 %tmp3.i.i, i32* %2 + store %tango.net.Socket.timeval* %.gc_mem8.i.i, %tango.net.Socket.timeval** %3 + %tmp7 = getelementptr i8* %.newclass_gc_alloc.i, i32 20 ; [#uses=1] + %7 = bitcast i8* %tmp7 to i32* ; [#uses=1] + store i32 %type_arg, i32* %7 + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ) ; [#uses=7] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"** ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"**> [#uses=1] + store %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %8 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %8 + %tmp9 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp9, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List"** getelementptr (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ, i32 0, i32 2) to i8*), i32 17, i32 1) + %9 = bitcast i8* %tmp9 to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i32 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=5] + %.newclass_gc.i33 = bitcast i8* %.newclass_gc_alloc.i32 to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %vtbl.i34 = bitcast i8* %.newclass_gc_alloc.i32 to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i34 + %monitor.i35 = getelementptr i8* %.newclass_gc_alloc.i32, i32 4 ; [#uses=1] + %10 = bitcast i8* %monitor.i35 to i8** ; [#uses=1] + store i8* null, i8** %10 + %tmp2.i = getelementptr i8* %.newclass_gc_alloc.i32, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i33, %"tango.text.Regex.List!(TNFATransition).List"** %9 + %tmp7.i36 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %11 = bitcast i8* %tmp7.i36 to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc8.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc9.i = bitcast i8* %.newclass_gc_alloc8.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl10.i = bitcast i8* %.newclass_gc_alloc8.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl10.i + %monitor11.i = getelementptr i8* %.newclass_gc_alloc8.i, i32 4 ; [#uses=1] + %12 = bitcast i8* %monitor11.i to i8** ; [#uses=1] + store i8* null, i8** %12 + %tmp12.i = getelementptr i8* %.newclass_gc_alloc8.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp12.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc9.i, %"tango.text.Regex.List!(TNFATransition).List"** %11 + %tmp17.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %13 = bitcast i8* %tmp17.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc18.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc19.i = bitcast i8* %.newclass_gc_alloc18.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl20.i = bitcast i8* %.newclass_gc_alloc18.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl20.i + %monitor21.i = getelementptr i8* %.newclass_gc_alloc18.i, i32 4 ; [#uses=1] + %14 = bitcast i8* %monitor21.i to i8** ; [#uses=1] + store i8* null, i8** %14 + %tmp22.i = getelementptr i8* %.newclass_gc_alloc18.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp22.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc19.i, %"tango.text.Regex.List!(TNFATransition).List"** %13 + %tmp27.i = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] + %15 = bitcast i8* %tmp27.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc28.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=5] + %.newclass_gc29.i = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %vtbl30.i = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl30.i + %monitor31.i = getelementptr i8* %.newclass_gc_alloc28.i, i32 4 ; [#uses=1] + %16 = bitcast i8* %monitor31.i to i8** ; [#uses=1] + store i8* null, i8** %16 + %tmp32.i = getelementptr i8* %.newclass_gc_alloc28.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp32.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc29.i, %"tango.text.Regex.List!(TNFATransition).List"** %15 + %tmp17 = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp18 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp17 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"frag.exit_state.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp18, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %frag.exit_state.opCatAssign = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"frag.exit_state.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp21 = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %frag.exit_state.opCatAssign(%"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc29.i, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + %tmp25 = bitcast i8* %.newclass_gc_alloc.i32 to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp26 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp25 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"frag.entries.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp26, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %frag.entries.opCatAssign = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"frag.entries.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp29 = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %frag.entries.opCatAssign(%"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i33, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + ret %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %.newclass_gc +} + +define weak_odr fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFAwE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg, %"Act[]" %chars_arg, i32 %type_arg) { +entry: + %cc = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=4] + %chars_arg13 = extractvalue %"Act[]" %chars_arg, 0 ; [#uses=1] + %chars_arg14 = extractvalue %"Act[]" %chars_arg, 1 ; [#uses=1] + %cc15 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc to i64* ; [#uses=1] + store i64 0, i64* %cc15, align 8 + br label %forcond + +forcond: ; preds = %forbody, %entry + %i.0 = phi i32 [ 0, %entry ], [ %tmp9, %forbody ] ; [#uses=3] + %tmp3 = icmp ult i32 %i.0, %chars_arg13 ; [#uses=1] + br i1 %tmp3, label %forbody, label %endfor + +forbody: ; preds = %forcond + %tmp6 = getelementptr i32* %chars_arg14, i32 %i.0 ; [#uses=1] + %tmp7 = load i32* %tmp6 ; [#uses=1] + %tmp2.i = getelementptr %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc, i32 0, i32 0, i32 0 ; [#uses=2] + %.len.i = load i32* %tmp2.i, align 8 ; [#uses=3] + %tmp3.i = add i32 %.len.i, 1 ; [#uses=2] + %tmp6.i = getelementptr %"tango.text.Regex.CharClass!(dchar).CharClass"* %cc, i32 0, i32 0, i32 1 ; <%tango.net.Socket.timeval**> [#uses=2] + %.ptr.i = load %tango.net.Socket.timeval** %tmp6.i ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp7.i = bitcast %tango.net.Socket.timeval* %.ptr.i to i8* ; [#uses=1] + %.gc_mem.i = call i8* @_d_arraysetlengthiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), i32 %tmp3.i, i32 %.len.i, i8* %tmp7.i) ; [#uses=1] + %.gc_mem8.i = bitcast i8* %.gc_mem.i to %tango.net.Socket.timeval* ; <%tango.net.Socket.timeval*> [#uses=2] + %tmp9.i = getelementptr %tango.net.Socket.timeval* %.gc_mem8.i, i32 %.len.i ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp1116.i = bitcast %tango.net.Socket.timeval* %tmp9.i to i64* ; [#uses=1] + %0 = zext i32 %tmp7 to i64 ; [#uses=2] + %1 = shl i64 %0, 32 ; [#uses=1] + %2 = or i64 %0, %1 ; [#uses=1] + store i64 %2, i64* %tmp1116.i, align 1 + store i32 %tmp3.i, i32* %tmp2.i, align 8 + store %tango.net.Socket.timeval* %.gc_mem8.i, %tango.net.Socket.timeval** %tmp6.i + %tmp9 = add i32 %i.0, 1 ; [#uses=1] + br label %forcond + +endfor: ; preds = %forcond + %tmp12 = call fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* byval %cc, i32 %type_arg) ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + ret %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %tmp12 +} + +define weak_odr fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA14constructCharsMFS5tango4text5Regex16__T9CharClassTwZ9CharClassE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* nocapture %.this_arg, %"tango.text.Regex.CharClass!(dchar).CharClass"* nocapture byval %charclass_arg, i32 %type_arg) { +entry: + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ) ; [#uses=7] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=3] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"** getelementptr (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ, i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp1.i.i = getelementptr i8* %.newclass_gc_alloc.i, i32 48 ; [#uses=1] + %1 = bitcast i8* %tmp1.i.i to i32* ; [#uses=1] + store i32 1, i32* %1 + %tmp7.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 9 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp8.i = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp7.i ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp9.i = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp8.i, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp10.i = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp9.i ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"this.transitions.opCatAssign at vtbl.i" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp10.i, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %this.transitions.opCatAssign.i = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"this.transitions.opCatAssign at vtbl.i", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp13.i = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %this.transitions.opCatAssign.i(%"tango.text.Regex.List!(TNFATransition).List"* %tmp8.i, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + %tmp4 = getelementptr i8* %.newclass_gc_alloc.i, i32 20 ; [#uses=1] + %2 = bitcast i8* %tmp4 to i32* ; [#uses=1] + store i32 %type_arg, i32* %2 + %3 = bitcast %"tango.text.Regex.CharClass!(dchar).CharClass"* %charclass_arg to i64* ; [#uses=1] + %srcval = load i64* %3, align 1 ; [#uses=2] + %tmp51 = lshr i64 %srcval, 32 ; [#uses=1] + %tmp52 = trunc i64 %tmp51 to i32 ; [#uses=1] + %tmp53 = insertvalue %"byte[]" undef, i32 %tmp52, 0 ; <%"byte[]"> [#uses=1] + %tmp54 = trunc i64 %srcval to i32 ; [#uses=1] + %tmp55 = inttoptr i32 %tmp54 to i8* ; [#uses=1] + %tmp56 = insertvalue %"byte[]" %tmp53, i8* %tmp55, 1 ; <%"byte[]"> [#uses=1] + %tmp5.i = call %"byte[]" @_adDupT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), %"byte[]" %tmp56) ; <%"byte[]"> [#uses=2] + %tmp6.i = extractvalue %"byte[]" %tmp5.i, 0 ; [#uses=1] + %tmp8.i33 = extractvalue %"byte[]" %tmp5.i, 1 ; [#uses=1] + %tmp59 = zext i32 %tmp6.i to i64 ; [#uses=1] + %tmp60 = shl i64 %tmp59, 32 ; [#uses=1] + %tmp = ptrtoint i8* %tmp8.i33 to i32 ; [#uses=1] + %tmp57 = zext i32 %tmp to i64 ; [#uses=1] + %ins = or i64 %tmp60, %tmp57 ; [#uses=1] + %tmp7 = getelementptr i8* %.newclass_gc_alloc.i, i32 12 ; [#uses=2] + %tmp25.i = bitcast i8* %tmp7 to i64* ; [#uses=1] + store i64 %ins, i64* %tmp25.i, align 1 + %4 = bitcast i8* %tmp7 to %"tango.text.Regex.CharClass!(dchar).CharClass"* ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=1] + call fastcc void @_D5tango4text5Regex16__T9CharClassTwZ9CharClass8optimizeMFZv(%"tango.text.Regex.CharClass!(dchar).CharClass"* %4) + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ) ; [#uses=7] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"** ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"**> [#uses=1] + store %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %5 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %5 + %tmp10 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] + call void @llvm.memcpy.i32(i8* %tmp10, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List"** getelementptr (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ, i32 0, i32 2) to i8*), i32 17, i32 1) + %6 = bitcast i8* %tmp10 to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc.i39 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=5] + %.newclass_gc.i40 = bitcast i8* %.newclass_gc_alloc.i39 to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %vtbl.i41 = bitcast i8* %.newclass_gc_alloc.i39 to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl.i41 + %monitor.i42 = getelementptr i8* %.newclass_gc_alloc.i39, i32 4 ; [#uses=1] + %7 = bitcast i8* %monitor.i42 to i8** ; [#uses=1] + store i8* null, i8** %7 + %tmp2.i = getelementptr i8* %.newclass_gc_alloc.i39, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp2.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i40, %"tango.text.Regex.List!(TNFATransition).List"** %6 + %tmp7.i43 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] + %8 = bitcast i8* %tmp7.i43 to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc8.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc9.i = bitcast i8* %.newclass_gc_alloc8.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl10.i = bitcast i8* %.newclass_gc_alloc8.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl10.i + %monitor11.i = getelementptr i8* %.newclass_gc_alloc8.i, i32 4 ; [#uses=1] + %9 = bitcast i8* %monitor11.i to i8** ; [#uses=1] + store i8* null, i8** %9 + %tmp12.i = getelementptr i8* %.newclass_gc_alloc8.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp12.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc9.i, %"tango.text.Regex.List!(TNFATransition).List"** %8 + %tmp17.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] + %10 = bitcast i8* %tmp17.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc18.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=4] + %.newclass_gc19.i = bitcast i8* %.newclass_gc_alloc18.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=1] + %vtbl20.i = bitcast i8* %.newclass_gc_alloc18.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl20.i + %monitor21.i = getelementptr i8* %.newclass_gc_alloc18.i, i32 4 ; [#uses=1] + %11 = bitcast i8* %monitor21.i to i8** ; [#uses=1] + store i8* null, i8** %11 + %tmp22.i = getelementptr i8* %.newclass_gc_alloc18.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp22.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc19.i, %"tango.text.Regex.List!(TNFATransition).List"** %10 + %tmp27.i = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] + %12 = bitcast i8* %tmp27.i to %"tango.text.Regex.List!(TNFATransition).List"** ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %.newclass_gc_alloc28.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ) ; [#uses=5] + %.newclass_gc29.i = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List"* ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %vtbl30.i = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + store %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %vtbl30.i + %monitor31.i = getelementptr i8* %.newclass_gc_alloc28.i, i32 4 ; [#uses=1] + %13 = bitcast i8* %monitor31.i to i8** ; [#uses=1] + store i8* null, i8** %13 + %tmp32.i = getelementptr i8* %.newclass_gc_alloc28.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp32.i, i8* bitcast (i32* getelementptr (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ, i32 0, i32 2) to i8*), i32 12, i32 1) + store %"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc29.i, %"tango.text.Regex.List!(TNFATransition).List"** %12 + %tmp18 = bitcast i8* %.newclass_gc_alloc28.i to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp19 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp18 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"frag.exit_state.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp19, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %frag.exit_state.opCatAssign = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"frag.exit_state.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp22 = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %frag.exit_state.opCatAssign(%"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc29.i, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + %tmp26 = bitcast i8* %.newclass_gc_alloc.i39 to %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp27 = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp26 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"frag.entries.opCatAssign at vtbl" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp27, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %frag.entries.opCatAssign = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"frag.entries.opCatAssign at vtbl", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp30 = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %frag.entries.opCatAssign(%"tango.text.Regex.List!(TNFATransition).List"* %.newclass_gc.i40, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + ret %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* %.newclass_gc +} + +define weak_odr fastcc %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA18constructCharClassMFE5tango4text5Regex16__T9PredicateTwZ9Predicate4TypeZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment(%"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 %type_arg) { +entry: + %tmp.i419 = alloca i32, align 4 ; [#uses=2] + %tmp.i359 = alloca i32, align 4 ; [#uses=2] + %tmp.i213 = alloca i32, align 4 ; [#uses=2] + %tmp162 = alloca %"tango.text.Regex.CharClass!(dchar).CharClass", align 8 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=5] + %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ) ; [#uses=17] + %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=3] + %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %object.ModuleInfo.__vtbl** ; <%object.ModuleInfo.__vtbl**> [#uses=1] + store %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, %object.ModuleInfo.__vtbl** %vtbl.i + %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] + %0 = bitcast i8* %monitor.i to i8** ; [#uses=1] + store i8* null, i8** %0 + %tmp.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp.i, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"** getelementptr (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ, i32 0, i32 2) to i8*), i32 44, i32 1) + %tmp1.i.i = getelementptr i8* %.newclass_gc_alloc.i, i32 48 ; [#uses=1] + %1 = bitcast i8* %tmp1.i.i to i32* ; [#uses=1] + store i32 1, i32* %1 + %tmp7.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 9 ; <%"tango.text.Regex.List!(TNFATransition).List"**> [#uses=1] + %tmp8.i = load %"tango.text.Regex.List!(TNFATransition).List"** %tmp7.i ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] + %tmp9.i = getelementptr %"tango.text.Regex.List!(TNFATransition).List"* %tmp8.i, i32 0, i32 0 ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"**> [#uses=1] + %tmp10.i = load %"tango.text.Regex.List!(TNFATransition).List.__vtbl"** %tmp9.i ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=1] + %"this.transitions.opCatAssign at vtbl.i" = getelementptr %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* %tmp10.i, i32 0, i32 5 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)**> [#uses=1] + %this.transitions.opCatAssign.i = load %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)** %"this.transitions.opCatAssign at vtbl.i", align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*> [#uses=1] + %tmp13.i = call fastcc %"tango.text.Regex.List!(TNFATransition).List"* %this.transitions.opCatAssign.i(%"tango.text.Regex.List!(TNFATransition).List"* %tmp8.i, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* %.newclass_gc.i) ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=0] + %tmp2.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 8 ; [#uses=13] + %tmp3.i = load i32* %tmp2.i ; [#uses=2] + store i32 %tmp3.i, i32* %tmp.i213 + %tmp6.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=8] + %.len.i = load i32* %tmp6.i ; [#uses=1] + %tmp8.i214 = icmp ult i32 %tmp3.i, %.len.i ; [#uses=1] + br i1 %tmp8.i214, label %if.i, label %forcond + +if.i: ; preds = %entry + %tmp10.i215 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i = load %"Act[]"* %tmp10.i215 ; <%"Act[]"> [#uses=1] + %tmp12.i = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i, i32* %tmp.i213) ; [#uses=1] + %phitmp470 = icmp eq i32 %tmp12.i, 94 ; [#uses=1] + br i1 %phitmp470, label %if, label %forcond + +if: ; preds = %if.i + %tmp1.i = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=1] + %tmp4.i = load i32* %tmp2.i ; [#uses=2] + store i32 %tmp4.i, i32* %tmp1.i + %.len.i219 = load i32* %tmp6.i ; [#uses=1] + %tmp11.i220 = icmp ult i32 %tmp4.i, %.len.i219 ; [#uses=1] + br i1 %tmp11.i220, label %if.i222, label %forcond + +if.i222: ; preds = %if + %tmp13.i221 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i = load %"Act[]"* %tmp13.i221 ; <%"Act[]"> [#uses=1] + %tmp17.i = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i, i32* %tmp2.i) ; [#uses=0] + br label %forcond + +forcond: ; preds = %if137, %default135, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit347, %if19, %if.i222, %if, %if.i, %entry + %negated.0 = phi i1 [ false, %if.i ], [ %negated.0, %default135 ], [ %negated.0, %if137 ], [ %negated.0, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit347 ], [ %negated.0, %if19 ], [ true, %if ], [ true, %if.i222 ], [ false, %entry ] ; [#uses=5] + %last.1 = phi i32 [ 65535, %if.i ], [ %last.1, %if19 ], [ %last.1, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit347 ], [ %c.0, %if137 ], [ %c.0, %default135 ], [ 65535, %if ], [ 65535, %if.i222 ], [ 65535, %entry ] ; [#uses=9] + %have_range_start.1 = phi i1 [ false, %if.i ], [ %have_range_start.1, %if19 ], [ false, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit347 ], [ true, %if137 ], [ true, %default135 ], [ false, %if ], [ false, %if.i222 ], [ false, %entry ] ; [#uses=3] + %first_char.0 = phi i1 [ true, %if.i ], [ false, %default135 ], [ false, %if137 ], [ false, %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit347 ], [ false, %if19 ], [ true, %if ], [ true, %if.i222 ], [ true, %entry ] ; [#uses=1] + %.len.i434 = load i32* %tmp6.i ; [#uses=1] + %tmp5.i435 = load i32* %tmp2.i ; [#uses=2] + %tmp6.i436 = icmp ult i32 %tmp5.i435, %.len.i434 ; [#uses=1] + br i1 %tmp6.i436, label %andand, label %endfor + +andand: ; preds = %forcond + store i32 %tmp5.i435, i32* %tmp.i419 + %tmp10.i425 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i426 = load %"Act[]"* %tmp10.i425 ; <%"Act[]"> [#uses=1] + %tmp12.i427 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i426, i32* %tmp.i419) ; [#uses=1] + %phitmp469 = icmp eq i32 %tmp12.i427, 93 ; [#uses=1] + br i1 %phitmp469, label %endfor, label %forbody + +forbody: ; preds = %andand + %tmp1.i406 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 7 ; [#uses=3] + %tmp4.i408 = load i32* %tmp2.i ; [#uses=2] + store i32 %tmp4.i408, i32* %tmp1.i406 + %.len.i410 = load i32* %tmp6.i ; [#uses=1] + %tmp11.i411 = icmp ult i32 %tmp4.i408, %.len.i410 ; [#uses=1] + br i1 %tmp11.i411, label %if.i415, label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit417 + +if.i415: ; preds = %forbody + %tmp13.i412 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp14.i413 = load %"Act[]"* %tmp13.i412 ; <%"Act[]"> [#uses=1] + %tmp17.i414 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp14.i413, i32* %tmp2.i) ; [#uses=1] + br label %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit417 + +_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit417: ; preds = %if.i415, %forbody + %tmp16418 = phi i32 [ %tmp17.i414, %if.i415 ], [ 0, %forbody ] ; [#uses=3] + switch i32 %tmp16418, label %default135 [ + i32 45, label %case + i32 92, label %case89 + ] + +case: ; preds = %_D5tango4text5Regex11__T4TNFATwZ4TNFA11readPatternMFZw.exit417 + br i1 %first_char.0, label %if19, label %endif20 + +if19: ; preds = %case + %tmp2.i.i394 = getelementptr i8* %.newclass_gc_alloc.i, i32 12 ; [#uses=1] + %2 = bitcast i8* %tmp2.i.i394 to i32* ; [#uses=2] + %.len.i.i395 = load i32* %2 ; [#uses=3] + %tmp3.i.i396 = add i32 %.len.i.i395, 1 ; [#uses=2] + %tmp6.i.i397 = getelementptr i8* %.newclass_gc_alloc.i, i32 16 ; [#uses=1] + %3 = bitcast i8* %tmp6.i.i397 to %tango.net.Socket.timeval** ; <%tango.net.Socket.timeval**> [#uses=2] + %.ptr.i.i398 = load %tango.net.Socket.timeval** %3 ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp7.i.i399 = bitcast %tango.net.Socket.timeval* %.ptr.i.i398 to i8* ; [#uses=1] + %.gc_mem.i.i400 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*), i32 %tmp3.i.i396, i32 %.len.i.i395, i8* %tmp7.i.i399) ; [#uses=1] + %.gc_mem8.i.i401 = bitcast i8* %.gc_mem.i.i400 to %tango.net.Socket.timeval* ; <%tango.net.Socket.timeval*> [#uses=2] + %tmp9.i.i402 = getelementptr %tango.net.Socket.timeval* %.gc_mem8.i.i401, i32 %.len.i.i395 ; <%tango.net.Socket.timeval*> [#uses=1] + %tmp1015.i.i403 = bitcast %tango.net.Socket.timeval* %tmp9.i.i402 to i64* ; [#uses=1] + %4 = zext i32 %tmp16418 to i64 ; [#uses=2] + %5 = shl i64 %4, 32 ; [#uses=1] + %6 = or i64 %4, %5 ; [#uses=1] + store i64 %6, i64* %tmp1015.i.i403, align 1 + store i32 %tmp3.i.i396, i32* %2 + store %tango.net.Socket.timeval* %.gc_mem8.i.i401, %tango.net.Socket.timeval** %3 + br label %forcond + +endif20: ; preds = %case + br i1 %have_range_start.1, label %else, label %if25 + +if25: ; preds = %endif20 + %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl = bitcast i8* %.newclass_gc_alloc to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl + %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] + %7 = bitcast i8* %monitor to i8** ; [#uses=1] + store i8* null, i8** %7 + %tmp27 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp27, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %tmp32 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp33 = load %"Act[]"* %tmp32 ; <%"Act[]"> [#uses=1] + %tmp34 = call fastcc %"byte[]" @_D5tango4text7convert3Utf8toStringFAwAaPkZAa(%"Act[]" %tmp33, %"byte[]" zeroinitializer, i32* null) ; <%"byte[]"> [#uses=2] + %.len = extractvalue %"byte[]" %tmp34, 0 ; [#uses=4] + %tmp35 = add i32 %.len, 44 ; [#uses=3] + %.nongc_mem = alloca i8, i32 %tmp35, align 1 ; [#uses=3] + %.ptr = extractvalue %"byte[]" %tmp34, 1 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %.nongc_mem, i8* getelementptr ([45 x i8]* @.str225, i32 0, i32 0), i32 44, i32 1) + %tmp36 = getelementptr i8* %.nongc_mem, i32 44 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp36, i8* %.ptr, i32 %.len, i32 1) + %tmp38 = add i32 %.len, 45 ; [#uses=2] + %.nongc_mem471 = alloca i8, i32 %tmp38, align 1 ; [#uses=3] + call void @llvm.memcpy.i32(i8* %.nongc_mem471, i8* %.nongc_mem, i32 %tmp35, i32 1) + %tmp41 = getelementptr i8* %.nongc_mem471, i32 %tmp35 ; [#uses=1] + store i8 34, i8* %tmp41, align 1 + %tmp2.i379 = add i32 %.len, 53 ; [#uses=2] + %.gc_mem.i380 = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp2.i379) ; [#uses=3] + %.gc_mem12.i381 = bitcast i8* %.gc_mem.i380 to i64* ; [#uses=1] + %tmp.i382 = load i64* bitcast ([9 x i8]* @.str280 to i64*), align 8 ; [#uses=1] + store i64 %tmp.i382, i64* %.gc_mem12.i381, align 1 + %tmp4.i383 = getelementptr i8* %.gc_mem.i380, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp4.i383, i8* %.nongc_mem471, i32 %tmp38, i32 1) + %tmp6.i384 = insertvalue %"byte[]" undef, i32 %tmp2.i379, 0 ; <%"byte[]"> [#uses=1] + %tmp7.i385 = insertvalue %"byte[]" %tmp6.i384, i8* %.gc_mem.i380, 1 ; <%"byte[]"> [#uses=1] + %tmp8.i386 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc, %"byte[]" %tmp7.i385, %object.Exception* null) ; <%object.Exception*> [#uses=0] + %tmp45 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] + call void @_d_throw_exception(%object.Object* %tmp45) + unreachable + +else: ; preds = %endif20 + %.len.i374 = load i32* %tmp6.i ; [#uses=1] + %tmp5.i375 = load i32* %tmp2.i ; [#uses=2] + %tmp6.i376 = icmp ult i32 %tmp5.i375, %.len.i374 ; [#uses=1] + br i1 %tmp6.i376, label %oror, label %if51 + +oror: ; preds = %else + store i32 %tmp5.i375, i32* %tmp.i359 + %tmp10.i365 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp11.i366 = load %"Act[]"* %tmp10.i365 ; <%"Act[]"> [#uses=1] + %tmp12.i367 = call fastcc i32 @_D5tango4text5Regex6decodeFAwKkZw(%"Act[]" %tmp11.i366, i32* %tmp.i359) ; [#uses=1] + %phitmp = icmp eq i32 %tmp12.i367, 93 ; [#uses=1] + br i1 %phitmp, label %if51, label %else53 + +if51: ; preds = %oror, %else + %.newclass_gc_alloc54 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex15RegExpException7__ClassZ) ; [#uses=5] + %.newclass_gc55 = bitcast i8* %.newclass_gc_alloc54 to %object.Exception* ; <%object.Exception*> [#uses=1] + %vtbl56 = bitcast i8* %.newclass_gc_alloc54 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] + store %object.Exception.__vtbl* @_D5tango4text5Regex15RegExpException6__vtblZ, %object.Exception.__vtbl** %vtbl56 + %monitor57 = getelementptr i8* %.newclass_gc_alloc54, i32 4 ; [#uses=1] + %8 = bitcast i8* %monitor57 to i8** ; [#uses=1] + store i8* null, i8** %8 + %tmp58 = getelementptr i8* %.newclass_gc_alloc54, i32 8 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp58, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%28* @_D5tango4text5Regex15RegExpException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) + %tmp63 = getelementptr %"tango.text.Regex.TNFA!(dchar).TNFA"* %.this_arg, i32 0, i32 2 ; <%"Act[]"*> [#uses=1] + %tmp64 = load %"Act[]"* %tmp63 ; <%"Act[]"> [#uses=1] + %tmp65 = call fastcc %"byte[]" @_D5tango4text7convert3Utf8toStringFAwAaPkZAa(%"Act[]" %tmp64, %"byte[]" zeroinitializer, i32* null) ; <%"byte[]"> [#uses=2] + %.len66 = extractvalue %"byte[]" %tmp65, 0 ; [#uses=4] + %tmp67 = add i32 %.len66, 42 ; [#uses=3] + %.nongc_mem472 = alloca i8, i32 %tmp67, align 1 ; [#uses=3] + %.ptr69 = extractvalue %"byte[]" %tmp65, 1 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %.nongc_mem472, i8* getelementptr ([43 x i8]* @.str227, i32 0, i32 0), i32 42, i32 1) + %tmp70 = getelementptr i8* %.nongc_mem472, i32 42 ; [#uses=1] + call void @llvm.memcpy.i32(i8* %tmp70, i8* %.ptr69, i32 %.len66, i32 1) + %tmp72 = add i32 %.len66, 43 ; [#uses=2] + %.nongc_mem473 = alloca i8, i32 %tmp72, align 1 ; [#uses=3] + call void @llvm.memcpy.i32(i8* %.nongc_mem473, i8* %.nongc_mem472, i32 %tmp67, i32 1) + %tmp75 = getelementptr i8* %.nongc_mem473, i32 %tmp67 ; [#uses=1] + store i8 34, i8* %tmp75, align 1 + %tmp2.i351 = add i32 %.len66, 51 ; [#uses=2] + %.gc_mem.i352 = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp2.i351) ; [#uses=3] + %.gc_mem12.i353 = bitcast i8* %.gc_mem.i352 to i64* ; [#uses=1] [... 7277 lines stripped ...] From eli.friedman at gmail.com Mon Jul 13 17:31:30 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 22:31:30 -0000 Subject: [llvm-commits] [llvm] r75534 - /llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll Message-ID: <200907132231.n6DMVU15004466@zion.cs.uiuc.edu> Author: efriedma Date: Mon Jul 13 17:31:30 2009 New Revision: 75534 URL: http://llvm.org/viewvc/llvm-project?rev=75534&view=rev Log: Fix bug in run-line. Modified: llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll Modified: llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll?rev=75534&r1=75533&r2=75534&view=diff ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll (original) +++ llvm/trunk/test/Transforms/InstCombine/zext-bool-add-sub.ll Mon Jul 13 17:31:30 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {zext } | count 0 +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep zext define i32 @a(i1 %x) { entry: @@ -27,5 +27,3 @@ %res = sub i32 3, %y ret i32 %res } - - From daniel at zuster.org Mon Jul 13 17:31:58 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 13 Jul 2009 22:31:58 -0000 Subject: [llvm-commits] [llvm] r75535 - /llvm/trunk/utils/NewNightlyTest.pl Message-ID: <200907132231.n6DMVxSg004490@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Jul 13 17:31:58 2009 New Revision: 75535 URL: http://llvm.org/viewvc/llvm-project?rev=75535&view=rev Log: NewNightlyTest.pl - Add -configure-args option. - For adding arbitrary arguments to pass to configure. Modified: llvm/trunk/utils/NewNightlyTest.pl Modified: llvm/trunk/utils/NewNightlyTest.pl URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/NewNightlyTest.pl?rev=75535&r1=75534&r2=75535&view=diff ============================================================================== --- llvm/trunk/utils/NewNightlyTest.pl (original) +++ llvm/trunk/utils/NewNightlyTest.pl Mon Jul 13 17:31:58 2009 @@ -181,6 +181,8 @@ shift; next; } if (/^-with-externals$/) { $CONFIGUREARGS .= " --with-externals=$ARGV[0]"; shift; next; } + if (/^-configure-args$/) { $CONFIGUREARGS .= " $ARGV[0]"; + shift; next; } if (/^-submit-server/) { $SUBMITSERVER = "$ARGV[0]"; shift; next; } if (/^-submit-script/) { $SUBMITSCRIPT = "$ARGV[0]"; shift; next; } if (/^-submit-aux/) { $SUBMITAUX = "$ARGV[0]"; shift; next; } From clattner at apple.com Mon Jul 13 17:35:35 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 15:35:35 -0700 Subject: [llvm-commits] [llvm] r75531 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/zext-bool-add-sub.ll In-Reply-To: <200907132227.n6DMRqOR004313@zion.cs.uiuc.edu> References: <200907132227.n6DMRqOR004313@zion.cs.uiuc.edu> Message-ID: On Jul 13, 2009, at 3:27 PM, Eli Friedman wrote: > URL: http://llvm.org/viewvc/llvm-project?rev=75531&view=rev > Log: > Canonicalize boolean +/- a constant to a select. > > (I think it's reasonably clear that we want to have a canonical form > for > constructs like this; if anyone thinks that a select is not the best > canonical form, please tell me.) I think "select c, -1, 0" -> "sext c" and "select c, 0, -1" -> "sext ! c" would make sense, what do you think? > + // C - zext(bool) -> bool ? C - 1 : C > + if (ZExtInst *ZI = dyn_cast(Op1)) > + if (ZI->getSrcTy() == Type::Int1Ty) > + return SelectInst::Create(ZI->getOperand(0), SubOne(C, > Context), C); This one seems reasonable though, -Chris From clattner at apple.com Mon Jul 13 17:36:28 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 15:36:28 -0700 Subject: [llvm-commits] [llvm] r75533 [2/2] - in /llvm/trunk/test: Analysis/ScalarEvolution/avoid-infinite-recursion-0.ll Analysis/ScalarEvolution/avoid-infinite-recursion-1.ll CodeGen/PowerPC/tango.net.ftp.FtpClient.ll In-Reply-To: <200907132230.n6DMUX13004427@zion.cs.uiuc.edu> References: <200907132230.n6DMUX13004427@zion.cs.uiuc.edu> Message-ID: <970B9CCA-6105-435C-9F3A-90C8A2ACFC8B@apple.com> On Jul 13, 2009, at 3:30 PM, Dan Gohman wrote: > Added: llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll?rev=75533&view=auto > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll (added) > +++ llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Mon > Jul 13 17:30:31 2009 > @@ -0,0 +1,17396 @@ > +; RUN: llvm-as < %s | llc > +; PR4534 > + Dan, this testcase is huge. Can you cut it down? If not, we shouldn't include it. -Chris From resistor at mac.com Mon Jul 13 17:40:33 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 22:40:33 -0000 Subject: [llvm-commits] [llvm] r75536 - /llvm/trunk/tools/bugpoint/ExtractFunction.cpp Message-ID: <200907132240.n6DMeXmx004816@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 17:40:32 2009 New Revision: 75536 URL: http://llvm.org/viewvc/llvm-project?rev=75536&view=rev Log: Fix the build. Modified: llvm/trunk/tools/bugpoint/ExtractFunction.cpp Modified: llvm/trunk/tools/bugpoint/ExtractFunction.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ExtractFunction.cpp?rev=75536&r1=75535&r2=75536&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/ExtractFunction.cpp (original) +++ llvm/trunk/tools/bugpoint/ExtractFunction.cpp Mon Jul 13 17:40:32 2009 @@ -15,6 +15,7 @@ #include "BugDriver.h" #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" +#include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/PassManager.h" #include "llvm/Pass.h" From bruno.cardoso at gmail.com Mon Jul 13 17:40:39 2009 From: bruno.cardoso at gmail.com (Bruno Cardoso Lopes) Date: Mon, 13 Jul 2009 22:40:39 -0000 Subject: [llvm-commits] [llvm] r75537 - in /llvm/trunk/lib/CodeGen: ELF.h ELFCodeEmitter.cpp ELFWriter.cpp ELFWriter.h Message-ID: <200907132240.n6DMedFf004854@zion.cs.uiuc.edu> Author: bruno Date: Mon Jul 13 17:40:39 2009 New Revision: 75537 URL: http://llvm.org/viewvc/llvm-project?rev=75537&view=rev Log: Cleanup the global emission and refactor some code Modified: llvm/trunk/lib/CodeGen/ELF.h llvm/trunk/lib/CodeGen/ELFCodeEmitter.cpp llvm/trunk/lib/CodeGen/ELFWriter.cpp llvm/trunk/lib/CodeGen/ELFWriter.h Modified: llvm/trunk/lib/CodeGen/ELF.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELF.h?rev=75537&r1=75536&r2=75537&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ELF.h (original) +++ llvm/trunk/lib/CodeGen/ELF.h Mon Jul 13 17:40:39 2009 @@ -126,13 +126,9 @@ /// added to logical symbol table for the module. This is eventually /// turned into a real symbol table in the file. struct ELFSym { - // The global value this corresponds to. Global symbols can be on of the - // 3 types : if this symbol has a zero initializer, it is common or should - // be placed in bss section otherwise it's a constant. + // The global value this symbol matches. This should be null if the symbol + // is not a global value. const GlobalValue *GV; - bool IsCommon; - bool IsBss; - bool IsConstant; // ELF specific fields unsigned NameIdx; // Index in .strtab of name, once emitted. @@ -145,18 +141,18 @@ // Symbol index into the Symbol table unsigned SymTabIdx; - enum { + enum { STB_LOCAL = 0, STB_GLOBAL = 1, STB_WEAK = 2 }; - enum { + enum { STT_NOTYPE = 0, STT_OBJECT = 1, STT_FUNC = 2, STT_SECTION = 3, - STT_FILE = 4 + STT_FILE = 4 }; enum { @@ -166,8 +162,7 @@ STV_PROTECTED = 3 // Visible in other components but not preemptable }; - ELFSym(const GlobalValue *gv) : GV(gv), IsCommon(false), IsBss(false), - IsConstant(false), NameIdx(0), Value(0), + ELFSym(const GlobalValue *gv) : GV(gv), NameIdx(0), Value(0), Size(0), Info(0), Other(STV_DEFAULT), SectionIdx(ELFSection::SHN_UNDEF), SymTabIdx(0) {} Modified: llvm/trunk/lib/CodeGen/ELFCodeEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFCodeEmitter.cpp?rev=75537&r1=75536&r2=75537&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ELFCodeEmitter.cpp (original) +++ llvm/trunk/lib/CodeGen/ELFCodeEmitter.cpp Mon Jul 13 17:40:39 2009 @@ -62,7 +62,7 @@ const Function *F = MF.getFunction(); ELFSym FnSym(F); FnSym.setType(ELFSym::STT_FUNC); - FnSym.setBind(EW.getGlobalELFLinkage(F)); + FnSym.setBind(EW.getGlobalELFBinding(F)); FnSym.setVisibility(EW.getGlobalELFVisibility(F)); FnSym.SectionIdx = ES->SectionIdx; FnSym.Size = ES->getCurrentPCOffset()-FnStartOff; Modified: llvm/trunk/lib/CodeGen/ELFWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.cpp?rev=75537&r1=75536&r2=75537&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ELFWriter.cpp (original) +++ llvm/trunk/lib/CodeGen/ELFWriter.cpp Mon Jul 13 17:40:39 2009 @@ -145,6 +145,7 @@ return false; } +// getGlobalELFVisibility - Returns the ELF specific visibility type unsigned ELFWriter::getGlobalELFVisibility(const GlobalValue *GV) { switch (GV->getVisibility()) { default: @@ -156,11 +157,11 @@ case GlobalValue::ProtectedVisibility: return ELFSym::STV_PROTECTED; } - return 0; } -unsigned ELFWriter::getGlobalELFLinkage(const GlobalValue *GV) { +// getGlobalELFBinding - Returns the ELF specific binding type +unsigned ELFWriter::getGlobalELFBinding(const GlobalValue *GV) { if (GV->hasInternalLinkage()) return ELFSym::STB_LOCAL; @@ -170,8 +171,19 @@ return ELFSym::STB_GLOBAL; } -// getElfSectionFlags - Get the ELF Section Header based on the -// flags defined in ELFTargetAsmInfo. +// getGlobalELFType - Returns the ELF specific type for a global +unsigned ELFWriter::getGlobalELFType(const GlobalValue *GV) { + if (GV->isDeclaration()) + return ELFSym::STT_NOTYPE; + + if (isa(GV)) + return ELFSym::STT_FUNC; + + return ELFSym::STT_OBJECT; +} + +// getElfSectionFlags - Get the ELF Section Header flags based +// on the flags defined in ELFTargetAsmInfo. unsigned ELFWriter::getElfSectionFlags(unsigned Flags) { unsigned ElfSectionFlags = ELFSection::SHF_ALLOC; @@ -189,92 +201,99 @@ return ElfSectionFlags; } -// For global symbols without a section, return the Null section as a -// placeholder -ELFSection &ELFWriter::getGlobalSymELFSection(const GlobalVariable *GV, - ELFSym &Sym) { - // If this is a declaration, the symbol does not have a section. - if (!GV->hasInitializer()) { - Sym.SectionIdx = ELFSection::SHN_UNDEF; - return getNullSection(); - } +// isELFUndefSym - the symbol has no section and must be placed in +// the symbol table with a reference to the null section. +static bool isELFUndefSym(const GlobalValue *GV) { + return GV->isDeclaration(); +} - // Get the name and flags of the section for the global - const Section *S = TAI->SectionForGlobal(GV); - unsigned SectionType = ELFSection::SHT_PROGBITS; - unsigned SectionFlags = getElfSectionFlags(S->getFlags()); - DOUT << "Section " << S->getName() << " for global " << GV->getName() << "\n"; +// isELFBssSym - for an undef or null value, the symbol must go to a bss +// section if it's not weak for linker, otherwise it's a common sym. +static bool isELFBssSym(const GlobalValue *GV) { + return (!GV->isDeclaration() && + (GV->isNullValue() || isa(GV)) && + !GV->isWeakForLinker()); +} - const TargetData *TD = TM.getTargetData(); - unsigned Align = TD->getPreferredAlignment(GV); - Constant *CV = GV->getInitializer(); +// isELFCommonSym - for an undef or null value, the symbol must go to a +// common section if it's weak for linker, otherwise bss. +static bool isELFCommonSym(const GlobalValue *GV) { + return (!GV->isDeclaration() && + (GV->isNullValue() || isa(GV)) + && GV->isWeakForLinker()); +} - // If this global has a zero initializer, go to .bss or common section. - // Variables are part of the common block if they are zero initialized - // and allowed to be merged with other symbols. - if (CV->isNullValue() || isa(CV)) { - SectionType = ELFSection::SHT_NOBITS; - ELFSection &ElfS = getSection(S->getName(), SectionType, SectionFlags); - if (GV->hasLinkOnceLinkage() || GV->hasWeakLinkage() || - GV->hasCommonLinkage()) { - Sym.SectionIdx = ELFSection::SHN_COMMON; - Sym.IsCommon = true; - ElfS.Align = 1; - return ElfS; - } - Sym.IsBss = true; - Sym.SectionIdx = ElfS.SectionIdx; - if (Align) ElfS.Size = (ElfS.Size + Align-1) & ~(Align-1); - ElfS.Align = std::max(ElfS.Align, Align); - return ElfS; - } - - Sym.IsConstant = true; - ELFSection &ElfS = getSection(S->getName(), SectionType, SectionFlags); - Sym.SectionIdx = ElfS.SectionIdx; - ElfS.Align = std::max(ElfS.Align, Align); - return ElfS; -} - -void ELFWriter::EmitFunctionDeclaration(const Function *F) { - ELFSym GblSym(F); - GblSym.setBind(ELFSym::STB_GLOBAL); - GblSym.setType(ELFSym::STT_NOTYPE); - GblSym.setVisibility(ELFSym::STV_DEFAULT); - GblSym.SectionIdx = ELFSection::SHN_UNDEF; - SymbolList.push_back(GblSym); -} - -void ELFWriter::EmitGlobalVar(const GlobalVariable *GV) { - unsigned SymBind = getGlobalELFLinkage(GV); - unsigned Align=0, Size=0; +// isELFDataSym - if the symbol is an initialized but no null constant +// it must go to some kind of data section gathered from TAI +static bool isELFDataSym(const GlobalValue *GV) { + return (!GV->isDeclaration() && + !(GV->isNullValue() || isa(GV))); +} + +// EmitGlobal - Choose the right section for global and emit it +void ELFWriter::EmitGlobal(const GlobalValue *GV) { + + // Handle ELF Bind, Visibility and Type for the current symbol + unsigned SymBind = getGlobalELFBinding(GV); ELFSym GblSym(GV); GblSym.setBind(SymBind); GblSym.setVisibility(getGlobalELFVisibility(GV)); + GblSym.setType(getGlobalELFType(GV)); + + if (isELFUndefSym(GV)) { + GblSym.SectionIdx = ELFSection::SHN_UNDEF; + } else { + assert(isa(GV) && "GV not a global variable!"); + const GlobalVariable *GVar = dyn_cast(GV); + + // Get ELF section from TAI + const Section *S = TAI->SectionForGlobal(GV); + unsigned SectionFlags = getElfSectionFlags(S->getFlags()); - if (GV->hasInitializer()) { - GblSym.setType(ELFSym::STT_OBJECT); + // The symbol align should update the section alignment if needed const TargetData *TD = TM.getTargetData(); - Align = TD->getPreferredAlignment(GV); - Size = TD->getTypeAllocSize(GV->getInitializer()->getType()); + unsigned Align = TD->getPreferredAlignment(GVar); + unsigned Size = TD->getTypeAllocSize(GVar->getInitializer()->getType()); GblSym.Size = Size; - } else { - GblSym.setType(ELFSym::STT_NOTYPE); - } - ELFSection &GblSection = getGlobalSymELFSection(GV, GblSym); + if (isELFCommonSym(GV)) { + GblSym.SectionIdx = ELFSection::SHN_COMMON; + getSection(S->getName(), ELFSection::SHT_NOBITS, SectionFlags, 1); + + // A new linkonce section is created for each global in the + // common section, the default alignment is 1 and the symbol + // value contains its alignment. + GblSym.Value = Align; + + } else if (isELFBssSym(GV)) { + ELFSection &ES = + getSection(S->getName(), ELFSection::SHT_NOBITS, SectionFlags); + GblSym.SectionIdx = ES.SectionIdx; + + // Update the size with alignment and the next object can + // start in the right offset in the section + if (Align) ES.Size = (ES.Size + Align-1) & ~(Align-1); + ES.Align = std::max(ES.Align, Align); + + // GblSym.Value should contain the virtual offset inside the section. + // Virtual because the BSS space is not allocated on ELF objects + GblSym.Value = ES.Size; + ES.Size += Size; + + } else if (isELFDataSym(GV)) { + ELFSection &ES = + getSection(S->getName(), ELFSection::SHT_PROGBITS, SectionFlags); + GblSym.SectionIdx = ES.SectionIdx; + + // GblSym.Value should contain the symbol offset inside the section, + // and all symbols should start on their required alignment boundary + ES.Align = std::max(ES.Align, Align); + GblSym.Value = (ES.size() + (Align-1)) & (-Align); + ES.emitAlignment(ES.Align); - if (GblSym.IsCommon) { - GblSym.Value = Align; - } else if (GblSym.IsBss) { - GblSym.Value = GblSection.Size; - GblSection.Size += Size; - } else if (GblSym.IsConstant){ - // GblSym.Value should contain the symbol index inside the section, - // and all symbols should start on their required alignment boundary - GblSym.Value = (GblSection.size() + (Align-1)) & (-Align); - GblSection.emitAlignment(Align); - EmitGlobalConstant(GV->getInitializer(), GblSection); + // Emit the global to the data section 'ES' + EmitGlobalConstant(GVar->getInitializer(), ES); + } } // Local symbols should come first on the symbol table. @@ -379,7 +398,7 @@ // Build and emit data, bss and "common" sections. for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I) { - EmitGlobalVar(I); + EmitGlobal(I); GblSymLookup[I] = 0; } @@ -392,15 +411,7 @@ if (GblSymLookup.find(*I) != GblSymLookup.end()) continue; - if (GlobalVariable *GV = dyn_cast(*I)) { - EmitGlobalVar(GV); - } else if (Function *F = dyn_cast(*I)) { - // If function is not in GblSymLookup, it doesn't have a body, - // so emit the symbol as a function declaration (no section associated) - EmitFunctionDeclaration(F); - } else { - assert("unknown howto handle pending global"); - } + EmitGlobal(*I); GblSymLookup[*I] = 0; } @@ -488,7 +499,7 @@ // Target specific ELF relocation type unsigned RelType = TEW->getRelocationType(MR.getRelocationType()); - // Constant addend used to compute the value to be stored + // Constant addend used to compute the value to be stored // into the relocatable field int64_t Addend = 0; @@ -548,7 +559,7 @@ /// EmitSectionHeader - Write section 'Section' header in 'SHdrTab' /// Section Header Table -void ELFWriter::EmitSectionHeader(BinaryObject &SHdrTab, +void ELFWriter::EmitSectionHeader(BinaryObject &SHdrTab, const ELFSection &SHdr) { SHdrTab.emitWord32(SHdr.NameIdx); SHdrTab.emitWord32(SHdr.Type); Modified: llvm/trunk/lib/CodeGen/ELFWriter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.h?rev=75537&r1=75536&r2=75537&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/ELFWriter.h (original) +++ llvm/trunk/lib/CodeGen/ELFWriter.h Mon Jul 13 17:40:39 2009 @@ -218,7 +218,8 @@ } // Helpers for obtaining ELF specific info. - unsigned getGlobalELFLinkage(const GlobalValue *GV); + unsigned getGlobalELFBinding(const GlobalValue *GV); + unsigned getGlobalELFType(const GlobalValue *GV); unsigned getGlobalELFVisibility(const GlobalValue *GV); unsigned getElfSectionFlags(unsigned Flags); @@ -231,8 +232,7 @@ unsigned ELFHdr_e_shnum_Offset; // e_shnum in ELF header. private: - void EmitFunctionDeclaration(const Function *F); - void EmitGlobalVar(const GlobalVariable *GV); + void EmitGlobal(const GlobalValue *GV); void EmitGlobalConstant(const Constant *C, ELFSection &GblS); void EmitGlobalConstantStruct(const ConstantStruct *CVS, ELFSection &GblS); From resistor at mac.com Mon Jul 13 17:41:06 2009 From: resistor at mac.com (Owen Anderson) Date: Mon, 13 Jul 2009 22:41:06 -0000 Subject: [llvm-commits] [llvm] r75538 - /llvm/trunk/lib/VMCore/ConstantFold.cpp Message-ID: <200907132241.n6DMf6NL004881@zion.cs.uiuc.edu> Author: resistor Date: Mon Jul 13 17:41:06 2009 New Revision: 75538 URL: http://llvm.org/viewvc/llvm-project?rev=75538&view=rev Log: Inline EvalVectorOp in order to get rid of passing-pointer-to-static-methods behavior. Modified: llvm/trunk/lib/VMCore/ConstantFold.cpp Modified: llvm/trunk/lib/VMCore/ConstantFold.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantFold.cpp?rev=75538&r1=75537&r2=75538&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/ConstantFold.cpp (original) +++ llvm/trunk/lib/VMCore/ConstantFold.cpp Mon Jul 13 17:41:06 2009 @@ -574,24 +574,6 @@ return 0; } -/// EvalVectorOp - Given two vector constants and a function pointer, apply the -/// function pointer to each element pair, producing a new ConstantVector -/// constant. Either or both of V1 and V2 may be NULL, meaning a -/// ConstantAggregateZero operand. -static Constant *EvalVectorOp(LLVMContext &Context, const ConstantVector *V1, - const ConstantVector *V2, - const VectorType *VTy, - Constant *(*FP)(Constant*, Constant*)) { - std::vector Res; - const Type *EltTy = VTy->getElementType(); - for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { - const Constant *C1 = V1 ? V1->getOperand(i) : Context.getNullValue(EltTy); - const Constant *C2 = V2 ? V2->getOperand(i) : Context.getNullValue(EltTy); - Res.push_back(FP(const_cast(C1), - const_cast(C2))); - } - return Context.getConstantVector(Res); -} Constant *llvm::ConstantFoldBinaryInstruction(LLVMContext &Context, unsigned Opcode, @@ -833,45 +815,157 @@ const ConstantVector *CP2 = dyn_cast(C2); if ((CP1 != NULL || isa(C1)) && (CP2 != NULL || isa(C2))) { + std::vector Res; + const Type* EltTy = VTy->getElementType(); + const Constant *C1 = 0; + const Constant *C2 = 0; switch (Opcode) { default: break; case Instruction::Add: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getAdd); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprAdd(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::FAdd: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getFAdd); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprFAdd(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::Sub: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getSub); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprSub(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::FSub: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getFSub); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprFSub(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::Mul: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getMul); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprMul(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::FMul: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getFMul); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprFMul(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::UDiv: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getUDiv); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprUDiv(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::SDiv: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getSDiv); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprSDiv(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::FDiv: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getFDiv); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprFDiv(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::URem: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getURem); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprURem(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::SRem: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getSRem); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprSRem(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::FRem: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getFRem); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprFRem(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::And: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getAnd); - case Instruction::Or: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getOr); - case Instruction::Xor: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getXor); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprAnd(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); + case Instruction::Or: + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprOr(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); + case Instruction::Xor: + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprXor(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::LShr: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getLShr); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprLShr(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::AShr: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getAShr); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprAShr(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); case Instruction::Shl: - return EvalVectorOp(Context, CP1, CP2, VTy, ConstantExpr::getShl); + for (unsigned i = 0, e = VTy->getNumElements(); i != e; ++i) { + C1 = CP1 ? CP1->getOperand(i) : Context.getNullValue(EltTy); + C2 = CP2 ? CP2->getOperand(i) : Context.getNullValue(EltTy); + Res.push_back(Context.getConstantExprShl(const_cast(C1), + const_cast(C2))); + } + return Context.getConstantVector(Res); } } } From eli.friedman at gmail.com Mon Jul 13 17:46:03 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 22:46:03 -0000 Subject: [llvm-commits] [llvm] r75539 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/udivrem-change-width.ll Message-ID: <200907132246.n6DMk4hY005040@zion.cs.uiuc.edu> Author: efriedma Date: Mon Jul 13 17:46:01 2009 New Revision: 75539 URL: http://llvm.org/viewvc/llvm-project?rev=75539&view=rev Log: PR4548: optimize zext+udiv+trunc to udiv. Added: llvm/trunk/test/Transforms/InstCombine/udivrem-change-width.ll Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=75539&r1=75538&r2=75539&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Jul 13 17:46:01 2009 @@ -7974,6 +7974,23 @@ CanEvaluateInDifferentType(I->getOperand(1), Ty, CastOpc, NumCastsRemoved); + case Instruction::UDiv: + case Instruction::URem: { + // UDiv and URem can be truncated if all the truncated bits are zero. + uint32_t OrigBitWidth = OrigTy->getScalarSizeInBits(); + uint32_t BitWidth = Ty->getScalarSizeInBits(); + if (BitWidth < OrigBitWidth) { + APInt Mask = APInt::getHighBitsSet(OrigBitWidth, OrigBitWidth-BitWidth); + if (MaskedValueIsZero(I->getOperand(0), Mask) && + MaskedValueIsZero(I->getOperand(1), Mask)) { + return CanEvaluateInDifferentType(I->getOperand(0), Ty, CastOpc, + NumCastsRemoved) && + CanEvaluateInDifferentType(I->getOperand(1), Ty, CastOpc, + NumCastsRemoved); + } + } + break; + } case Instruction::Shl: // If we are truncating the result of this SHL, and if it's a shift of a // constant amount, we can always perform a SHL in a smaller type. @@ -8060,7 +8077,9 @@ case Instruction::Xor: case Instruction::AShr: case Instruction::LShr: - case Instruction::Shl: { + case Instruction::Shl: + case Instruction::UDiv: + case Instruction::URem: { Value *LHS = EvaluateInDifferentType(I->getOperand(0), Ty, isSigned); Value *RHS = EvaluateInDifferentType(I->getOperand(1), Ty, isSigned); Res = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS); Added: llvm/trunk/test/Transforms/InstCombine/udivrem-change-width.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/udivrem-change-width.ll?rev=75539&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/udivrem-change-width.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/udivrem-change-width.ll Mon Jul 13 17:46:01 2009 @@ -0,0 +1,19 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep zext +; PR4548 + +define i8 @udiv_i8(i8 %a, i8 %b) nounwind { + %conv = zext i8 %a to i32 + %conv2 = zext i8 %b to i32 + %div = udiv i32 %conv, %conv2 + %conv3 = trunc i32 %div to i8 + ret i8 %conv3 +} + +define i8 @urem_i8(i8 %a, i8 %b) nounwind { + %conv = zext i8 %a to i32 + %conv2 = zext i8 %b to i32 + %div = urem i32 %conv, %conv2 + %conv3 = trunc i32 %div to i8 + ret i8 %conv3 +} + From dpatel at apple.com Mon Jul 13 17:46:19 2009 From: dpatel at apple.com (Devang Patel) Date: Mon, 13 Jul 2009 22:46:19 -0000 Subject: [llvm-commits] [llvm] r75540 - /llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Message-ID: <200907132246.n6DMkJZi005057@zion.cs.uiuc.edu> Author: dpatel Date: Mon Jul 13 17:46:19 2009 New Revision: 75540 URL: http://llvm.org/viewvc/llvm-project?rev=75540&view=rev Log: Use assertion. Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=75540&r1=75539&r2=75540&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Jul 13 17:46:19 2009 @@ -788,8 +788,9 @@ GV.getLinkageName(LinkageName); if (!LinkageName.empty()) { Mangler *Mg = Asm->getMangler(); + assert (Mg && "Unable to find Mangler!"); AddString(GVDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - Mg ? Mg->makeNameProper(LinkageName) : LinkageName); + Mg->makeNameProper(LinkageName)); } AddType(DW_Unit, GVDie, GV.getType()); if (!GV.isLocalToUnit()) @@ -861,8 +862,9 @@ if (!LinkageName.empty()) { Mangler *Mg = Asm->getMangler(); + assert (Mg && "Unable to find Mangler!"); AddString(SPDie, dwarf::DW_AT_MIPS_linkage_name, dwarf::DW_FORM_string, - Mg ? Mg->makeNameProper(LinkageName) : LinkageName); + Mg->makeNameProper(LinkageName)); } AddSourceLine(SPDie, &SP); From sabre at nondot.org Mon Jul 13 17:48:46 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 13 Jul 2009 22:48:46 -0000 Subject: [llvm-commits] [llvm] r75541 - in /llvm/trunk: lib/VMCore/Mangler.cpp test/CodeGen/X86/2008-04-02-unnamedEH.ll Message-ID: <200907132248.n6DMmlK1005145@zion.cs.uiuc.edu> Author: lattner Date: Mon Jul 13 17:48:46 2009 New Revision: 75541 URL: http://llvm.org/viewvc/llvm-project?rev=75541&view=rev Log: Two changes: 1) unique globals with the existing "Count" local in Mangler, not with atomic nonsense. Using atomics will give us nondeterminstic output from the compiler when using multiple threads, which is bad. 2) Do not mangle an unknown global name with a type suffix. We don't need this anymore now that llvm ir doesn't have type planes. Modified: llvm/trunk/lib/VMCore/Mangler.cpp llvm/trunk/test/CodeGen/X86/2008-04-02-unnamedEH.ll Modified: llvm/trunk/lib/VMCore/Mangler.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Mangler.cpp?rev=75541&r1=75540&r2=75541&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Mangler.cpp (original) +++ llvm/trunk/lib/VMCore/Mangler.cpp Mon Jul 13 17:48:46 2009 @@ -14,7 +14,6 @@ #include "llvm/Support/Mangler.h" #include "llvm/DerivedTypes.h" #include "llvm/Module.h" -#include "llvm/System/Atomic.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringMap.h" @@ -151,7 +150,7 @@ } -std::string Mangler::getValueName(const GlobalValue *GV, const char * Suffix) { +std::string Mangler::getValueName(const GlobalValue *GV, const char *Suffix) { // Check to see whether we've already named V. std::string &Name = Memo[GV]; if (!Name.empty()) @@ -164,13 +163,7 @@ Name = GV->getNameStart(); // Is an intrinsic function } else if (!GV->hasName()) { // Must mangle the global into a unique ID. - unsigned TypeUniqueID = getTypeID(GV->getType()); - static uint32_t GlobalID = 0; - - unsigned OldID = GlobalID; - sys::AtomicIncrement(&GlobalID); - - Name = "__unnamed_" + utostr(TypeUniqueID) + "_" + utostr(OldID); + Name = "__unnamed_" + utostr(Count++); } else { if (GV->hasPrivateLinkage()) Name = makeNameProper(GV->getName() + Suffix, Prefix, PrivatePrefix); Modified: llvm/trunk/test/CodeGen/X86/2008-04-02-unnamedEH.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-04-02-unnamedEH.ll?rev=75541&r1=75540&r2=75541&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/2008-04-02-unnamedEH.ll (original) +++ llvm/trunk/test/CodeGen/X86/2008-04-02-unnamedEH.ll Mon Jul 13 17:48:46 2009 @@ -1,5 +1,4 @@ -; RUN: llvm-as < %s | llc | grep unnamed_1_0.eh -; ModuleID = '' +; RUN: llvm-as < %s | llc | grep unnamed_0.eh target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" target triple = "i386-apple-darwin8" From eli.friedman at gmail.com Mon Jul 13 17:50:07 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Mon, 13 Jul 2009 15:50:07 -0700 Subject: [llvm-commits] [llvm] r75531 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/zext-bool-add-sub.ll In-Reply-To: References: <200907132227.n6DMRqOR004313@zion.cs.uiuc.edu> Message-ID: On Mon, Jul 13, 2009 at 3:35 PM, Chris Lattner wrote: > I think "select c, -1, 0" -> "sext c" and ?"select c, 0, -1" -> "sext ! > c" would make sense, what do you think? We intentionally do the opposite at the moment. -Eli From gohman at apple.com Mon Jul 13 17:56:38 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 22:56:38 -0000 Subject: [llvm-commits] [llvm] r75542 - /llvm/trunk/tools/bugpoint/ExtractFunction.cpp Message-ID: <200907132256.n6DMucAU005425@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 17:56:37 2009 New Revision: 75542 URL: http://llvm.org/viewvc/llvm-project?rev=75542&view=rev Log: #include "llvm/Assembly/Writer.h" to get the declaration for WriteAsOperand. Modified: llvm/trunk/tools/bugpoint/ExtractFunction.cpp Modified: llvm/trunk/tools/bugpoint/ExtractFunction.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/bugpoint/ExtractFunction.cpp?rev=75542&r1=75541&r2=75542&view=diff ============================================================================== --- llvm/trunk/tools/bugpoint/ExtractFunction.cpp (original) +++ llvm/trunk/tools/bugpoint/ExtractFunction.cpp Mon Jul 13 17:56:37 2009 @@ -20,6 +20,7 @@ #include "llvm/PassManager.h" #include "llvm/Pass.h" #include "llvm/Analysis/Verifier.h" +#include "llvm/Assembly/Writer.h" #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Utils/Cloning.h" From gohman at apple.com Mon Jul 13 18:03:05 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 23:03:05 -0000 Subject: [llvm-commits] [llvm] r75543 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp Message-ID: <200907132303.n6DN35j7005626@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 18:03:05 2009 New Revision: 75543 URL: http://llvm.org/viewvc/llvm-project?rev=75543&view=rev Log: Print a newline after printing a Value, now that Value's operator<< doesn't print a newline. Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=75543&r1=75542&r2=75543&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original) +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 13 18:03:05 2009 @@ -4953,7 +4953,7 @@ OS << "Classifying expressions for: " << F->getName() << "\n"; for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) if (isSCEVable(I->getType())) { - OS << *I; + OS << *I << '\n'; OS << " --> "; const SCEV *SV = SE.getSCEV(&*I); SV->print(OS); From clattner at apple.com Mon Jul 13 18:03:28 2009 From: clattner at apple.com (Chris Lattner) Date: Mon, 13 Jul 2009 16:03:28 -0700 Subject: [llvm-commits] [llvm] r75531 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/zext-bool-add-sub.ll In-Reply-To: References: <200907132227.n6DMRqOR004313@zion.cs.uiuc.edu> Message-ID: On Jul 13, 2009, at 3:50 PM, Eli Friedman wrote: > On Mon, Jul 13, 2009 at 3:35 PM, Chris Lattner > wrote: >> I think "select c, -1, 0" -> "sext c" and "select c, 0, -1" -> >> "sext ! >> c" would make sense, what do you think? > > We intentionally do the opposite at the moment. That probably dates back to when 'sext from bool' was new. Pre-2.0 we had no such operation, and there were bugs immediately after the conversion. -Chris From gohman at apple.com Mon Jul 13 18:04:44 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 23:04:44 -0000 Subject: [llvm-commits] [llvm] r75544 [1/2] - /llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Message-ID: <200907132304.n6DN4jGY005688@zion.cs.uiuc.edu> Author: djg Date: Mon Jul 13 18:04:44 2009 New Revision: 75544 URL: http://llvm.org/viewvc/llvm-project?rev=75544&view=rev Log: Check in a reduced version of this testcase. Modified: llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll From gohman at apple.com Mon Jul 13 18:04:44 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 13 Jul 2009 23:04:44 -0000 Subject: [llvm-commits] [llvm] r75544 [2/2] - /llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Message-ID: <200907132304.n6DN4j9m005692@zion.cs.uiuc.edu> Modified: llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll?rev=75544&r1=75543&r2=75544&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll (original) +++ llvm/trunk/test/CodeGen/PowerPC/tango.net.ftp.FtpClient.ll Mon Jul 13 18:04:44 2009 @@ -4,17393 +4,580 @@ ; ModuleID = 'tango.net.ftp.FtpClient.bc' target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f128:64:128" target triple = "powerpc-apple-darwin9.6.0" - type { i32, i32, i8*, i32, %tango.net.Socket.timeval } ; type %0 - type { i8*, i32 (i8*, %"tango.text.Regex.List!(TNFAFragment).List.Element"**)* } ; type %1 - type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i8*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i8*, i8*, i1 (%tango.io.device.Conduit.Conduit*)*, i8*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %2 - type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i8*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %3 - type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*)*, %"byte[]" (%tango.io.device.Array.Array*)*, i1 (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %4 - type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %5 - type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, %"byte[]" (%tango.io.device.Array.Array*)*, i1 (%tango.io.device.Array.Array*, %"uint delegate(char[])")*, i32 (%tango.io.device.Array.Array*, %"uint delegate(char[])")* } ; type %6 - type { %object.Interface*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)*, %"byte[]" (%tango.io.device.Array.Array*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]")*, i32 (%tango.io.device.Array.Array*, %"uint delegate(char[])")* } ; type %7 - type { %object.Interface* } ; type %8 - type { %object.Interface*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)* } ; type %9 - type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*)*, %"byte[]" (%tango.io.device.Device.Device*)*, i1 (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Device.Device*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %10 - type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %11 - type { %object.Interface*, i32 (%tango.io.device.Device.Device*)* } ; type %12 - type { %object.Interface*, i64 (%tango.io.device.File.File*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*)*, %"byte[]" (%tango.io.device.File.File*)*, i1 (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Device.Device*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %13 - type { %object.Interface*, i64 (%tango.io.device.File.File*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %14 - type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*)*, %"byte[]" (%tango.net.SocketConduit.SocketConduit*)*, i1 (%tango.net.SocketConduit.SocketConduit*)*, void (%tango.net.SocketConduit.SocketConduit*)*, void (%tango.io.device.Conduit.Conduit*, %"byte[]")* } ; type %15 - type { %object.Interface*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, void (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*)* } ; type %16 - type { %object.Interface*, i32 (%tango.net.SocketConduit.SocketConduit*)* } ; type %17 - type { i8*, i32 (i8*, %"tango.text.Regex.List!(StateElement).List.Element"**)* } ; type %18 - type { i8*, i32 (i8*, %"tango.text.Regex.List!(SubsetState).List.Element"**)* } ; type %19 - type { %object.TypeInfo.__vtbl*, i8*, %"byte[]", %"byte[]", i8*, i8*, i8*, i8*, i32 } ; type %20 - type { %object.TypeInfo.__vtbl*, i8*, %"byte[]", %"byte[]", i8*, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)*, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)*, %"byte[]" (%tango.net.Socket.timeval*)*, i32 } ; type %21 - type opaque ; type %22 - type opaque ; type %23 - type opaque ; type %24 - type opaque ; type %25 - type opaque ; type %26 - type opaque ; type %27 - type opaque ; type %28 - type opaque ; type %29 - type opaque ; type %30 - type { i32, void ()* } ; type %31 - type opaque ; type %32 - type { %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFA!(dchar).TNFA"* } ; type %33 - type { %"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.List!(TNFAFragment).List"* } ; type %34 - type { i32, %"byte[]" } ; type %35 - %"Act[]" = type { i32, i32* } - %"CharRange!(dchar)[]" = type { i32, %tango.net.Socket.timeval* } - %"ClassInfo[]" = type { i32, %object.ClassInfo** } - %"Command[]" = type { i32, %tango.net.Socket.timeval* } - %D_CRITICAL_SECTION = type { %D_CRITICAL_SECTION*, %0 } - %"FtpFeature[]" = type { i32, %tango.net.ftp.FtpClient.FtpFeature* } - %"FtpFileInfo[]" = type { i32, %tango.net.ftp.FtpClient.FtpFileInfo* } - %"Interface[]" = type { i32, %object.Interface* } - %"Mark[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.Mark"* } - %"ModuleInfo[]" = type { i32, %object.ModuleInfo** } - %ModuleReference = type { %ModuleReference*, %object.ModuleInfo* } - %"OffsetTypeInfo[]" = type { i32, %object.OffsetTypeInfo* } - %"Operator[]" = type { i32, i32* } - %"Pair!(uint)[]" = type { i32, %tango.net.Socket.timeval* } - %"Predicate!(dchar)[]" = type { i32, %"tango.text.Regex.Predicate!(dchar).Predicate"* } - %"StateElement[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"** } - %"State[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.State"** } - %"TNFAState[]" = type { i32, %"tango.text.Regex.TNFAState!(dchar).TNFAState"** } - %"TNFATransition[]" = type { i32, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"** } - %"Transition[]" = type { i32, %"tango.text.Regex.TDFA!(dchar).TDFA.Transition"** } - %"TypeInfo[]" = type { i32, %object.TypeInfo** } - %"_FormatterInfo!(char)[]" = type { i32, %nest.parseListLine* } %"byte[]" = type { i32, i8* } - %"char[]" = type { i32, i8* } - %"char[] delegate(RegExpT)" = type { i8*, %"byte[]" (i8*, %"tango.text.Regex.RegExpT!(char).RegExpT"*)* } - %"char[][]" = type { i32, %"byte[]"* } - %"dchar[]" = type { i32, i32* } - %"dchar[][]" = type { i32, %"Act[]"* } - %"int delegate(ref Element)" = type { i8*, i32 (i8*, %"tango.text.Regex.List!(TNFATransition).List.Element"**)* } - %"int delegate(ref FrameInfo fInfo)" = type { i8*, i32 (i8*, %object.Exception.FrameInfo*)* } - %"int delegate(ref ModuleInfo)" = type { i8*, i32 (i8*, %object.ModuleInfo**)* } - %"int delegate(ref RegExpT)" = type { i8*, i32 (i8*, %"tango.text.Regex.RegExpT!(char).RegExpT"**)* } - %"int delegate(ref StateElement)" = type { i8*, i32 (i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"**)* } - %"int delegate(ref SubsetState)" = type { i8*, i32 (i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"**)* } - %"int delegate(ref TNFAFragment)" = type { i8*, i32 (i8*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"**)* } - %"int delegate(ref TNFATransition)" = type { i8*, i32 (i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"**)* } - %"int delegate(ref char[])" = type { i8*, i32 (i8*, %"byte[]"*)* } - %"int delegate(ref int, ref char[])" = type { i8*, i32 (i8*, i32*, %"byte[]"*)* } - %"int delegate(ref int, ref char[], ref char[])" = type { i8*, i32 (i8*, i32*, %"byte[]"*, %"byte[]"*)* } - %"int[]" = type { i32, i32* } - %nest.clone = type { %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, %"tango.text.Regex.TNFA!(dchar).TNFA"* } - %nest.delimit = type { %"char[][]" } - %nest.dostime = type { %tango.time.Time.Date } - %nest.insertAfter = type { %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.List!(TNFATransition).List"* } - %nest.insertBefore = type { %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.List!(TNFATransition).List"* } - %nest.parse = type { %"tango.text.convert.Layout.Layout!(char).Layout"*, %"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.Stack!(Operator).Stack", %"tango.text.Regex.Stack!(Operator).Stack", %"tango.text.Regex.Stack!(Pair!(uint)).Stack", %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, %"tango.text.Regex.Stack!(TNFATransition).Stack", i32, %"tango.text.Regex.TNFA!(dchar).TNFA"* } - %nest.parseListLine = type { i32, %"byte[]", %"byte[]" } - %nest.setEntry = type { %"tango.text.Regex.TNFAState!(dchar).TNFAState"* } - %nest.setExit = type { %"tango.text.Regex.TNFAState!(dchar).TNFAState"* } - %nest.splitLines = type { i32, %"char[][]" } - %object.ClassInfo = type { %object.ClassInfo.__vtbl*, i8*, %"byte[]", %"byte[]", %"void*[]", %"Interface[]", %object.ClassInfo*, i8*, i8*, i32, i8*, %"OffsetTypeInfo[]", i8*, %object.TypeInfo* } - %object.ClassInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %object.Object* (%object.ClassInfo*)* } - %object.Exception = type { %object.Exception.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception* } - %object.Exception.FrameInfo = type { i64, i32, i32, i32, %"byte[]", %"byte[]", [256 x i8] } - %object.Exception.TraceInfo = type { %object.Exception.TraceInfo.__vtbl* } - %object.Exception.TraceInfo.__vtbl = type { %object.ClassInfo*, i32 (%object.Exception.TraceInfo*, %"int delegate(ref FrameInfo fInfo)")* } - %object.Exception.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Exception*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } - %object.Interface = type { %object.ClassInfo*, %"void*[]", i32 } - %object.ModuleInfo = type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %"ModuleInfo[]", %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* } - %object.ModuleInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %object.Object = type { %object.ModuleInfo.__vtbl*, i8* } - %object.Object.Monitor = type { %object.Object.Monitor.__vtbl* } - %object.Object.Monitor.__vtbl = type { %object.ClassInfo*, void (%object.Object.Monitor*)*, void (%object.Object.Monitor*)* } - %object.Object.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %object.OffsetTypeInfo = type { i32, %object.TypeInfo* } - %object.TypeInfo = type { %object.TypeInfo.__vtbl*, i8* } - %object.TypeInfo.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %object.TypeInfo_Array = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo* } - %object.TypeInfo_Array.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %object.TypeInfo_Class = type { %object.TypeInfo.__vtbl*, i8*, %object.ClassInfo* } - %object.TypeInfo_Class.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %object.TypeInfo_Enum = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo*, %"byte[]", %"byte[]" } - %object.TypeInfo_Enum.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %object.TypeInfo_StaticArray = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo*, i32 } - %object.TypeInfo_StaticArray.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %object.TypeInfo_Struct = type { %object.TypeInfo.__vtbl*, i8*, %"byte[]", %"byte[]", i32 ()*, i32 (i8*)*, i32 (i8*)*, %"byte[]" ()*, i32 } - %object.TypeInfo_Struct.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %object.TypeInfo_Typedef = type { %object.TypeInfo.__vtbl*, i8*, %object.TypeInfo*, %"byte[]", %"byte[]" } - %object.TypeInfo_Typedef.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.TypeInfo*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*, i8*, i8*)*, i32 (%object.TypeInfo*)*, void (%object.TypeInfo*, i8*, i8*)*, %object.TypeInfo* (%object.TypeInfo*)*, %"byte[]" (%object.TypeInfo*)*, i32 (%object.TypeInfo*)*, %"OffsetTypeInfo[]" (%object.TypeInfo*)* } - %"tango.core.Array.IsEqual!(char).IsEqual" = type <{ i8 }> - %tango.core.Exception.IllegalArgumentException = type { %object.Exception.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception* } - %tango.core.Exception.IllegalArgumentException.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Exception*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } - %tango.io.device.Array.Array = type { %tango.io.device.Array.Array.__vtbl*, i8*, %4*, %5*, %"byte[]", i32, i32, i32, i32, %6*, %7*, %8* } - %tango.io.device.Array.Array.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.Array.Array*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Array.Array*)*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, i32 (%tango.io.device.Array.Array*, %"byte[]")*, void (%tango.io.device.Array.Array*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Array.Array*, i64, i32)*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]")*, %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)* } - %tango.io.device.Conduit.Conduit = type { %tango.io.device.Conduit.Conduit.__vtbl*, i8*, %2*, %3* } - %tango.io.device.Conduit.Conduit.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.Conduit.Conduit*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Conduit.Conduit*)*, i32 (%tango.io.device.Conduit.Conduit*, %"byte[]")*, i32 (%tango.io.device.Conduit.Conduit*, %"byte[]")*, void (%tango.io.device.Conduit.Conduit*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)* } - %tango.io.device.Conduit.InputFilter = type { %tango.io.device.Conduit.InputFilter.__vtbl*, i8*, %tango.io.model.IConduit.InputStream*, %9* } - %tango.io.device.Conduit.InputFilter.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)* } - %tango.io.device.Device.Device = type { %tango.io.device.Device.Device.__vtbl*, i8*, %10*, %11*, i32, %12* } - %tango.io.device.Device.Device.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.Device.Device*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Device.Device*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, void (%tango.io.device.Device.Device*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, void (%tango.io.device.Device.Device*, i32)* } - %tango.io.device.File.File = type { %tango.io.device.File.File.__vtbl*, i8*, %13*, %14*, i32, %12*, %"byte[]", %tango.io.device.File.File.Style, %8* } - %tango.io.device.File.File.Style = type <{ i8, i8, i8, i8 }> - %tango.io.device.File.File.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.io.device.File.File*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.io.device.Device.Device*)*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, i32 (%tango.io.device.Device.Device*, %"byte[]")*, void (%tango.io.device.Device.Device*)*, i1 (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.File.File*, i64, i32)*, void (%tango.io.device.Device.Device*, i32)*, void (%tango.io.device.File.File.Style*, %tango.io.device.File.File*)*, i64 (%tango.io.device.File.File*)*, i64 (%tango.io.device.File.File*)*, void (%tango.io.device.File.File*, %"byte[]", %tango.io.device.File.F! ile.Style*)*, void (%tango.io.device.File.File*)*, void (%tango.io.device.File.File*, i64)* } - %tango.io.model.IConduit.IConduit = type { %tango.io.model.IConduit.IConduit.__vtbl* } - %tango.io.model.IConduit.IConduit.Seek = type { %tango.io.model.IConduit.IConduit.Seek.__vtbl* } - %tango.io.model.IConduit.IConduit.Seek.__vtbl = type { %object.ClassInfo* } - %tango.io.model.IConduit.IConduit.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")*, %"byte[]" (%tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.model.IConduit.InputStream*)*, i32 (%tango.io.model.IConduit.IConduit*)*, %"byte[]" (%tango.io.model.IConduit.IConduit*)*, i1 (%tango.io.model.IConduit.IConduit*)*, void (%tango.io.model.IConduit.IConduit*)*, void (%tango.io.model.IConduit.IConduit*, %"byte[]")* } - %tango.io.model.IConduit.IOStream = type { %tango.io.model.IConduit.IOStream.__vtbl* } - %tango.io.model.IConduit.IOStream.Mutator = type { %tango.io.model.IConduit.IConduit.Seek.__vtbl* } - %tango.io.model.IConduit.IOStream.Mutator.__vtbl = type { %object.ClassInfo* } - %tango.io.model.IConduit.IOStream.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)* } - %tango.io.model.IConduit.ISelectable = type { %tango.io.model.IConduit.ISelectable.__vtbl* } - %tango.io.model.IConduit.ISelectable.__vtbl = type { %object.ClassInfo*, i32 (%tango.io.model.IConduit.ISelectable*)* } - %tango.io.model.IConduit.InputBuffer = type { %tango.io.model.IConduit.InputBuffer.__vtbl* } - %tango.io.model.IConduit.InputBuffer.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")*, %"byte[]" (%tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.model.IConduit.InputStream*)*, %"byte[]" (%tango.io.model.IConduit.InputBuffer*)*, i1 (%tango.io.model.IConduit.InputBuffer*, %"uint delegate(char[])")*, i32 (%tango.io.model.IConduit.InputBuffer*, %"uint delegate(char[])")* } - %tango.io.model.IConduit.InputStream = type { %tango.io.model.IConduit.InputStream.__vtbl* } - %tango.io.model.IConduit.InputStream.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.InputStream*, %"byte[]")*, %"byte[]" (%tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.model.IConduit.InputStream*)* } - %tango.io.model.IConduit.OutputBuffer = type { %tango.io.model.IConduit.OutputBuffer.__vtbl* } - %tango.io.model.IConduit.OutputBuffer.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.OutputStream*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*)*, %"byte[]" (%tango.io.model.IConduit.OutputBuffer*)*, %tango.io.model.IConduit.OutputBuffer* (%tango.io.model.IConduit.OutputBuffer*, %"byte[]")*, i32 (%tango.io.model.IConduit.OutputBuffer*, %"uint delegate(char[])")* } - %tango.io.model.IConduit.OutputStream = type { %tango.io.model.IConduit.OutputStream.__vtbl* } - %tango.io.model.IConduit.OutputStream.__vtbl = type { %object.ClassInfo*, i64 (%tango.io.model.IConduit.IOStream*, i64, i32)*, %tango.io.model.IConduit.IConduit* (%tango.io.model.IConduit.IOStream*)*, %tango.io.model.IConduit.IOStream* (%tango.io.model.IConduit.IOStream*)*, void (%tango.io.model.IConduit.IOStream*)*, i32 (%tango.io.model.IConduit.OutputStream*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*, %tango.io.model.IConduit.InputStream*, i32)*, %tango.io.model.IConduit.OutputStream* (%tango.io.model.IConduit.OutputStream*)* } - %"tango.io.stream.Iterator.Iterator!(char).Iterator" = type { %"tango.io.stream.Iterator.Iterator!(char).Iterator.__vtbl"*, i8*, %tango.io.model.IConduit.InputStream*, %9*, %tango.io.model.IConduit.InputBuffer*, %"byte[]", %"byte[]" } - %"tango.io.stream.Iterator.Iterator!(char).Iterator.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"byte[]")*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"* (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %tango.io.model.IConduit.InputStream*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref char[])"! )*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[])")*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[], ref char[])")* } - %"tango.io.stream.Lines.Lines!(char).Lines" = type { %"tango.io.stream.Iterator.Iterator!(char).Iterator.__vtbl"*, i8*, %tango.io.model.IConduit.InputStream*, %9*, %tango.io.model.IConduit.InputBuffer*, %"byte[]", %"byte[]" } - %"tango.io.stream.Lines.Lines!(char).Lines.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.io.model.IConduit.IConduit* (%tango.io.device.Conduit.InputFilter*)*, i32 (%tango.io.device.Conduit.InputFilter*, %"byte[]")*, %"byte[]" (%tango.io.device.Conduit.InputFilter*, i32)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.InputFilter*)*, i64 (%tango.io.device.Conduit.InputFilter*, i64, i32)*, %tango.io.model.IConduit.InputStream* (%tango.io.device.Conduit.InputFilter*)*, void (%tango.io.device.Conduit.InputFilter*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"byte[]")*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"* (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %tango.io.model.IConduit.InputStream*)*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref char[])")*, i32 (! %"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[])")*, i32 (%"tango.io.stream.Iterator.Iterator!(char).Iterator"*, %"int delegate(ref int, ref char[], ref char[])")* } - %tango.net.Socket.Address = type { %tango.net.Socket.Address.__vtbl*, i8* } - %tango.net.Socket.Address.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.Socket.Address*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.net.Socket.sockaddr* (%tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Address*)* } - %tango.net.Socket.IPv4Address = type { %tango.net.Socket.IPv4Address.__vtbl*, i8*, [8 x i8], %tango.net.Socket.IPv4Address.sockaddr_in } - %tango.net.Socket.IPv4Address.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.Socket.IPv4Address*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %tango.net.Socket.sockaddr* (%tango.net.Socket.IPv4Address*)*, i32 (%tango.net.Socket.IPv4Address*)*, i32 (%tango.net.Socket.IPv4Address*)*, i16 (%tango.net.Socket.IPv4Address*)*, i32 (%tango.net.Socket.IPv4Address*)*, %"byte[]" (%tango.net.Socket.IPv4Address*)*, %"byte[]" (%tango.net.Socket.IPv4Address*)* } - %tango.net.Socket.IPv4Address.sockaddr_in = type { i16, i16, i32, [8 x i8] } - %tango.net.Socket.NetHost = type { %tango.net.Socket.NetHost.__vtbl*, i8*, %"byte[]", %"char[][]", %"Act[]" } - %tango.net.Socket.NetHost.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.net.Socket.NetHost*, %tango.net.Socket.hostent*)*, void (%tango.net.Socket.NetHost*, %tango.net.Socket.hostent*)*, i1 (%tango.net.Socket.NetHost*, %"byte[]")*, i1 (%tango.net.Socket.NetHost*, i32)*, i1 (%tango.net.Socket.NetHost*, %"byte[]")* } - %tango.net.Socket.Socket = type { %tango.net.Socket.Socket.__vtbl*, i8*, i32, i32, i32, i32 } - %tango.net.Socket.Socket.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.Socket.Socket*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.net.Socket.Socket*)*, void (%tango.net.Socket.Socket*, i32)*, i1 (%tango.net.Socket.Socket*)*, i1 (%tango.net.Socket.Socket*)*, void (%tango.net.Socket.Socket*, i1)*, i32 (%tango.net.Socket.Socket*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, %tango.net.Socket.Address*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, %tango.net.Socket.Address*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, %tango.net.Socket.Socket*)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i1)*, %tango.net.Socket! .Socket* (%tango.net.Socket.Socket*, i1)*, void (%tango.net.Socket.Socket*, %tango.net.Socket.IPv4Address*, i1)*, void (%tango.net.Socket.Socket*)*, %tango.net.Socket.Address* (%tango.net.Socket.Socket*)*, %tango.net.Socket.Address* (%tango.net.Socket.Socket*)*, %tango.net.Socket.Address* (%tango.net.Socket.Socket*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32, %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32, %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", %tango.net.Socket.Address*)*, i32 (%tango.net.Socket.Socket*, %"byte[]", i32)*, i32 (%tango.net.Socket.Socket*, i32, i32, %"byte[]")*, %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32, i32, %"byte[]")* } - %tango.net.Socket.SocketSet = type { %tango.net.Socket.SocketSet.__vtbl*, i8*, i32, i8*, i32, i32 } - %tango.net.Socket.SocketSet.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.net.Socket.SocketSet*, i32)*, i32 (%tango.net.Socket.SocketSet*, i32)*, i32* (%tango.net.Socket.SocketSet*)*, i32 (%tango.net.Socket.SocketSet*)*, %tango.net.Socket.SocketSet* (%tango.net.Socket.SocketSet*)*, void (%tango.net.Socket.SocketSet*)*, void (%tango.net.Socket.SocketSet*, i32)*, void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)*, void (%tango.net.Socket.SocketSet*, i32)*, void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)*, i32 (%tango.net.Socket.SocketSet*, i32)*, i32 (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)*, i32 (%tango.net.Socket.SocketSet*)*, %"tango.core.Array.IsEqual!(char).IsEqual"* (%tango.net.Socket.SocketSet*)* } - %tango.net.Socket.fd_set = type <{ i8 }> - %tango.net.Socket.hostent = type { i8*, i8**, i32, i32, i8** } - %tango.net.Socket.sockaddr = type { i16, [14 x i8] } - %tango.net.Socket.timeval = type { i32, i32 } - %tango.net.SocketConduit.SocketConduit = type { %tango.net.SocketConduit.SocketConduit.__vtbl*, i8*, %15*, %16*, %tango.net.Socket.timeval, %tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*, i1, %tango.net.SocketConduit.SocketConduit*, i1, %17* } - %tango.net.SocketConduit.SocketConduit.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.SocketConduit.SocketConduit*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%tango.net.SocketConduit.SocketConduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, i32 (%tango.net.SocketConduit.SocketConduit*, %"byte[]")*, void (%tango.net.SocketConduit.SocketConduit*)*, i1 (%tango.net.SocketConduit.SocketConduit*)*, %tango.io.model.IConduit.IOStream* (%tango.io.device.Conduit.Conduit*)*, %tango.io.model.IConduit.OutputStream* (%tango.io.device.Conduit.Conduit*, %tango.io.model.IConduit.InputStream*, i32)*, %"byte[]" (%tango.io.device.Conduit.Conduit*, i32)*, i64 (%tango.io.device.Conduit.Conduit*, i64, i32)*, %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*, i32 (%tango.net.SocketConduit.SocketConduit*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketC! onduit*, float)*, i1 (%tango.net.SocketConduit.SocketConduit*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*)* } - %tango.net.ftp.FtpClient.FTPConnection = type { %tango.net.ftp.FtpClient.FTPConnection.__vtbl*, i8*, %tango.net.SocketConduit.SocketConduit*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"*, [8192 x i8], %"FtpFeature[]", %tango.net.ftp.FtpClient.FtpConnectionDetail, i32, %"byte[]", %tango.net.SocketConduit.SocketConduit*, %tango.time.Time.Time } - %tango.net.ftp.FtpClient.FTPConnection.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, %"byte[]" (%tango.net.ftp.Telnet.Telnet*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.time.Time.Time*)*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)*, %"FtpFeature[]" (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpAddress*)*, void (%tango.net.ftp.FtpClie! nt.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i16, %"byte[]", i16)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]")*, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*,! %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*)*,! %"byte[ ]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)*, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit**)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClien! t.FTPConnection*, %"byte[]", %"char[][]")*, %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)")*, %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.I! nputStream*, %"void delegate(uint pos)", i32)*, void (%tango.n! et.ftp.F tpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*, i64)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)*, void (%tango.net.ftp.FtpClient.FTPConnection*)*, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)", i32)*, %tango.io.model.IConduit.InputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*, %tango.io.model.IConduit.OutputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* } - %tango.net.ftp.FtpClient.FtpAddress = type { %"byte[]", %"byte[]", %"byte[]", %"byte[]", i32 } - %tango.net.ftp.FtpClient.FtpConnectionDetail = type { i32, %tango.net.Socket.Address*, %tango.net.Socket.Address* } - %tango.net.ftp.FtpClient.FtpException = type { %tango.net.ftp.FtpClient.FtpException.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception*, [3 x i8] } - %tango.net.ftp.FtpClient.FtpException.__vtbl = type { %object.ClassInfo*, %"byte[]" (%tango.net.ftp.FtpClient.FtpException*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } - %tango.net.ftp.FtpClient.FtpFeature = type { %"byte[]", %"byte[]" } - %tango.net.ftp.FtpClient.FtpFileInfo = type { %"byte[]", i32, i64, %tango.time.Time.Time, %tango.time.Time.Time, %"byte[]", i8* } - %tango.net.ftp.FtpClient.FtpResponse = type { [3 x i8], %"byte[]" } - %tango.net.ftp.Telnet.Telnet = type { %tango.net.ftp.Telnet.Telnet.__vtbl*, i8*, %tango.net.SocketConduit.SocketConduit*, %"tango.io.stream.Iterator.Iterator!(char).Iterator"*, [8192 x i8] } - %tango.net.ftp.Telnet.Telnet.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")*, %"byte[]" (%tango.net.ftp.Telnet.Telnet*)*, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)* } - %"tango.text.Regex.CharClass!(dchar).CharClass" = type { %"CharRange!(dchar)[]" } - %"tango.text.Regex.CharRange!(dchar).CharRange" = type { i32, i32 } - %"tango.text.Regex.List!(StateElement).List" = type { %"tango.text.Regex.List!(StateElement).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.List!(StateElement).List.Element"* } - %"tango.text.Regex.List!(StateElement).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.List!(StateElement).List"* } - %"tango.text.Regex.List!(StateElement).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %"tango.text.Regex.List!(StateElement).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(! StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, %"tango.text.Regex.List!(StateElement).List"* (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List"*)*, i32 (%"tango.text.Regex.List!(StateElement).List"*)*, i1 (%"tango.text.Regex.List!(StateElement).List"*)*, void (%"tango.text.Regex.List!(StateElement).List"*)*, void (%"tango.text.Regex.List!(StateElement).List"*)*, void (%"tango.text.Regex.List!(StateElement).List"*, %"tango.text.Regex.List!(StateElement).List.Element"*)*, i32 (%"tango.text.Regex.List!(State! Element).List"*, %18)*, i32 (%"tango.text.Regex.List!(StateEle! ment).Li st"*, %18)*, i32 (%"tango.text.Regex.List!(StateElement).List"*, %"int delegate(ref StateElement)")*, i32 (%"tango.text.Regex.List!(StateElement).List"*, %"int delegate(ref StateElement)")* } - %"tango.text.Regex.List!(SubsetState).List" = type { %"tango.text.Regex.List!(SubsetState).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.List!(SubsetState).List.Element"* } - %"tango.text.Regex.List!(SubsetState).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.List!(SubsetState).List"* } - %"tango.text.Regex.List!(SubsetState).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %"tango.text.Regex.List!(SubsetState).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).Lis! t"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List.Element"*, %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, %"tango.text.Regex.List!(SubsetState).List"* (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List"*)*, i32 (%"tango.text.Regex.List!(SubsetState).List"*)*, i1 (%"tango.text.Regex.List!(SubsetState).List"*)*, void (%"tango.text.Regex.List!(SubsetState).List"*)*, void (%"tango.text.Regex.List!(SubsetState).List"*)*, void (%"tango.text.Regex.List!(SubsetState).List"*, %"tango.text.Regex.List!(SubsetState).List.Element"*)*, i32 (%"tango.text.Regex.List!(SubsetState).List"*, %19)*, i32 (%"tango! .text.Regex.List!(SubsetState).List"*, %19)*, i32 (%"tango.tex! t.Regex. List!(SubsetState).List"*, %"int delegate(ref SubsetState)")*, i32 (%"tango.text.Regex.List!(SubsetState).List"*, %"int delegate(ref SubsetState)")* } - %"tango.text.Regex.List!(TNFAFragment).List" = type { %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"* } - %"tango.text.Regex.List!(TNFAFragment).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.List!(TNFAFragment).List"* } - %"tango.text.Regex.List!(TNFAFragment).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %"tango.text.Regex.List!(TNFAFragment).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.! Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)*, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)*, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*)*, i1 (%"tango.text.Regex.List!(TNFAFragment).List"*)*, void (%"tango.text.Regex.List!(TNFAFragment).List"*)*, void (%"tango.text.Regex.List!(TNFAFragment).List"*)*, void (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*)*, i32 (%"tang! o.text.Regex.List!(TNFAFragment).List"*, %1)*, i32 (%"tango.te! xt.Regex .List!(TNFAFragment).List"*, %1)*, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")*, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")* } - %"tango.text.Regex.List!(TNFATransition).List" = type { %"tango.text.Regex.List!(TNFATransition).List.__vtbl"*, i8*, i32, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.List!(TNFATransition).List.Element"* } - %"tango.text.Regex.List!(TNFATransition).List.Element" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.List!(TNFATransition).List"* } - %"tango.text.Regex.List!(TNFATransition).List.Element.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %"tango.text.Regex.List!(TNFATransition).List.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)*, %"tango.text.Regex.Lis! t!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)*, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*)*, i1 (%"tango.text.Regex.List!(TNFATransition).List"*)*, void (%"tango.text.Regex.List!(TNFATransition).List"*)*, void (%"tango.text.Regex.List!(TNFATransition).List"*)*, void (%"tango.text.Regex.List!(TNFATran! sition).List"*, %"tango.text.Regex.List!(TNFATransition).List.! Element" *)*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")*, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")* } - %"tango.text.Regex.Pair!(uint).Pair" = type { i32, i32 } - %"tango.text.Regex.Predicate!(dchar).Predicate" = type { %"tango.text.Regex.CharClass!(dchar).CharClass", i32, i32, %"byte[]", i32 } - %tango.text.Regex.RegExpException = type { %object.Exception.__vtbl*, i8*, %"byte[]", %"byte[]", i32, %object.Exception.TraceInfo*, %object.Exception* } - %tango.text.Regex.RegExpException.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Exception*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%object.Exception*, %"void delegate(char[])")* } - %"tango.text.Regex.RegExpT!(char).RegExpT" = type { %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*, i8*, %"Act[]", i32, i32, %"tango.text.Regex.TDFA!(dchar).TDFA"*, %"byte[]", %"byte[]" } - %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"tango.text.Regex.RegExpT!(char).RegExpT"* (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")*, i32 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"int delegate(ref RegExpT)")*, i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")*, i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*)*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*)*, %"char[][]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"byte[]", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"b! yte[]", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"byte[]", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", %"char[] delegate(RegExpT)", %"byte[]")*, %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]", i1)*, i32 (%"tango.text.Regex.RegExpT!(char).RegExpT"*)* } - %"tango.text.Regex.Stack!(Operator).Stack" = type { i32, %"Act[]" } - %"tango.text.Regex.Stack!(Pair!(uint)).Stack" = type { i32, %"CharRange!(dchar)[]" } - %"tango.text.Regex.Stack!(TNFATransition).Stack" = type { i32, %"TNFATransition[]" } - %"tango.text.Regex.Stack!(uint).Stack" = type { i32, %"Act[]" } - %"tango.text.Regex.TDFA!(dchar).TDFA" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.__vtbl"*, i8*, %"State[]", %"tango.text.Regex.TDFA!(dchar).TDFA.State"*, %"CharRange!(dchar)[]", i32, i8*, i32, %"Mark[]" } - %"tango.text.Regex.TDFA!(dchar).TDFA.Command" = type { i32, i32 } - %"tango.text.Regex.TDFA!(dchar).TDFA.Mark" = type { i32, i1, i8, i16 } - %"tango.text.Regex.TDFA!(dchar).TDFA.State" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.State.__vtbl"*, i8*, i1, i32, %"Transition[]", %"Transition[]", %"CharRange!(dchar)[]", %"byte[]", i32, %"tango.text.Regex.TDFA!(dchar).TDFA"* } - %"tango.text.Regex.TDFA!(dchar).TDFA.State.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%"tango.text.Regex.TDFA!(dchar).TDFA.State"*)*, void (%"tango.text.Regex.TDFA!(dchar).TDFA.State"*)* } - %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement.__vtbl"*, i8*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, i8*, i32, i32, %"tango.text.Regex.TDFA!(dchar).TDFA"* } - %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)*, i32 (%object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i1 (%"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*, %"tango.text.Regex.TDFA!(dchar).TDFA.StateElement"*)* } - %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState.__vtbl"*, i8*, %"StateElement[]", %"tango.text.Regex.TDFA!(dchar).TDFA.State"*, %"tango.text.Regex.TDFA!(dchar).TDFA"* } - %"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.SubsetState"*, %"int delegate(ref TNFATransition)")* } - %"tango.text.Regex.TDFA!(dchar).TDFA.TagIndex" = type { i32, i32 } - %"tango.text.Regex.TDFA!(dchar).TDFA.Transition" = type { %"tango.text.Regex.TDFA!(dchar).TDFA.Transition.__vtbl"*, i8*, %"tango.text.Regex.TDFA!(dchar).TDFA.State"*, %"tango.text.Regex.Predicate!(dchar).Predicate", %"CharRange!(dchar)[]", %"tango.text.Regex.TDFA!(dchar).TDFA"* } - %"tango.text.Regex.TDFA!(dchar).TDFA.Transition.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*, %object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*, %object.Object*)*, i1 (%"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*, %"tango.text.Regex.TDFA!(dchar).TDFA.Transition"*)* } - %"tango.text.Regex.TDFA!(dchar).TDFA.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%"tango.text.Regex.TDFA!(dchar).TDFA"*)* } - %"tango.text.Regex.TNFA!(dchar).TNFA" = type { %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"*, i8*, %"Act[]", %"TNFAState[]", %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, i1, i32, i32, i32, %"tango.text.Regex.List!(TNFATransition).List"*, i8*, i8* } - %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%"tango.text.Regex.TNFA!(dchar).TNFA"*)*, void (%"tango.text.Regex.TNFA!(dchar).TNFA"*, i1)* } - %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment" = type { %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"*, i8*, %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*, i1 } - %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)*, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* } - %"tango.text.Regex.TNFAState!(dchar).TNFAState" = type { %object.ModuleInfo.__vtbl*, i8*, i1, i1, i32, %"tango.text.Regex.List!(TNFATransition).List"* } - %"tango.text.Regex.TNFAState!(dchar).TNFAState.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %"tango.text.Regex.TNFATransition!(dchar).TNFATransition" = type { %object.ModuleInfo.__vtbl*, i8*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*, %"tango.text.Regex.Predicate!(dchar).Predicate", i32, i32, i32 } - %"tango.text.Regex.TNFATransition!(dchar).TNFATransition.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)* } - %"tango.text.Util.DelimFruct!(char).DelimFruct" = type { %"byte[]", %"byte[]" } - %"tango.text.Util.LineFruct!(char).LineFruct" = type { %"byte[]" } - %"tango.text.convert.Integer._FormatterInfo!(char)._FormatterInfo" = type { i32, %"byte[]", %"byte[]" } - %"tango.text.convert.Integer._FormatterInfo!(dchar)._FormatterInfo" = type { i32, %"Act[]", %"Act[]" } - %"tango.text.convert.Integer._FormatterInfo!(wchar)._FormatterInfo" = type { i32, %"wchar[]", %"wchar[]" } - %"tango.text.convert.Layout.Layout!(char).Layout" = type { %"tango.text.convert.Layout.Layout!(char).Layout.__vtbl"*, i8* } - %"tango.text.convert.Layout.Layout!(char).Layout.__vtbl" = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, %"byte[]" (%"tango.text.convert.Layout.Layout!(char).Layout"*, %"byte[]", %"byte[]", %object.TypeInfo*, i8*)*, %"byte[]" (%"tango.text.convert.Layout.Layout!(char).Layout"*, %"byte[]", i64, %"byte[]", i64, %"byte[]")*, %"byte[]" (%"tango.text.convert.Layout.Layout!(char).Layout"*, %"byte[]", double, %"byte[]")* } - %tango.time.Time.Date = type { i32, i32, i32, i32, i32, i32 } - %tango.time.Time.DateTime = type { %tango.time.Time.Date, %tango.time.Time.TimeOfDay } - %tango.time.Time.Time = type { i64 } - %tango.time.Time.TimeOfDay = type { i32, i32, i32, i32 } - %tango.time.Time.TimeSpan = type { i64 } - %tango.time.chrono.Calendar.Calendar = type { %tango.time.chrono.Calendar.Calendar.__vtbl*, i8* } - %tango.time.chrono.Calendar.Calendar.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.time.Time.Date*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, void (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32*, i32*, i32*, i32*, i32*, i32*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.DateTime*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*, %tango.time.Time.TimeOfDay*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar! *, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32, i32)*, i1 (%tango.time.chrono.Calendar.Calendar*, i32)*, i1 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, %"Act[]" (%tango.time.chrono.Calendar.Calendar*)*, i32 (%tango.time.chrono.Calendar.Calendar*! )*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.! Calendar *, %tango.time.Time.Time*, i32, i1)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32)* } - %tango.time.chrono.Gregorian.Gregorian = type { %tango.time.chrono.Gregorian.Gregorian.__vtbl*, i8*, i32 } - %tango.time.chrono.Gregorian.Gregorian.__vtbl = type { %object.ClassInfo*, %"byte[]" (%object.Object*)*, i32 (%object.Object*)*, i32 (%object.Object*, %object.Object*)*, i32 (%object.Object*, %object.Object*)*, void (%tango.time.Time.Date*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*)*, void (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*, i32*, i32*, i32*, i32*, i32*, i32*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.DateTime*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Date*, %tango.time.Time.TimeOfDay*)*, void (%tango.time.Time.Time*, %tango.time.chrono.Gregorian.Gregorian*, i32, i32, i32, i32, i32, i32, i32, i32)*, i32 (%tango.time.chrono.Gregorian.G! regorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32)*, i32 (%tango.time.chrono.Calendar.Calendar*, %tango.time.Time.Time*, i32, i32)*, i1 (%tango.time.chrono.Calendar.Calendar*, i32)*, i1 (%tango.time.chrono.Gregorian.Gregorian*, i32, i32)*, %"Act[]" (%tango.time.chrono.Gregorian.Gregorian*)*, i32 (%tango.ti! me.chrono.Gregorian.Gregorian*)*, void (%tango.time.Time.Time*! , %tango .time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*, i32, i1)*, void (%tango.time.Time.Time*, %tango.time.chrono.Gregorian.Gregorian*, %tango.time.Time.Time*, i32)*, i32 (%tango.time.chrono.Gregorian.Gregorian*)* } - %"ubyte[]" = type { i32, i8* } - %"uint delegate(char[])" = type { i8*, i32 (i8*, %"byte[]")* } - %"uint delegate(void[])" = type { i8*, i32 (i8*, %"byte[]")* } - %"uint[]" = type { i32, i32* } - %"void delegate(char[])" = type { i8*, void (i8*, %"byte[]")* } - %"void delegate(uint pos)" = type { i8*, void (i8*, i32)* } - %"void*[]" = type { i32, i8** } - %"void[]" = type { i32, i8* } - %"wchar[]" = type { i32, i16* } - %"wchar[][]" = type { i32, %"wchar[]"* } - at _D5tango3net3ftp9FtpClient10FtpAddress6__initZ = constant %tango.net.ftp.FtpClient.FtpAddress { %"byte[]" zeroinitializer, %"byte[]" zeroinitializer, %"byte[]" { i32 9, i8* getelementptr ([10 x i8]* @.str, i32 0, i32 0) }, %"byte[]" { i32 19, i8* getelementptr ([20 x i8]* @.str1, i32 0, i32 0) }, i32 21 }, align 4 ; <%tango.net.ftp.FtpClient.FtpAddress*> [#uses=1] - at .str = internal constant [10 x i8] c"anonymous\00" ; <[10 x i8]*> [#uses=1] - at .str1 = internal constant [20 x i8] c"anonymous at anonymous\00" ; <[20 x i8]*> [#uses=1] - at _D46TypeInfo_S5tango3net3ftp9FtpClient10FtpAddress6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 34, i8* getelementptr ([35 x i8]* @.str2, i32 0, i32 0) }, %"byte[]" { i32 36, i8* bitcast (%tango.net.ftp.FtpClient.FtpAddress* @_D5tango3net3ftp9FtpClient10FtpAddress6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 1 } ; <%20*> [#uses=1] - at _D6Object7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=11] - at _D15TypeInfo_Struct6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=5] - at .str2 = internal constant [35 x i8] c"tango.net.ftp.FtpClient.FtpAddress\00" ; <[35 x i8]*> [#uses=1] - at _D5tango3net3ftp9FtpClient11FtpResponse6__initZ = constant %tango.net.ftp.FtpClient.FtpResponse { [3 x i8] c"000", %"byte[]" zeroinitializer }, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - at _D5tango3net3ftp9FtpClient19FtpConnectionDetail6__initZ = constant %tango.net.ftp.FtpClient.FtpConnectionDetail { i32 1, %tango.net.Socket.Address* null, %tango.net.Socket.Address* null }, align 4 ; <%tango.net.ftp.FtpClient.FtpConnectionDetail*> [#uses=0] - at _D5tango3net3ftp9FtpClient10FtpFeature6__initZ = constant %tango.net.ftp.FtpClient.FtpFeature zeroinitializer, align 4 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] - at _D46TypeInfo_S5tango3net3ftp9FtpClient10FtpFeature6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 34, i8* getelementptr ([35 x i8]* @.str5, i32 0, i32 0) }, %"byte[]" { i32 16, i8* bitcast (%tango.net.ftp.FtpClient.FtpFeature* @_D5tango3net3ftp9FtpClient10FtpFeature6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 1 } ; <%20*> [#uses=1] - at .str5 = internal constant [35 x i8] c"tango.net.ftp.FtpClient.FtpFeature\00" ; <[35 x i8]*> [#uses=1] - at _D5tango3net3ftp9FtpClient11FtpFileInfo6__initZ = constant %tango.net.ftp.FtpClient.FtpFileInfo { %"byte[]" zeroinitializer, i32 0, i64 -1, %tango.time.Time.Time { i64 3155378975999999999 }, %tango.time.Time.Time { i64 3155378975999999999 }, %"byte[]" zeroinitializer, i8* null }, align 4 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=1] - at _D5tango4time4Time4Time3maxS5tango4time4Time4Time = external constant %tango.time.Time.Time, align 4 ; <%tango.time.Time.Time*> [#uses=1] - at _D47TypeInfo_S5tango3net3ftp9FtpClient11FtpFileInfo6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 35, i8* getelementptr ([36 x i8]* @.str6, i32 0, i32 0) }, %"byte[]" { i32 48, i8* bitcast (%tango.net.ftp.FtpClient.FtpFileInfo* @_D5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 1 } ; <%20*> [#uses=1] - at .str6 = internal constant [36 x i8] c"tango.net.ftp.FtpClient.FtpFileInfo\00" ; <[36 x i8]*> [#uses=1] - at _D9Exception7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=1] - at _D5tango3net3ftp9FtpClient12FtpException7__ClassZ = global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 40, i8* bitcast (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ to i8*) }, %"byte[]" { i32 36, i8* getelementptr ([37 x i8]* @.str7, i32 0, i32 0) }, %"void*[]" { i32 6, i8** bitcast (%tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D9Exception7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D48TypeInfo_C5tango3net3ftp9FtpClient12FtpException6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=17] - at _D5tango3net3ftp9FtpClient12FtpException6__initZ = constant %tango.net.ftp.FtpClient.FtpException { %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, i8* null, %"byte[]" zeroinitializer, %"byte[]" zeroinitializer, i32 0, %object.Exception.TraceInfo* null, %object.Exception* null, [3 x i8] c"000" }, align 4 ; <%tango.net.ftp.FtpClient.FtpException*> [#uses=2] - at _D5tango3net3ftp9FtpClient12FtpException6__vtblZ = constant %tango.net.ftp.FtpClient.FtpException.__vtbl { %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ, %"byte[]" (%tango.net.ftp.FtpClient.FtpException*)* @_D5tango3net3ftp9FtpClient12FtpException8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, void (%object.Exception*, %"void delegate(char[])")* @_D6object9Exception8writeOutMFDFAaZvZv } ; <%tango.net.ftp.FtpClient.FtpException.__vtbl*> [#uses=12] - at _D48TypeInfo_C5tango3net3ftp9FtpClient12FtpException6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at _D14TypeInfo_Class6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=10] - at _D9ClassInfo6__vtblZ = external constant %object.ClassInfo.__vtbl ; <%object.ClassInfo.__vtbl*> [#uses=10] - at .str7 = internal constant [37 x i8] c"tango.net.ftp.FtpClient.FtpException\00" ; <[37 x i8]*> [#uses=1] - at _D5tango3net3ftp6Telnet6Telnet7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=1] - at _D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ = global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 8252, i8* bitcast (%tango.net.ftp.FtpClient.FTPConnection* @_D5tango3net3ftp9FtpClient13FTPConnection6__initZ to i8*) }, %"byte[]" { i32 37, i8* getelementptr ([38 x i8]* @.str9, i32 0, i32 0) }, %"void*[]" { i32 63, i8** bitcast (%tango.net.ftp.FtpClient.FTPConnection.__vtbl* @_D5tango3net3ftp9FtpClient13FTPConnection6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D5tango3net3ftp6Telnet6Telnet7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* bitcast (%tango.net.ftp.FtpClient.FTPConnection* (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection5_ctorMFZC5tango3net3ftp9FtpClient13FTPConnection to i8*), %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D49TypeInfo_C5tango3net3ftp9FtpClient13FTPConnection6__initZ to %object.T! ypeInfo*) } ; <%object.ClassInfo*> [#uses=3] - at _D5tango3net3ftp9FtpClient13FTPConnection6__initZ = constant %tango.net.ftp.FtpClient.FTPConnection { %tango.net.ftp.FtpClient.FTPConnection.__vtbl* @_D5tango3net3ftp9FtpClient13FTPConnection6__vtblZ, i8* null, %tango.net.SocketConduit.SocketConduit* null, %"tango.io.stream.Iterator.Iterator!(char).Iterator"* null, [8192 x i8] c"\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\ FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF! \FF\FF\F F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\F! F\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\! FF\FF\FF \FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF", %"FtpFeature[]" zeroinitializer, %tango.net.ftp.FtpClient.FtpConnectionDetail { i32 1, %tango.net.Socket.Address* null, %tango.net.Socket.Address* null }, i32 0, %"byte[]" { i32 0, i8* getelementptr ([1 x i8]* @.str8, i32 0, i32 0) }, %tango.net.SocketConduit.SocketConduit* null, %tango.time.Time.Time { i64 50000000 } }, align 4 ; <%tango.net.ftp.FtpClient.FTPConnection*> [#uses=1] - at _D5tango3net3ftp9FtpClient13FTPConnection6__vtblZ = constant %tango.net.ftp.FtpClient.FTPConnection.__vtbl { %object.ClassInfo* @_D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFAaZv, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")* @_D5tango3net3ftp6Telnet6Telnet8sendlineMFAvZv, void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")* @_D5tango3net3ftp6Telnet6Telnet8sendDataMFAvZv, %"byte[]" (%tango.net.ftp.Telnet.Telnet*)* @_D5tango3net3ftp6Telnet6Telnet8readLineMFZAa, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)* @_D5tango3net3ftp6Telnet6Telnet19findAvail! ableServerMFAaiZC5tango3net13SocketConduit13SocketConduit, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFZS5tango4time4Time8TimeSpan, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.time.Time.Time*)* @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFS5tango4time4Time8TimeSpanZv, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection12shutdownTimeMFZS5tango4time4Time8TimeSpan, %"FtpFeature[]" (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection17supportedFeaturesMFZAS5tango3net3ftp9FtpClient10FtpFeature, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)* @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFS5tango3net3ftp9FtpClient11FtpResponseZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpAddress*)* @_D5tango3net3ftp9FtpClient13FT! PConnection7connectMFS5tango3net3ftp9FtpClient10FtpAddressZv, ! void (%t ango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection7connectMFAaAaAakZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection5closeMFZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection10setPassiveMFZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i16, %"byte[]", i16)* @_D5tango3net3ftp9FtpClient13FTPConnection9setActiveMFAatAatZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection2cdMFAaZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection4cdupMFZv, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection3cwdMFZAa, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection5chmodMFAaiZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[! ]")* @_D5tango3net3ftp9FtpClient13FTPConnection3delMFAaZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection2rmMFAaZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection6renameMFAaAaZv, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection5existMFAaZi, i32 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection4sizeMFAaE5tango3net3ftp9FtpClient9FtpFormatZk, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)* @_D5tango3net3ftp9FtpClient13FTPConnection4typeMFE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection8modifiedMFAaZS5tango4time4Time4Time, void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPCo! nnection12parseTimevalMFAaZS5tango4time4Time4Time, void (%tang! o.net.ft p.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection4noopMFZv, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection5mkdirMFAaZAa, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection11getFeaturesMFZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")* @_D5tango3net3ftp9FtpClient13FTPConnection11sendCommandMFAaAAaXv, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFAaZS5tango3net3ftp9FtpClient11FtpResponse, void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFZS5tango3net3ftp9FtpClient11FtpResponse, %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)* @_D5tango3net3ftp9FtpClient13FTPConnection8parse257MFS5tango3n! et3ftp9FtpClient11FtpResponseZAa, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection13getDataSocketMFZC5tango3net13SocketConduit13SocketConduit, %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection14connectPassiveMFZC5tango3net13SocketConduit13SocketConduit, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection11isSupportedMFAaZb, i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection12is_supportedMFAaZb, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit**)* @_D5tango3net3ftp9FtpClient13FTPConnection17prepareDataSocketMFKC5tango3net13SocketConduit13SocketConduitZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)* @_D5tango3net3ftp9FtpClient13FTPConnection17finishDa! taCommandMFC5tango3net13SocketConduit13SocketConduitZv, %tango! .net.Soc ketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")* @_D5tango3net3ftp9FtpClient13FTPConnection18processDataCommandMFAaAAaXC5tango3net13SocketConduit13SocketConduit, %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection2lsMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")* @_D5tango3net3ftp9FtpClient13FTPConnection10readStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit12OutputStreamDFkZvZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)")* @_D5tango3net3ftp9FtpClient13FTPConnection10sendStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit11InputStreamDFkZvZv, %"FtpFileInfo[]" (%! tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection15sendListCommandMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection13parseListLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection13parseMlstLineMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection11getFileInfoMFAaZS5tango3net3ftp9FtpClient11FtpFileInfo, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3putMFAaAaDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTP! Connection*, %"byte[]", %tango.io.model.IConduit.InputStream*,! %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3putMFAaC5tango2io5model8IConduit11InputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %tango.io.model.IConduit.InputStream*, %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection6appendMFAaC5tango2io5model8IConduit11InputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTPConnection*, i32)* @_D5tango3net3ftp9FtpClient13FTPConnection11restartSeekMFkZv, void (%tango.net.ftp.FtpClient.FTPConnection*, i64)* @_D5tango3net3ftp9FtpClient13FTPConnection8allocateMFlZv, void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3getMFAaAaDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, void (%tango.net.ftp.FtpClient.FTPConnection*)* @_D5tango3net3ftp9FtpClient13FTPConnection10enableUTF8MFZv, void (%tango.net.ftp.FtpClient.! FTPConnection*, %"byte[]", %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)", i32)* @_D5tango3net3ftp9FtpClient13FTPConnection3getMFAaC5tango2io5model8IConduit12OutputStreamDFkZvE5tango3net3ftp9FtpClient9FtpFormatZv, %tango.io.model.IConduit.InputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection5inputMFAaZC5tango2io5model8IConduit11InputStream, %tango.io.model.IConduit.OutputStream* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")* @_D5tango3net3ftp9FtpClient13FTPConnection6outputMFAaZC5tango2io5model8IConduit12OutputStream } ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=2] - at .str8 = internal constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1] - at _D49TypeInfo_C5tango3net3ftp9FtpClient13FTPConnection6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str9 = internal constant [38 x i8] c"tango.net.ftp.FtpClient.FTPConnection\00" ; <[38 x i8]*> [#uses=1] - at _D5tango4text5Regex11__T4TNFATwZ4TNFA7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 56, i8* bitcast (%"tango.text.Regex.TNFA!(dchar).TNFA"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ to i8*) }, %"byte[]" { i32 34, i8* getelementptr ([35 x i8]* @.str51, i32 0, i32 0) }, %"void*[]" { i32 7, i8** bitcast (%"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D45TypeInfo_C5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=2] - at _D5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ = weak_odr constant %"tango.text.Regex.TNFA!(dchar).TNFA" { %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"* @_D5tango4text5Regex11__T4TNFATwZ4TNFA6__vtblZ, i8* null, %"Act[]" zeroinitializer, %"TNFAState[]" zeroinitializer, %"tango.text.Regex.TNFAState!(dchar).TNFAState"* null, i1 false, i32 0, i32 0, i32 0, %"tango.text.Regex.List!(TNFATransition).List"* null, i8* null, i8* null }, align 4 ; <%"tango.text.Regex.TNFA!(dchar).TNFA"*> [#uses=1] - at _D5tango4text5Regex11__T4TNFATwZ4TNFA6__vtblZ = weak_odr constant %"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex11__T4TNFATwZ4TNFA7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, i32 (%"tango.text.Regex.TNFA!(dchar).TNFA"*)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA8tagCountMFZk, void (%"tango.text.Regex.TNFA!(dchar).TNFA"*, i1)* @_D5tango4text5Regex11__T4TNFATwZ4TNFA5parseMFbZv } ; <%"tango.text.Regex.TNFA!(dchar).TNFA.__vtbl"*> [#uses=2] - at _D5tango4text5Regex11__T4TNFATwZ4TNFA14operator_namesAAa = weak_odr constant %"char[][]" { i32 17, %"byte[]"* getelementptr ([17 x %"byte[]"]* @.constarray, i32 0, i32 0) }, align 4 ; <%"char[][]"*> [#uses=0] - at .str10 = internal constant [4 x i8] c"EOS\00" ; <[4 x i8]*> [#uses=1] - at .str11 = internal constant [7 x i8] c"concat\00" ; <[7 x i8]*> [#uses=1] - at .str12 = internal constant [2 x i8] c"|\00" ; <[2 x i8]*> [#uses=1] - at .str13 = internal constant [2 x i8] c"(\00" ; <[2 x i8]*> [#uses=1] - at .str14 = internal constant [2 x i8] c")\00" ; <[2 x i8]*> [#uses=1] - at .str15 = internal constant [2 x i8] c"?\00" ; <[2 x i8]*> [#uses=1] - at .str16 = internal constant [2 x i8] c"*\00" ; <[2 x i8]*> [#uses=1] - at .str17 = internal constant [2 x i8] c"+\00" ; <[2 x i8]*> [#uses=1] - at .str18 = internal constant [3 x i8] c"??\00" ; <[3 x i8]*> [#uses=1] - at .str19 = internal constant [3 x i8] c"*?\00" ; <[3 x i8]*> [#uses=1] - at .str20 = internal constant [3 x i8] c"+?\00" ; <[3 x i8]*> [#uses=1] - at .str21 = internal constant [4 x i8] c"??x\00" ; <[4 x i8]*> [#uses=1] - at .str22 = internal constant [4 x i8] c"*?x\00" ; <[4 x i8]*> [#uses=1] - at .str23 = internal constant [4 x i8] c"+?x\00" ; <[4 x i8]*> [#uses=1] - at .str24 = internal constant [3 x i8] c"(?\00" ; <[3 x i8]*> [#uses=1] - at .str25 = internal constant [6 x i8] c"{x,y}\00" ; <[6 x i8]*> [#uses=1] - at .str26 = internal constant [7 x i8] c"{x,y}?\00" ; <[7 x i8]*> [#uses=1] - at .constarray = internal global [17 x %"byte[]"] [%"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str10, i32 0, i32 0) }, %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str11, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str12, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str13, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str14, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str15, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str16, i32 0, i32 0) }, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str17, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str18, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str19, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str20, i32 0, i32 0) }, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str21, i32 0, i32 0) }, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.s! tr22, i32 0, i32 0) }, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str23, i32 0, i32 0) }, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str24, i32 0, i32 0) }, %"byte[]" { i32 5, i8* getelementptr ([6 x i8]* @.str25, i32 0, i32 0) }, %"byte[]" { i32 6, i8* getelementptr ([7 x i8]* @.str26, i32 0, i32 0) }] ; <[17 x %"byte[]"]*> [#uses=1] - at _D5tango4text5Regex11__T4TNFATwZ4TNFA12action_namesAAa = weak_odr constant %"char[][]" { i32 6, %"byte[]"* getelementptr ([6 x %"byte[]"]* @.constarray33, i32 0, i32 0) }, align 4 ; <%"char[][]"*> [#uses=0] - at .str27 = internal constant [13 x i8] c"push+advance\00" ; <[13 x i8]*> [#uses=1] - at .str28 = internal constant [9 x i8] c"pop+copy\00" ; <[9 x i8]*> [#uses=1] - at .str29 = internal constant [12 x i8] c"pop+advance\00" ; <[12 x i8]*> [#uses=1] - at .str30 = internal constant [17 x i8] c"pop+copy+advance\00" ; <[17 x i8]*> [#uses=1] - at .str31 = internal constant [5 x i8] c"done\00" ; <[5 x i8]*> [#uses=1] - at .str32 = internal constant [6 x i8] c"error\00" ; <[6 x i8]*> [#uses=1] - at .constarray33 = internal global [6 x %"byte[]"] [%"byte[]" { i32 12, i8* getelementptr ([13 x i8]* @.str27, i32 0, i32 0) }, %"byte[]" { i32 8, i8* getelementptr ([9 x i8]* @.str28, i32 0, i32 0) }, %"byte[]" { i32 11, i8* getelementptr ([12 x i8]* @.str29, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str30, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str31, i32 0, i32 0) }, %"byte[]" { i32 5, i8* getelementptr ([6 x i8]* @.str32, i32 0, i32 0) }] ; <[6 x %"byte[]"]*> [#uses=1] - at _D5tango4text5Regex11__T4TNFATwZ4TNFA13action_lookupAE5tango4text5Regex11__T4TNFATwZ4TNFA3Act = weak_odr constant %"Act[]" { i32 289, i32* getelementptr ([289 x i32]* @.constarray34, i32 0, i32 0) }, align 4 ; <%"Act[]"*> [#uses=0] - at .constarray34 = internal global [289 x i32] [i32 4, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 ! 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 5, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0! , i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 ! 1, i32 1 , i32 0, i32 1, i32 1] ; <[289 x i32]*> [#uses=2] - at _D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 52, i8* bitcast (%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to i8*) }, %"byte[]" { i32 54, i8* getelementptr ([55 x i8]* @.str47, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=19] - at _D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ = weak_odr constant %"tango.text.Regex.TNFATransition!(dchar).TNFATransition" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ, i8* null, %"tango.text.Regex.TNFAState!(dchar).TNFAState"* null, %"tango.text.Regex.Predicate!(dchar).Predicate" { %"tango.text.Regex.CharClass!(dchar).CharClass" zeroinitializer, i32 0, i32 0, %"byte[]" zeroinitializer, i32 65535 }, i32 0, i32 0, i32 0 }, align 4 ; <%"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*> [#uses=2] - at _D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=19] - at _D5tango4text5Regex16__T9CharClassTwZ9CharClass13line_startendS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=2] - at _D5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ = external constant %tango.net.Socket.timeval, align 4 ; <%tango.net.Socket.timeval*> [#uses=1] - at _D55TypeInfo_S5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ = linkonce_odr constant %21 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 44, i8* getelementptr ([45 x i8]* @.str35, i32 0, i32 0) }, %"byte[]" { i32 8, i8* bitcast (%tango.net.Socket.timeval* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to i8*) }, i8* null, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange8opEqualsMFPS5tango4text5Regex16__T9CharRangeTwZ9CharRangeZi, i32 (%tango.net.Socket.timeval*, %tango.net.Socket.timeval*)* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange5opCmpMFPS5tango4text5Regex16__T9CharRangeTwZ9CharRangeZi, %"byte[]" (%tango.net.Socket.timeval*)* @_D5tango4text5Regex16__T9CharRangeTwZ9CharRange8toStringMFZAa, i32 0 } ; <%21*> [#uses=1] - at .str35 = internal constant [45 x i8] c"tango.text.Regex.CharRange!(dchar).CharRange\00" ; <[45 x i8]*> [#uses=1] - at _D5tango4text5Regex16__T9CharClassTwZ9CharClass5digitS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=2] - at _D5tango4text5Regex16__T9CharClassTwZ9CharClass10whitespaceS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=6] - at _D5tango4text5Regex16__T9CharClassTwZ9CharClass8any_charS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=3] - at _D5tango4text5Regex16__T9CharClassTwZ9CharClass8dot_operS5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=1] - at _D5tango4text5Regex16__T9CharClassTwZ9CharClass9alphanum_S5tango4text5Regex16__T9CharClassTwZ9CharClass = external constant %"tango.text.Regex.CharClass!(dchar).CharClass", align 4 ; <%"tango.text.Regex.CharClass!(dchar).CharClass"*> [#uses=2] - at _D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 20, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to i8*) }, %"byte[]" { i32 44, i8* getelementptr ([45 x i8]* @.str46, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* bitcast (%"tango.text.Regex.TNFAState!(dchar).TNFAState"* (%"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState5_ctorMFZC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState to i8*), %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9T! NFAState6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=16] - at _D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ = weak_odr constant %"tango.text.Regex.TNFAState!(dchar).TNFAState" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ, i8* null, i1 false, i1 false, i32 0, %"tango.text.Regex.List!(TNFATransition).List"* null }, align 4 ; <%"tango.text.Regex.TNFAState!(dchar).TNFAState"*> [#uses=2] - at _D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=16] - at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 20, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ to i8*) }, %"byte[]" { i32 43, i8* getelementptr ([44 x i8]* @.str45, i32 0, i32 0) }, %"void*[]" { i32 22, i8** bitcast (%"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 36, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D102TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransiti! onZ4List6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=67] - at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFATransition).List" { %"tango.text.Regex.List!(TNFATransition).List.__vtbl"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ, i8* null, i32 0, %"tango.text.Regex.List!(TNFATransition).List.Element"* null, %"tango.text.Regex.List!(TNFATransition).List.Element"* null }, align 4 ; <%"tango.text.Regex.List!(TNFATransition).List"*> [#uses=2] - at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__vtblZ = weak_odr constant %"tango.text.Regex.List!(TNFATransition).List.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11opCatAssignMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransi! tionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11insertAfterMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11insertAfterMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementC5tango4! text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4tex! t5Regex6 8__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List11opCatAssignMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4ListZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List9pushFrontMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"! * (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List12insertBeforeMFC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List12insertBeforeMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZC5tan! go4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitio! nTwZ14TN FATransitionZ4List, %"tango.text.Regex.List!(TNFATransition).List"* (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List9pushFrontMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4ListZC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List, i32 (%"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6lengthMFZk, i1 (%"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List5emptyMFZb, void (%"tango.text.Regex.List!(TNFATransition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List5clearMFZv, void (%"tango.text.Regex.List!(TNFATra! nsition).List"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List3popMFZv, void (%"tango.text.Regex.List!(TNFATransition).List"*, %"tango.text.Regex.List!(TNFATransition).List.Element"*)* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6removeMFC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementZv, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List8elementsMFDFKC5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7ElementZiZi, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref Element)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List16elements_reverseMFDFKC5tango4text5Regex68__T4ListTC5tango4te! xt5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element! ZiZi, i3 2 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7opApplyMFDFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZiZi, i32 (%"tango.text.Regex.List!(TNFATransition).List"*, %"int delegate(ref TNFATransition)")* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List14opApplyReverseMFDFKC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZiZi } ; <%"tango.text.Regex.List!(TNFATransition).List.__vtbl"*> [#uses=67] - at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 24, i8* bitcast (%"tango.text.Regex.List!(TNFATransition).List.Element"* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__initZ to i8*) }, %"byte[]" { i32 51, i8* getelementptr ([52 x i8]* @.str44, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D110TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATrans! itionZ4List7Element6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=8] - at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFATransition).List.Element" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__vtblZ, i8* null, %"tango.text.Regex.TNFATransition!(dchar).TNFATransition"* null, %"tango.text.Regex.List!(TNFATransition).List.Element"* null, %"tango.text.Regex.List!(TNFATransition).List.Element"* null, %"tango.text.Regex.List!(TNFATransition).List"* null }, align 4 ; <%"tango.text.Regex.List!(TNFATransition).List.Element"*> [#uses=2] - at _D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=8] - at _D110TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7Element7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str44 = internal constant [52 x i8] c"tango.text.Regex.List!(TNFATransition).List.Element\00" ; <[52 x i8]*> [#uses=1] - at _D102TypeInfo_C5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex68__T4ListTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ4List7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str45 = internal constant [44 x i8] c"tango.text.Regex.List!(TNFATransition).List\00" ; <[44 x i8]*> [#uses=1] - at _D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex16__T9TNFAStateTwZ9TNFAState7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str46 = internal constant [45 x i8] c"tango.text.Regex.TNFAState!(dchar).TNFAState\00" ; <[45 x i8]*> [#uses=1] - at _D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str47 = internal constant [55 x i8] c"tango.text.Regex.TNFATransition!(dchar).TNFATransition\00" ; <[55 x i8]*> [#uses=1] - at _D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 28, i8* bitcast (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ to i8*) }, %"byte[]" { i32 50, i8* getelementptr ([51 x i8]* @.str48, i32 0, i32 0) }, %"void*[]" { i32 7, i8** bitcast (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* bitcast (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment5_ctorMFZC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment to i8*), %object.Ty! peInfo* bitcast (%object.TypeInfo_Class* @_D63TypeInfo_C5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=13] - at _D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ = weak_odr constant %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment" { %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl"* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ, i8* null, %"tango.text.Regex.List!(TNFATransition).List"* null, %"tango.text.Regex.List!(TNFATransition).List"* null, %"tango.text.Regex.List!(TNFATransition).List"* null, %"tango.text.Regex.List!(TNFATransition).List"* null, i1 false }, align 4 ; <%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*> [#uses=2] - at _D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__vtblZ = weak_odr constant %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment8setEntryMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZv, void (%"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAState!(dchar).TNFAState"*)* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7setExitMFC5tango4text5Regex16__T9TNFAStateTwZ9TNFAStateZv } ; <%"tango.text.Regex! .TNFAFragment!(dchar).TNFAFragment.__vtbl"*> [#uses=13] - at _D63TypeInfo_C5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragment7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str48 = internal constant [51 x i8] c"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment\00" ; <[51 x i8]*> [#uses=1] - at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 20, i8* bitcast (%"tango.text.Regex.List!(TNFAFragment).List"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ to i8*) }, %"byte[]" { i32 41, i8* getelementptr ([42 x i8]* @.str50, i32 0, i32 0) }, %"void*[]" { i32 22, i8** bitcast (%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 36, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D98TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ to %! object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=3] - at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFAFragment).List" { %"tango.text.Regex.List!(TNFAFragment).List.__vtbl"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ, i8* null, i32 0, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null }, align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List"*> [#uses=2] - at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__vtblZ = weak_odr constant %"tango.text.Regex.List!(TNFAFragment).List.__vtbl" { %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11opCatAssignMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex! .List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11insertAfterMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11insertAfterMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListT! C5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, ! %"tango. text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List11opCatAssignMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4ListZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List9pushFrontMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*, %"tango.text.Regex! .TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List12insertBeforeMFC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).List.Element"*, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List12insertBeforeMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, %"tango.text.Regex.List!(TNFAFragment).List"* (%"tango.text.Regex.List!(TNFAFragment).! List"*, %"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5ta! ngo4text 5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List9pushFrontMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4ListZC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6lengthMFZk, i1 (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List5emptyMFZb, void (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List5clearMFZv, void (%"tango.text.Regex.List!(TNFAFragment).List"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List3popMFZv, void (%"tango.text.Regex.List!(TNFAFragment).List"*, %"tango.text.Regex.List!(TNFAFragment).Lis! t.Element"*)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6removeMFC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementZv, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %1)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List8elementsMFDFKC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementZiZi, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %1)* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List16elements_reverseMFDFKC5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7ElementZiZi, i32 (%"tango.text.Regex.List!(TNFAFragment).List"*, %"int delegate(ref TNFAFragment)")* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7opApplyMFDFKC5tango4text5Regex20__T12TNFAFragmentTwZ12! TNFAFragmentZiZi, i32 (%"tango.text.Regex.List!(TNFAFragment).! List"*, %"int delegate(ref TNFAFragment)")* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List14opApplyReverseMFDFKC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZiZi } ; <%"tango.text.Regex.List!(TNFAFragment).List.__vtbl"*> [#uses=3] - at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element7__ClassZ = weak_odr global %object.ClassInfo { %object.ClassInfo.__vtbl* @_D9ClassInfo6__vtblZ, i8* null, %"byte[]" { i32 24, i8* bitcast (%"tango.text.Regex.List!(TNFAFragment).List.Element"* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__initZ to i8*) }, %"byte[]" { i32 49, i8* getelementptr ([50 x i8]* @.str49, i32 0, i32 0) }, %"void*[]" { i32 5, i8** bitcast (%object.ModuleInfo.__vtbl* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__vtblZ to i8**) }, %"Interface[]" zeroinitializer, %object.ClassInfo* @_D6Object7__ClassZ, i8* null, i8* null, i32 44, i8* null, %"OffsetTypeInfo[]" zeroinitializer, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D106TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Elemen! t6__initZ to %object.TypeInfo*) } ; <%object.ClassInfo*> [#uses=8] - at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__initZ = weak_odr constant %"tango.text.Regex.List!(TNFAFragment).List.Element" { %object.ModuleInfo.__vtbl* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__vtblZ, i8* null, %"tango.text.Regex.TNFAFragment!(dchar).TNFAFragment"* null, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null, %"tango.text.Regex.List!(TNFAFragment).List.Element"* null, %"tango.text.Regex.List!(TNFAFragment).List"* null }, align 4 ; <%"tango.text.Regex.List!(TNFAFragment).List.Element"*> [#uses=2] - at _D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__vtblZ = weak_odr constant %object.ModuleInfo.__vtbl { %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element7__ClassZ, %"byte[]" (%object.Object*)* @_D6object6Object8toStringMFZAa, i32 (%object.Object*)* @_D6object6Object6toHashMFZk, i32 (%object.Object*, %object.Object*)* @_D6object6Object5opCmpMFC6ObjectZi, i32 (%object.Object*, %object.Object*)* @_D6object6Object8opEqualsMFC6ObjectZi } ; <%object.ModuleInfo.__vtbl*> [#uses=8] - at _D106TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7Element7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str49 = internal constant [50 x i8] c"tango.text.Regex.List!(TNFAFragment).List.Element\00" ; <[50 x i8]*> [#uses=1] - at _D98TypeInfo_C5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex64__T4ListTC5tango4text5Regex20__T12TNFAFragmentTwZ12TNFAFragmentZ4List7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str50 = internal constant [42 x i8] c"tango.text.Regex.List!(TNFAFragment).List\00" ; <[42 x i8]*> [#uses=1] - at _D45TypeInfo_C5tango4text5Regex11__T4TNFATwZ4TNFA6__initZ = linkonce_odr constant %object.TypeInfo_Class { %object.TypeInfo.__vtbl* @_D14TypeInfo_Class6__vtblZ, i8* null, %object.ClassInfo* @_D5tango4text5Regex11__T4TNFATwZ4TNFA7__ClassZ } ; <%object.TypeInfo_Class*> [#uses=1] - at .str51 = internal constant [35 x i8] c"tango.text.Regex.TNFA!(dchar).TNFA\00" ; <[35 x i8]*> [#uses=1] - at _D5tango4text7convert7Integer22__T14_FormatterInfoTaZ14_FormatterInfo6__initZ = weak_odr constant %nest.parseListLine zeroinitializer, align 4 ; <%nest.parseListLine*> [#uses=0] - at _D5tango4text4Util16__T9LineFructTaZ9LineFruct6__initZ = weak_odr constant %"tango.text.Util.LineFruct!(char).LineFruct" zeroinitializer, align 4 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=0] - at _D5tango4core5Array14__T7IsEqualTaZ7IsEqual6__initZ = weak_odr constant %"tango.core.Array.IsEqual!(char).IsEqual" zeroinitializer, align 1 ; <%"tango.core.Array.IsEqual!(char).IsEqual"*> [#uses=0] - at _D5tango4core6Traits63__T14isCallableTypeTS5tango4core5Array14__T7IsEqualTaZ7IsEqualZ14isCallableTypeb = weak_odr constant i1 true, align 1 ; [#uses=0] - at _D12TypeInfo_G4a6__initZ = linkonce_odr constant %object.TypeInfo_StaticArray { %object.TypeInfo.__vtbl* @_D20TypeInfo_StaticArray6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_a6__initZ, i32 4 } ; <%object.TypeInfo_StaticArray*> [#uses=1] - at _D20TypeInfo_StaticArray6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=1] - at _D10TypeInfo_a6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=1] - at _D5tango4text4Util18__T10DelimFructTaZ10DelimFruct6__initZ = weak_odr constant %tango.net.ftp.FtpClient.FtpFeature zeroinitializer, align 4 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=0] - at _D5tango4text5Regex56__T5StackTE5tango4text5Regex11__T4TNFATwZ4TNFA8OperatorZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(Operator).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(Operator).Stack"*> [#uses=0] - at _D55TypeInfo_AE5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Enum* @_D54TypeInfo_E5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at _D14TypeInfo_Array6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=8] - at _D54TypeInfo_E5tango4text5Regex11__T4TNFATwZ4TNFA8Operator6__initZ = linkonce_odr constant %object.TypeInfo_Enum { %object.TypeInfo.__vtbl* @_D13TypeInfo_Enum6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_i6__initZ, %"byte[]" { i32 43, i8* getelementptr ([44 x i8]* @.str57, i32 0, i32 0) }, %"byte[]" zeroinitializer } ; <%object.TypeInfo_Enum*> [#uses=1] - at _D13TypeInfo_Enum6__vtblZ = external constant %object.TypeInfo.__vtbl ; <%object.TypeInfo.__vtbl*> [#uses=1] - at _D10TypeInfo_i6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=1] - at .str57 = internal constant [44 x i8] c"tango.text.Regex.TNFA!(dchar).TNFA.Operator\00" ; <[44 x i8]*> [#uses=1] - at _D5tango4text5Regex12__T5StackTkZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(Operator).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(Operator).Stack"*> [#uses=0] - at _D5tango4text5Regex11__T4PairTkZ4Pair6__initZ = weak_odr constant %tango.net.Socket.timeval zeroinitializer, align 4 ; <%tango.net.Socket.timeval*> [#uses=1] - at _D45TypeInfo_S5tango4text5Regex11__T4PairTkZ4Pair6__initZ = linkonce_odr constant %20 { %object.TypeInfo.__vtbl* @_D15TypeInfo_Struct6__vtblZ, i8* null, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str59, i32 0, i32 0) }, %"byte[]" { i32 8, i8* bitcast (%tango.net.Socket.timeval* @_D5tango4text5Regex11__T4PairTkZ4Pair6__initZ to i8*) }, i8* null, i8* null, i8* null, i8* null, i32 0 } ; <%20*> [#uses=1] - at .str59 = internal constant [34 x i8] c"tango.text.Regex.Pair!(uint).Pair\00" ; <[34 x i8]*> [#uses=1] - at _D5tango4text5Regex47__T5StackTS5tango4text5Regex11__T4PairTkZ4PairZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(Pair!(uint)).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(Pair!(uint)).Stack"*> [#uses=0] - at _D46TypeInfo_AS5tango4text5Regex11__T4PairTkZ4Pair6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%20* @_D45TypeInfo_S5tango4text5Regex11__T4PairTkZ4Pair6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at _D5tango4text5Regex69__T5StackTC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransitionZ5Stack6__initZ = weak_odr constant %"tango.text.Regex.Stack!(TNFATransition).Stack" zeroinitializer, align 4 ; <%"tango.text.Regex.Stack!(TNFATransition).Stack"*> [#uses=0] - at _D68TypeInfo_AC5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D67TypeInfo_C5tango4text5Regex22__T14TNFATransitionTwZ14TNFATransition6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at _D56TypeInfo_AS5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%21* @_D55TypeInfo_S5tango4text5Regex16__T9CharRangeTwZ9CharRange6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at .str65 = internal constant [7 x i8] c"ftp://\00" ; <[7 x i8]*> [#uses=1] - at _D11TypeInfo_Aa6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=67] - at .str66 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] - at .str67 = internal constant [4 x i8] c"220\00" ; <[4 x i8]*> [#uses=1] - at .str68 = internal constant [5 x i8] c"USER\00" ; <[5 x i8]*> [#uses=1] - at .str69 = internal constant [4 x i8] c"331\00" ; <[4 x i8]*> [#uses=1] - at .str70 = internal constant [5 x i8] c"PASS\00" ; <[5 x i8]*> [#uses=1] - at .str71 = internal constant [4 x i8] c"230\00" ; <[4 x i8]*> [#uses=1] - at .str72 = internal constant [4 x i8] c"202\00" ; <[4 x i8]*> [#uses=1] - at .str73 = internal constant [5 x i8] c"QUIT\00" ; <[5 x i8]*> [#uses=1] - at .str74 = internal constant [4 x i8] c"221\00" ; <[4 x i8]*> [#uses=1] - at _D5tango3net6Socket11IPv4Address7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=8] - at _D5tango3net6Socket11IPv4Address6__initZ = external constant %22, align 4 ; <%22*> [#uses=1] - at _D5tango3net6Socket11IPv4Address6__vtblZ = external constant %tango.net.Socket.IPv4Address.__vtbl ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=5] - at .str75 = internal constant [4 x i8] c"CWD\00" ; <[4 x i8]*> [#uses=1] - at .str76 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] - at .str77 = internal constant [5 x i8] c"CDUP\00" ; <[5 x i8]*> [#uses=1] - at .str78 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str79 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] - at .str80 = internal constant [4 x i8] c"PWD\00" ; <[4 x i8]*> [#uses=1] - at .str81 = internal constant [4 x i8] c"257\00" ; <[4 x i8]*> [#uses=1] - at .str82 = internal constant [4 x i8] c"000\00" ; <[4 x i8]*> [#uses=3] - at .str84 = internal constant [11 x i8] c"SITE CHMOD\00" ; <[11 x i8]*> [#uses=1] - at .str85 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str86 = internal constant [5 x i8] c"DELE\00" ; <[5 x i8]*> [#uses=1] - at .str87 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] - at .str88 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] - at .str89 = internal constant [4 x i8] c"RMD\00" ; <[4 x i8]*> [#uses=1] - at .str90 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] - at .str91 = internal constant [5 x i8] c"RNFR\00" ; <[5 x i8]*> [#uses=1] - at .str92 = internal constant [4 x i8] c"350\00" ; <[4 x i8]*> [#uses=1] - at .str93 = internal constant [5 x i8] c"RNTO\00" ; <[5 x i8]*> [#uses=1] - at .str94 = internal constant [4 x i8] c"250\00" ; <[4 x i8]*> [#uses=1] - at .str95 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at .str96 = internal constant [5 x i8] c"SIZE\00" ; <[5 x i8]*> [#uses=1] - at .str97 = internal constant [4 x i8] c"213\00" ; <[4 x i8]*> [#uses=1] - at .str98 = internal constant [5 x i8] c"TYPE\00" ; <[5 x i8]*> [#uses=1] - at .str99 = internal constant [2 x i8] c"A\00" ; <[2 x i8]*> [#uses=1] - at .str100 = internal constant [5 x i8] c"TYPE\00" ; <[5 x i8]*> [#uses=1] - at .str101 = internal constant [2 x i8] c"I\00" ; <[2 x i8]*> [#uses=1] - at .str102 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str103 = internal constant [5 x i8] c"MDTM\00" ; <[5 x i8]*> [#uses=1] - at .str104 = internal constant [4 x i8] c"213\00" ; <[4 x i8]*> [#uses=1] - at .str105 = internal constant [32 x i8] c"CLIENT: Unable to parse timeval\00" ; <[32 x i8]*> [#uses=1] - at .str106 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at _D5tango4time6chrono9Gregorian9Gregorian7genericC5tango4time6chrono9Gregorian9Gregorian = external global %tango.time.chrono.Gregorian.Gregorian*, align 4 ; <%tango.time.chrono.Gregorian.Gregorian**> [#uses=2] - at .str109 = internal constant [5 x i8] c"NOOP\00" ; <[5 x i8]*> [#uses=1] - at .str110 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str111 = internal constant [4 x i8] c"MKD\00" ; <[4 x i8]*> [#uses=1] - at .str112 = internal constant [4 x i8] c"257\00" ; <[4 x i8]*> [#uses=1] - at .str113 = internal constant [5 x i8] c"FEAT\00" ; <[5 x i8]*> [#uses=1] - at .str114 = internal constant [4 x i8] c"211\00" ; <[4 x i8]*> [#uses=1] - at _D47TypeInfo_AS5tango3net3ftp9FtpClient10FtpFeature6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%20* @_D46TypeInfo_S5tango3net3ftp9FtpClient10FtpFeature6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at .str115 = internal constant [5 x i8] c"FEAT\00" ; <[5 x i8]*> [#uses=1] - at .str117 = internal constant [3 x i8] c"\0D\0A\00", align 2 ; <[3 x i8]*> [#uses=1] - at .str118 = internal constant [4 x i8] c"500\00" ; <[4 x i8]*> [#uses=1] - at .str120 = internal constant [24 x i8] c"unknown connection type\00" ; <[24 x i8]*> [#uses=1] - at _D5tango3net13SocketConduit13SocketConduit7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] - at _D5tango3net13SocketConduit13SocketConduit6__initZ = external constant %23, align 4 ; <%23*> [#uses=1] - at _D5tango3net13SocketConduit13SocketConduit6__vtblZ = external constant %tango.net.SocketConduit.SocketConduit.__vtbl ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=2] - at .str122 = internal constant [5 x i8] c"EPRT\00" ; <[5 x i8]*> [#uses=1] - at .str123 = internal constant [5 x i8] c"EPRT\00" ; <[5 x i8]*> [#uses=1] - at .str124 = internal constant [10 x i8] c"|1|%0|%1|\00" ; <[10 x i8]*> [#uses=1] - at .str125 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str126 = internal constant [18 x i8] c"%0,%1,%2,%3,%4,%5\00" ; <[18 x i8]*> [#uses=1] - at .str127 = internal constant [5 x i8] c"PORT\00" ; <[5 x i8]*> [#uses=1] - at .str128 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str129 = internal constant [5 x i8] c"SPSV\00" ; <[5 x i8]*> [#uses=1] - at .str130 = internal constant [5 x i8] c"SPSV\00" ; <[5 x i8]*> [#uses=1] - at .str131 = internal constant [4 x i8] c"227\00" ; <[4 x i8]*> [#uses=1] - at .str132 = internal constant [5 x i8] c"EPSV\00" ; <[5 x i8]*> [#uses=1] - at .str133 = internal constant [5 x i8] c"EPSV\00" ; <[5 x i8]*> [#uses=1] - at .str134 = internal constant [4 x i8] c"229\00" ; <[4 x i8]*> [#uses=1] - at .str135 = internal constant [34 x i8] c"\5C([^0-9][^0-9][^0-9](\5Cd+)[^0-9]\5C)\00" ; <[34 x i8]*> [#uses=1] - at .str136 = internal constant [32 x i8] c"CLIENT: Unable to parse address\00" ; <[32 x i8]*> [#uses=1] - at .str137 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at .str138 = internal constant [5 x i8] c"PASV\00" ; <[5 x i8]*> [#uses=1] - at .str139 = internal constant [4 x i8] c"227\00" ; <[4 x i8]*> [#uses=1] - at .str140 = internal constant [54 x i8] c"(\5Cd+),\5Cs*(\5Cd+),\5Cs*(\5Cd+),\5Cs*(\5Cd+),\5Cs*(\5Cd+)(,\5Cs*(\5Cd+))?\00" ; <[54 x i8]*> [#uses=1] - at .str141 = internal constant [32 x i8] c"CLIENT: Unable to parse address\00" ; <[32 x i8]*> [#uses=1] - at .str142 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at .str146 = internal constant [24 x i8] c"unknown connection type\00" ; <[24 x i8]*> [#uses=1] - at _D5tango3net6Socket9SocketSet7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=3] - at _D5tango3net6Socket9SocketSet6__initZ = external constant %24, align 4 ; <%24*> [#uses=1] - at _D5tango3net6Socket9SocketSet6__vtblZ = external constant %tango.net.Socket.SocketSet.__vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=3] - at .str147 = internal constant [34 x i8] c"CLIENT: No connection from server\00" ; <[34 x i8]*> [#uses=1] - at .str148 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] - at _D5tango3net6Socket6Socket7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] - at _D5tango3net6Socket6Socket6__initZ = external constant %25, align 4 ; <%25*> [#uses=1] - at _D5tango3net6Socket6Socket6__vtblZ = external constant %tango.net.Socket.Socket.__vtbl ; <%tango.net.Socket.Socket.__vtbl*> [#uses=2] - at .str149 = internal constant [4 x i8] c"226\00" ; <[4 x i8]*> [#uses=1] - at .str150 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] - at .str151 = internal constant [11 x i8] c"Bad finish\00" ; <[11 x i8]*> [#uses=1] - at .str152 = internal constant [4 x i8] c"150\00" ; <[4 x i8]*> [#uses=1] - at .str153 = internal constant [4 x i8] c"125\00" ; <[4 x i8]*> [#uses=1] - at .str154 = internal constant [5 x i8] c"MLST\00" ; <[5 x i8]*> [#uses=1] - at .str155 = internal constant [5 x i8] c"MLSD\00" ; <[5 x i8]*> [#uses=1] - at .str156 = internal constant [5 x i8] c"MLSD\00" ; <[5 x i8]*> [#uses=1] - at _D5tango2io6device5Array5Array7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] - at _D5tango2io6device5Array5Array6__initZ = external constant %26, align 4 ; <%26*> [#uses=1] - at _D5tango2io6device5Array5Array6__vtblZ = external constant %tango.io.device.Array.Array.__vtbl ; <%tango.io.device.Array.Array.__vtbl*> [#uses=2] - at _D48TypeInfo_AS5tango3net3ftp9FtpClient11FtpFileInfo6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%20* @_D47TypeInfo_S5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at .str161 = internal constant [34 x i8] c"CLIENT: Timeout when reading data\00" ; <[34 x i8]*> [#uses=1] - at .str162 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] - at .str163 = internal constant [34 x i8] c"CLIENT: Timeout when sending data\00" ; <[34 x i8]*> [#uses=1] - at .str164 = internal constant [4 x i8] c"420\00" ; <[4 x i8]*> [#uses=1] - at .str165 = internal constant [5 x i8] c"LIST\00" ; <[5 x i8]*> [#uses=1] - at .str166 = internal constant [5 x i8] c"LIST\00" ; <[5 x i8]*> [#uses=1] - at .str167 = internal constant [11 x i8] c"0123456789\00" ; <[11 x i8]*> [#uses=2] - at .str168 = internal constant [5 x i8] c"0000\00" ; <[5 x i8]*> [#uses=1] - at .str169 = internal constant [10 x i8] c"UNIX.mode\00" ; <[10 x i8]*> [#uses=1] - at .str170 = internal constant [11 x i8] c"0123456789\00" ; <[11 x i8]*> [#uses=2] - at .str171 = internal constant [5 x i8] c" -> \00" ; <[5 x i8]*> [#uses=1] - at .str172 = internal constant [7 x i8] c"target\00" ; <[7 x i8]*> [#uses=1] - at .str173 = internal constant [5 x i8] c"type\00" ; <[5 x i8]*> [#uses=1] - at .str174 = internal constant [5 x i8] c"link\00" ; <[5 x i8]*> [#uses=1] - at .str175 = internal constant [43 x i8] c"(\5Cd\5Cd)-(\5Cd\5Cd)-(\5Cd\5Cd)\5Cs+(\5Cd\5Cd):(\5Cd\5Cd)(A|P)M\00" ; <[43 x i8]*> [#uses=1] - at .str176 = internal constant [32 x i8] c"CLIENT: Unsupported LIST format\00" ; <[32 x i8]*> [#uses=1] - at .str177 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at .str178 = internal constant [2 x i8] c".\00" ; <[2 x i8]*> [#uses=1] - at .str179 = internal constant [3 x i8] c"..\00" ; <[3 x i8]*> [#uses=1] - at .str180 = internal constant [36 x i8] c"CLIENT: Bad syntax in MLSx response\00" ; <[36 x i8]*> [#uses=1] - at .str181 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at .str182 = internal constant [2 x i8] c";\00" ; <[2 x i8]*> [#uses=1] - at .str183 = internal constant [5 x i8] c"type\00" ; <[5 x i8]*> [#uses=1] - at .str184 = internal constant [4 x i8] c"dir\00" ; <[4 x i8]*> [#uses=1] - at .str185 = internal constant [5 x i8] c"cdir\00" ; <[5 x i8]*> [#uses=1] - at .str186 = internal constant [5 x i8] c"file\00" ; <[5 x i8]*> [#uses=1] - at .str187 = internal constant [5 x i8] c"pdir\00" ; <[5 x i8]*> [#uses=1] - at .string_switch_table_data = internal constant [4 x %"byte[]"] [%"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str184, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str185, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str186, i32 0, i32 0) }, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str187, i32 0, i32 0) }] ; <[4 x %"byte[]"]*> [#uses=1] - at .str188 = internal constant [5 x i8] c"type\00" ; <[5 x i8]*> [#uses=1] - at .str189 = internal constant [5 x i8] c"size\00" ; <[5 x i8]*> [#uses=1] - at .str190 = internal constant [5 x i8] c"size\00" ; <[5 x i8]*> [#uses=1] - at .str191 = internal constant [11 x i8] c"media-type\00" ; <[11 x i8]*> [#uses=1] - at .str192 = internal constant [11 x i8] c"media-type\00" ; <[11 x i8]*> [#uses=1] - at .str193 = internal constant [7 x i8] c"modify\00" ; <[7 x i8]*> [#uses=1] - at .str194 = internal constant [7 x i8] c"modify\00" ; <[7 x i8]*> [#uses=1] - at .str195 = internal constant [7 x i8] c"create\00" ; <[7 x i8]*> [#uses=1] - at .str196 = internal constant [7 x i8] c"create\00" ; <[7 x i8]*> [#uses=1] - at .str197 = internal constant [38 x i8] c"CLIENT: Bad LIST response from server\00" ; <[38 x i8]*> [#uses=1] - at .str198 = internal constant [4 x i8] c"501\00" ; <[4 x i8]*> [#uses=1] - at _D5tango2io6device4File4File7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] - at _D5tango2io6device4File4File6__initZ = external constant %27, align 4 ; <%27*> [#uses=1] - at _D5tango2io6device4File4File6__vtblZ = external constant %tango.io.device.File.File.__vtbl ; <%tango.io.device.File.File.__vtbl*> [#uses=2] - at _D5tango2io6device4File4File12ReadExistingS5tango2io6device4File4File5Style = external constant %tango.io.device.File.File.Style, align 1 ; <%tango.io.device.File.File.Style*> [#uses=1] - at _D5tango2io6device4File4File17ReadWriteExistingS5tango2io6device4File4File5Style = external constant %tango.io.device.File.File.Style, align 1 ; <%tango.io.device.File.File.Style*> [#uses=1] - at _D5tango2io6device4File4File15ReadWriteCreateS5tango2io6device4File4File5Style = external constant %tango.io.device.File.File.Style, align 1 ; <%tango.io.device.File.File.Style*> [#uses=1] - at .str199 = internal constant [5 x i8] c"STOR\00" ; <[5 x i8]*> [#uses=1] - at .str200 = internal constant [5 x i8] c"APPE\00" ; <[5 x i8]*> [#uses=1] - at .str201 = internal constant [5 x i8] c"REST\00" ; <[5 x i8]*> [#uses=1] - at .str202 = internal constant [4 x i8] c"350\00" ; <[4 x i8]*> [#uses=1] - at .str203 = internal constant [5 x i8] c"ALLO\00" ; <[5 x i8]*> [#uses=1] - at .str204 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str205 = internal constant [4 x i8] c"202\00" ; <[4 x i8]*> [#uses=1] - at .str206 = internal constant [13 x i8] c"OPTS UTF8 ON\00" ; <[13 x i8]*> [#uses=1] - at .str207 = internal constant [4 x i8] c"200\00" ; <[4 x i8]*> [#uses=1] - at .str208 = internal constant [5 x i8] c"RETR\00" ; <[5 x i8]*> [#uses=1] - at .str209 = internal constant [5 x i8] c"RETR\00" ; <[5 x i8]*> [#uses=1] - at .str210 = internal constant [5 x i8] c"STOR\00" ; <[5 x i8]*> [#uses=1] - at _D5tango4text5Regex15RegExpException7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=17] - at _D5tango4text5Regex15RegExpException6__initZ = external constant %28, align 4 ; <%28*> [#uses=1] - at _D5tango4text5Regex15RegExpException6__vtblZ = external constant %object.Exception.__vtbl ; <%object.Exception.__vtbl*> [#uses=17] - at .str211 = internal constant [28 x i8] c"cannot process operand at \22\00" ; <[28 x i8]*> [#uses=1] - at ._arguments.storage = internal constant [2 x %object.TypeInfo*] [%object.TypeInfo* @_D10TypeInfo_k6__initZ, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ] ; <[2 x %object.TypeInfo*]*> [#uses=1] - at _D10TypeInfo_k6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=2] - at .str213 = internal constant [68 x i8] c"Missing opening parentheses for closing parentheses at char {} \22{}\22\00" ; <[68 x i8]*> [#uses=1] - at ._arguments.storage214 = internal constant [3 x %object.TypeInfo*] [%object.TypeInfo* @_D10TypeInfo_k6__initZ, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ] ; <[3 x %object.TypeInfo*]*> [#uses=1] - at .str216 = internal constant [43 x i8] c"Unexpected operand at char {} \22{}\22 in \22{}\22\00" ; <[43 x i8]*> [#uses=1] - at .str217 = internal constant [56 x i8] c"Escape sequence \5Cb not allowed in look-ahead or -behind\00" ; <[56 x i8]*> [#uses=1] - at .str218 = internal constant [56 x i8] c"Escape sequence \5CB not allowed in look-ahead or -behind\00" ; <[56 x i8]*> [#uses=1] - at _D56TypeInfo_AC5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D55TypeInfo_C5tango4text5Regex16__T9TNFAStateTwZ9TNFAState6__initZ to %object.TypeInfo*) } ; <%object.TypeInfo_Array*> [#uses=1] - at .str219 = internal constant [29 x i8] c"Invalid occurence range at \22\00" ; <[29 x i8]*> [#uses=1] - at .str221 = internal constant [29 x i8] c"Invalid occurence range at \22\00" ; <[29 x i8]*> [#uses=1] - at .str223 = internal constant [41 x i8] c"Invalid occurence range (max < min) at \22\00" ; <[41 x i8]*> [#uses=1] - at .str225 = internal constant [45 x i8] c"Missing range start for '-' operator after \22\00" ; <[45 x i8]*> [#uses=1] - at .str227 = internal constant [43 x i8] c"Missing range end for '-' operator after \22\00" ; <[43 x i8]*> [#uses=1] - at .str229 = internal constant [33 x i8] c"unexpected end of string after \22\00" ; <[33 x i8]*> [#uses=1] - at .str231 = internal constant [29 x i8] c"too few arguments for + at \22\00" ; <[29 x i8]*> [#uses=1] - at .str233 = internal constant [29 x i8] c"too few arguments for * at \22\00" ; <[29 x i8]*> [#uses=1] - at .str235 = internal constant [29 x i8] c"too few arguments for ? at \22\00" ; <[29 x i8]*> [#uses=1] - at .str237 = internal constant [33 x i8] c"too few arguments for {x,y} at \22\00" ; <[33 x i8]*> [#uses=1] - at .str239 = internal constant [29 x i8] c"too few arguments for | at \22\00" ; <[29 x i8]*> [#uses=1] - at .str241 = internal constant [40 x i8] c"too few operands for concatenation at \22\00" ; <[40 x i8]*> [#uses=1] - at _D5tango4core9Exception24IllegalArgumentException7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=2] - at _D5tango4core9Exception24IllegalArgumentException6__initZ = external constant %29, align 4 ; <%29*> [#uses=1] - at _D5tango4core9Exception24IllegalArgumentException6__vtblZ = external constant %object.Exception.__vtbl ; <%object.Exception.__vtbl*> [#uses=2] - at .str244 = internal constant [34 x i8] c"Integer.toLong :: invalid literal\00" ; <[34 x i8]*> [#uses=1] - at _D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa5lowerAa = weak_odr constant %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str245, i32 0, i32 0) }, align 4 ; <%"byte[]"*> [#uses=0] - at .str245 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at _D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa5upperAa = weak_odr constant %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str246, i32 0, i32 0) }, align 4 ; <%"byte[]"*> [#uses=0] - at .str246 = internal constant [17 x i8] c"0123456789ABCDEF\00" ; <[17 x i8]*> [#uses=1] - at _D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa7formatsAS5tango4text7convert7Integer22__T14_FormatterInfoTaZ14_FormatterInfo = weak_odr constant %"_FormatterInfo!(char)[]" { i32 8, %nest.parseListLine* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0) }, align 4 ; <%"_FormatterInfo!(char)[]"*> [#uses=0] - at .str247 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str248 = internal constant [2 x i8] c"-\00" ; <[2 x i8]*> [#uses=1] - at .str249 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str250 = internal constant [2 x i8] c" \00" ; <[2 x i8]*> [#uses=1] - at .str251 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str252 = internal constant [2 x i8] c"+\00" ; <[2 x i8]*> [#uses=1] - at .str253 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str254 = internal constant [3 x i8] c"0b\00" ; <[3 x i8]*> [#uses=1] - at .str255 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str256 = internal constant [3 x i8] c"0o\00" ; <[3 x i8]*> [#uses=1] - at .str257 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str258 = internal constant [3 x i8] c"0x\00" ; <[3 x i8]*> [#uses=1] - at .str259 = internal constant [17 x i8] c"0123456789abcdef\00" ; <[17 x i8]*> [#uses=1] - at .str260 = internal constant [3 x i8] c"0X\00" ; <[3 x i8]*> [#uses=1] - at .str261 = internal constant [17 x i8] c"0123456789ABCDEF\00" ; <[17 x i8]*> [#uses=1] - at .constarray262 = internal global [8 x %nest.parseListLine] [%nest.parseListLine { i32 10, %"byte[]" zeroinitializer, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str247, i32 0, i32 0) } }, %nest.parseListLine { i32 10, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str248, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str249, i32 0, i32 0) } }, %nest.parseListLine { i32 10, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str250, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str251, i32 0, i32 0) } }, %nest.parseListLine { i32 10, %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str252, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str253, i32 0, i32 0) } }, %nest.parseListLine { i32 2, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str254, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str255, i32 0, i32 0) } }, %nest.parseListLine { i32 8, %"byte[]" { i32 2, i8* gete! lementptr ([3 x i8]* @.str256, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str257, i32 0, i32 0) } }, %nest.parseListLine { i32 16, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str258, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str259, i32 0, i32 0) } }, %nest.parseListLine { i32 16, %"byte[]" { i32 2, i8* getelementptr ([3 x i8]* @.str260, i32 0, i32 0) }, %"byte[]" { i32 16, i8* getelementptr ([17 x i8]* @.str261, i32 0, i32 0) } }] ; <[8 x %nest.parseListLine]*> [#uses=13] - at .str263 = internal constant [18 x i8] c"{unknown format '\00" ; <[18 x i8]*> [#uses=1] - at .str264 = internal constant [3 x i8] c"'}\00", align 2 ; <[3 x i8]*> [#uses=1] - at .str265 = internal constant [25 x i8] c"{output width too small}\00" ; <[25 x i8]*> [#uses=1] - at _D12TypeInfo_AAa6__initZ = linkonce_odr constant %object.TypeInfo_Array { %object.TypeInfo.__vtbl* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ } ; <%object.TypeInfo_Array*> [#uses=1] - at _D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi2nla = weak_odr constant i8 10, align 1 ; [#uses=0] - at _D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi2cra = weak_odr constant i8 13, align 1 ; [#uses=0] - at _D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa6badargAa = weak_odr global %"byte[]" { i32 20, i8* getelementptr ([21 x i8]* @.str266, i32 0, i32 0) }, align 8 ; <%"byte[]"*> [#uses=1] - at .str266 = internal constant [21 x i8] c"{index out of range}\00" ; <[21 x i8]*> [#uses=1] - at _D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa8toosmallAa = weak_odr global %"byte[]" { i32 25, i8* getelementptr ([26 x i8]* @.str267, i32 0, i32 0) }, align 8 ; <%"byte[]"*> [#uses=2] - at .str267 = internal constant [26 x i8] c"{output buffer too small}\00" ; <[26 x i8]*> [#uses=1] - at _D11TypeInfo_Ak6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=4] - at _D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ = external global %object.ClassInfo ; <%object.ClassInfo*> [#uses=3] - at _D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ = external constant %30, align 4 ; <%30*> [#uses=1] - at _D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ = external constant %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl" ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=3] - at _D11TypeInfo_Ag6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=3] - at _D11TypeInfo_Ah6__initZ = external constant %object.TypeInfo ; <%object.TypeInfo*> [#uses=2] - at .str280 = internal constant [9 x i8] c"RegExp: \00", align 8 ; <[9 x i8]*> [#uses=1] - at _D10ModuleInfo6__vtblZ = external constant %object.ModuleInfo.__vtbl ; <%object.ModuleInfo.__vtbl*> [#uses=1] - at .str289 = internal constant [24 x i8] c"tango.net.ftp.FtpClient\00" ; <[24 x i8]*> [#uses=1] - at _D5tango4text5Regex8__ModuleZ = external global %object.ModuleInfo ; <%object.ModuleInfo*> [#uses=1] - at _D5tango4time6chrono9Gregorian8__ModuleZ = external global %object.ModuleInfo ; <%object.ModuleInfo*> [#uses=1] - at _D5tango4text7convert9TimeStamp8__ModuleZ = external global %object.ModuleInfo ; <%object.ModuleInfo*> [#uses=1] - at _D5tango3net3ftp9FtpClient9__importsZ = internal constant [3 x %object.ModuleInfo*] [%object.ModuleInfo* @_D5tango4text5Regex8__ModuleZ, %object.ModuleInfo* @_D5tango4time6chrono9Gregorian8__ModuleZ, %object.ModuleInfo* @_D5tango4text7convert9TimeStamp8__ModuleZ] ; <[3 x %object.ModuleInfo*]*> [#uses=1] - at _D5tango3net3ftp9FtpClient9__classesZ = internal constant [2 x %object.ClassInfo*] [%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ, %object.ClassInfo* @_D5tango3net3ftp9FtpClient13FTPConnection7__ClassZ] ; <[2 x %object.ClassInfo*]*> [#uses=1] - at _D5tango3net3ftp9FtpClient8__ModuleZ = global %object.ModuleInfo { %object.ModuleInfo.__vtbl* @_D10ModuleInfo6__vtblZ, i8* null, %"byte[]" { i32 23, i8* getelementptr ([24 x i8]* @.str289, i32 0, i32 0) }, %"ModuleInfo[]" { i32 3, %object.ModuleInfo** getelementptr ([3 x %object.ModuleInfo*]* @_D5tango3net3ftp9FtpClient9__importsZ, i32 0, i32 0) }, %"ClassInfo[]" { i32 2, %object.ClassInfo** getelementptr ([2 x %object.ClassInfo*]* @_D5tango3net3ftp9FtpClient9__classesZ, i32 0, i32 0) }, i32 0, void ()* null, void ()* null, void ()* null, i8* null, void ()* null } ; <%object.ModuleInfo*> [#uses=1] - at _D5tango3net3ftp9FtpClient11__moduleRefZ = internal global %ModuleReference { %ModuleReference* null, %object.ModuleInfo* @_D5tango3net3ftp9FtpClient8__ModuleZ } ; <%ModuleReference*> [#uses=2] - at _Dmodule_ref = external global %ModuleReference* ; <%ModuleReference**> [#uses=2] - at llvm.global_ctors = appending constant [1 x %31] [%31 { i32 65535, void ()* @_D5tango3net3ftp9FtpClient16__moduleinfoCtorZ }] ; <[1 x %31]*> [#uses=0] - -define fastcc noalias %tango.net.ftp.FtpClient.FtpAddress* @_D5tango3net3ftp9FtpClient10FtpAddress6opCallFAaZPS5tango3net3ftp9FtpClient10FtpAddress(%"byte[]" %str_arg) { -entry: - %len.i = alloca i32, align 4 ; [#uses=3] - %str_arg171 = extractvalue %"byte[]" %str_arg, 0 ; [#uses=8] - %str_arg172 = extractvalue %"byte[]" %str_arg, 1 ; [#uses=4] - %tmp1 = icmp eq i32 %str_arg171, 0 ; [#uses=1] - br i1 %tmp1, label %if, label %try - -if: ; preds = %entry - ret %tango.net.ftp.FtpClient.FtpAddress* null - -try: ; preds = %entry - %.gc_mem = invoke noalias i8* @_d_allocmemoryT(%object.TypeInfo* bitcast (%20* @_D46TypeInfo_S5tango3net3ftp9FtpClient10FtpAddress6__initZ to %object.TypeInfo*)) - to label %postinvoke unwind label %landingpad ; [#uses=11] - -postinvoke: ; preds = %try - %.gc_mem3 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpAddress* ; <%tango.net.ftp.FtpClient.FtpAddress*> [#uses=1] - tail call void @llvm.memcpy.i32(i8* %.gc_mem, i8* bitcast (%tango.net.ftp.FtpClient.FtpAddress* @_D5tango3net3ftp9FtpClient10FtpAddress6__initZ to i8*), i32 36, i32 1) - %tmp9.i = add i32 %str_arg171, -5 ; [#uses=2] - %tmp16.i = icmp ugt i32 %tmp9.i, %str_arg171 ; [#uses=1] - br i1 %tmp16.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %whilecond.i - -whilecond.i: ; preds = %else40.i, %postinvoke - %source_arg60.pn.i = phi i8* [ %p.0.i, %else40.i ], [ %str_arg172, %postinvoke ] ; [#uses=4] - %start_arg.pn.i = phi i32 [ %tmp49.i, %else40.i ], [ 0, %postinvoke ] ; [#uses=3] - %extent.0.i = phi i32 [ %tmp51.i, %else40.i ], [ %tmp9.i, %postinvoke ] ; [#uses=5] - %p.0.i = getelementptr i8* %source_arg60.pn.i, i32 %start_arg.pn.i ; [#uses=2] - %tmp18.i = icmp eq i32 %extent.0.i, 0 ; [#uses=1] - br i1 %tmp18.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %whilebody.i - -whilebody.i: ; preds = %whilecond.i - %p.0.sum63.i = add i32 %start_arg.pn.i, -1 ; [#uses=1] - %tmp2.i.i = getelementptr i8* %source_arg60.pn.i, i32 %p.0.sum63.i ; [#uses=1] - br label %forcond.i.i - -forcond.i.i: ; preds = %forbody.i.i, %whilebody.i - %len.0.i.i = phi i32 [ %extent.0.i, %whilebody.i ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] - %p.0.i.i = phi i8* [ %tmp2.i.i, %whilebody.i ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] - %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] - %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] - br i1 %tmp5.i.i, label %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i, label %forbody.i.i - -forbody.i.i: ; preds = %forcond.i.i - %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] - %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] - %tmp12.i.i = icmp eq i8 %tmp8.i.i, 102 ; [#uses=1] - br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i - -if.i.i: ; preds = %forbody.i.i - %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] - %tmp16.i.i = ptrtoint i8* %p.0.i to i32 ; [#uses=1] - %tmp17.i.i = sub i32 %tmp15.i.i, %tmp16.i.i ; [#uses=1] - br label %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i - -_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i: ; preds = %if.i.i, %forcond.i.i - %tmp2561.i = phi i32 [ %tmp17.i.i, %if.i.i ], [ %extent.0.i, %forcond.i.i ] ; [#uses=3] - %tmp27.i = icmp eq i32 %tmp2561.i, %extent.0.i ; [#uses=1] - br i1 %tmp27.i, label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit, label %else.i - -else.i: ; preds = %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i - %p.0.sum.i = add i32 %start_arg.pn.i, %tmp2561.i ; [#uses=2] - %tmp32.i = getelementptr i8* %source_arg60.pn.i, i32 %p.0.sum.i ; [#uses=2] - %tmp32.sum.i = add i32 %p.0.sum.i, -1 ; [#uses=1] - %tmp2.i.i.i = getelementptr i8* %source_arg60.pn.i, i32 %tmp32.sum.i ; [#uses=1] - br label %forcond.i.i.i - -forcond.i.i.i: ; preds = %forbody.i.i.i, %else.i - %len.0.i.i.i = phi i32 [ 6, %else.i ], [ %tmp4.i.i.i, %forbody.i.i.i ] ; [#uses=2] - %s2.0.i.i.i = phi i8* [ getelementptr ([7 x i8]* @.str65, i32 0, i32 0), %else.i ], [ %tmp11.i.i.i, %forbody.i.i.i ] ; [#uses=2] - %p.0.i.i.i = phi i8* [ %tmp2.i.i.i, %else.i ], [ %tmp7.i.i.i, %forbody.i.i.i ] ; [#uses=1] - %tmp4.i.i.i = add i32 %len.0.i.i.i, -1 ; [#uses=1] - %tmp5.i.i.i = icmp eq i32 %len.0.i.i.i, 0 ; [#uses=1] - br i1 %tmp5.i.i.i, label %if38.i, label %forbody.i.i.i - -forbody.i.i.i: ; preds = %forcond.i.i.i - %tmp7.i.i.i = getelementptr i8* %p.0.i.i.i, i32 1 ; [#uses=3] - %tmp8.i.i.i = load i8* %tmp7.i.i.i ; [#uses=1] - %tmp11.i.i.i = getelementptr i8* %s2.0.i.i.i, i32 1 ; [#uses=1] - %tmp12.i.i.i = load i8* %s2.0.i.i.i ; [#uses=1] - %tmp14.i.i.i = icmp eq i8 %tmp8.i.i.i, %tmp12.i.i.i ; [#uses=1] - br i1 %tmp14.i.i.i, label %forcond.i.i.i, label %if.i.i.i - -if.i.i.i: ; preds = %forbody.i.i.i - %tmp17.i.i.i = ptrtoint i8* %tmp7.i.i.i to i32 ; [#uses=1] - %tmp18.i.i.i = ptrtoint i8* %tmp32.i to i32 ; [#uses=1] - %tmp19.i.i.i = sub i32 %tmp17.i.i.i, %tmp18.i.i.i ; [#uses=1] - %phitmp = icmp eq i32 %tmp19.i.i.i, 6 ; [#uses=1] - br i1 %phitmp, label %if38.i, label %else40.i - -if38.i: ; preds = %if.i.i.i, %forcond.i.i.i - %tmp44.i = ptrtoint i8* %tmp32.i to i32 ; [#uses=1] - %tmp45.i = ptrtoint i8* %str_arg172 to i32 ; [#uses=1] - %tmp46.i = sub i32 %tmp44.i, %tmp45.i ; [#uses=1] - br label %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit - -else40.i: ; preds = %if.i.i.i - %tmp49.i = add i32 %tmp2561.i, 1 ; [#uses=2] - %tmp51.i = sub i32 %extent.0.i, %tmp49.i ; [#uses=1] - br label %whilecond.i - -_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit: ; preds = %if38.i, %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i, %whilecond.i, %postinvoke - %tmp7173 = phi i32 [ %tmp46.i, %if38.i ], [ %str_arg171, %_D5tango4text4Util14__T7indexOfTaZ7indexOfFPaakZk.exit.i ], [ %str_arg171, %whilecond.i ], [ %str_arg171, %postinvoke ] ; [#uses=1] - %tmp9 = icmp eq i32 %tmp7173, 0 ; [#uses=1] - br i1 %tmp9, label %if10, label %endif11 - -if10: ; preds = %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit - %tmp15 = getelementptr i8* %str_arg172, i32 6 ; [#uses=1] - %tmp16 = add i32 %str_arg171, -6 ; [#uses=1] - br label %endif11 - -endif11: ; preds = %if10, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit - %str.1.2 = phi i8* [ %tmp15, %if10 ], [ %str_arg172, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit ] ; [#uses=8] - %str.0.2 = phi i32 [ %tmp16, %if10 ], [ %str_arg171, %_D5tango4text4Util21__T13locatePatternTaZ13locatePatternFAaAakZk.exit ] ; [#uses=6] - %tmp2.i235 = icmp eq i32 %str.0.2, -1 ; [#uses=1] - br i1 %tmp2.i235, label %whilecond.i239, label %if.i236 - -if.i236: ; preds = %endif11 - br label %whilecond.i239 - -whilecond.i239: ; preds = %whilebody.i244, %if.i236, %endif11 - %start.0.i237 = phi i32 [ %str.0.2, %if.i236 ], [ %tmp8.i240, %whilebody.i244 ], [ -1, %endif11 ] ; [#uses=2] - %tmp6.i238 = icmp eq i32 %start.0.i237, 0 ; [#uses=1] - br i1 %tmp6.i238, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247, label %whilebody.i244 - -whilebody.i244: ; preds = %whilecond.i239 - %tmp8.i240 = add i32 %start.0.i237, -1 ; [#uses=3] - %tmp10.i241 = getelementptr i8* %str.1.2, i32 %tmp8.i240 ; [#uses=1] - %tmp11.i242 = load i8* %tmp10.i241 ; [#uses=1] - %tmp15.i243 = icmp eq i8 %tmp11.i242, 64 ; [#uses=1] - br i1 %tmp15.i243, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247, label %whilecond.i239 - -_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247: ; preds = %whilebody.i244, %whilecond.i239 - %tmp21248 = phi i32 [ %tmp8.i240, %whilebody.i244 ], [ %str.0.2, %whilecond.i239 ] ; [#uses=7] - %tmp25 = icmp eq i32 %tmp21248, %str.0.2 ; [#uses=1] - br i1 %tmp25, label %endif27, label %if26 - -if26: ; preds = %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 - %tmp38 = add i32 %tmp21248, 1 ; [#uses=2] - %tmp41 = getelementptr i8* %str.1.2, i32 %tmp38 ; [#uses=2] - %tmp42 = sub i32 %str.0.2, %tmp38 ; [#uses=2] - %tmp2.i.i214 = getelementptr i8* %str.1.2, i32 -1 ; [#uses=1] - br label %forcond.i.i219 - -forcond.i.i219: ; preds = %forbody.i.i223, %if26 - %len.0.i.i215 = phi i32 [ %tmp21248, %if26 ], [ %tmp4.i.i217, %forbody.i.i223 ] ; [#uses=2] - %p.0.i.i216 = phi i8* [ %tmp2.i.i214, %if26 ], [ %tmp7.i.i220, %forbody.i.i223 ] ; [#uses=1] - %tmp4.i.i217 = add i32 %len.0.i.i215, -1 ; [#uses=1] - %tmp5.i.i218 = icmp eq i32 %len.0.i.i215, 0 ; [#uses=1] - br i1 %tmp5.i.i218, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232, label %forbody.i.i223 - -forbody.i.i223: ; preds = %forcond.i.i219 - %tmp7.i.i220 = getelementptr i8* %p.0.i.i216, i32 1 ; [#uses=3] - %tmp8.i.i221 = load i8* %tmp7.i.i220 ; [#uses=1] - %tmp12.i.i222 = icmp eq i8 %tmp8.i.i221, 58 ; [#uses=1] - br i1 %tmp12.i.i222, label %if.i.i227, label %forcond.i.i219 - -if.i.i227: ; preds = %forbody.i.i223 - %tmp15.i.i224 = ptrtoint i8* %tmp7.i.i220 to i32 ; [#uses=1] - %tmp16.i.i225 = ptrtoint i8* %str.1.2 to i32 ; [#uses=1] - %tmp17.i.i226 = sub i32 %tmp15.i.i224, %tmp16.i.i225 ; [#uses=1] - br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232 - -_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232: ; preds = %if.i.i227, %forcond.i.i219 - %tmp1318.i229 = phi i32 [ %tmp17.i.i226, %if.i.i227 ], [ %tmp21248, %forcond.i.i219 ] ; [#uses=3] - %tmp51 = icmp eq i32 %tmp1318.i229, %tmp21248 ; [#uses=1] - %tmp55 = getelementptr i8* %.gc_mem, i32 16 ; [#uses=2] - br i1 %tmp51, label %else, label %if52 - -if52: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232 - %0 = bitcast i8* %tmp55 to i32* ; [#uses=1] - store i32 %tmp1318.i229, i32* %0 - %tmp62 = getelementptr i8* %.gc_mem, i32 20 ; [#uses=1] - %1 = bitcast i8* %tmp62 to i8** ; [#uses=1] - store i8* %str.1.2, i8** %1 - %tmp68 = add i32 %tmp1318.i229, 1 ; [#uses=2] - %tmp71 = getelementptr i8* %str.1.2, i32 %tmp68 ; [#uses=1] - %tmp72 = sub i32 %tmp21248, %tmp68 ; [#uses=1] - %tmp73 = getelementptr i8* %.gc_mem, i32 24 ; [#uses=1] - %2 = bitcast i8* %tmp73 to i32* ; [#uses=1] - store i32 %tmp72, i32* %2 - %tmp74 = getelementptr i8* %.gc_mem, i32 28 ; [#uses=1] - %3 = bitcast i8* %tmp74 to i8** ; [#uses=1] - store i8* %tmp71, i8** %3 - br label %endif27 - -else: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit232 - %4 = bitcast i8* %tmp55 to %"byte[]"* ; <%"byte[]"*> [#uses=1] - %insert = insertvalue %"byte[]" undef, i32 %tmp21248, 0 ; <%"byte[]"> [#uses=1] - %insert150 = insertvalue %"byte[]" %insert, i8* %str.1.2, 1 ; <%"byte[]"> [#uses=1] - store %"byte[]" %insert150, %"byte[]"* %4 - br label %endif27 - -endif27: ; preds = %else, %if52, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 - %str.1.1 = phi i8* [ %tmp41, %if52 ], [ %tmp41, %else ], [ %str.1.2, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 ] ; [#uses=6] - %str.0.1 = phi i32 [ %tmp42, %if52 ], [ %tmp42, %else ], [ %str.0.2, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit247 ] ; [#uses=6] - %tmp2.i197 = icmp eq i32 %str.0.1, -1 ; [#uses=1] - br i1 %tmp2.i197, label %whilecond.i201, label %if.i198 - -if.i198: ; preds = %endif27 - br label %whilecond.i201 - -whilecond.i201: ; preds = %whilebody.i205, %if.i198, %endif27 - %start.0.i199 = phi i32 [ %str.0.1, %if.i198 ], [ %tmp8.i202, %whilebody.i205 ], [ -1, %endif27 ] ; [#uses=2] - %tmp6.i200 = icmp eq i32 %start.0.i199, 0 ; [#uses=1] - br i1 %tmp6.i200, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, label %whilebody.i205 - -whilebody.i205: ; preds = %whilecond.i201 - %tmp8.i202 = add i32 %start.0.i199, -1 ; [#uses=3] - %tmp10.i = getelementptr i8* %str.1.1, i32 %tmp8.i202 ; [#uses=1] - %tmp11.i203 = load i8* %tmp10.i ; [#uses=1] - %tmp15.i204 = icmp eq i8 %tmp11.i203, 58 ; [#uses=1] - br i1 %tmp15.i204, label %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit, label %whilecond.i201 - -_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit: ; preds = %whilebody.i205, %whilecond.i201 - %tmp80206 = phi i32 [ %tmp8.i202, %whilebody.i205 ], [ %str.0.1, %whilecond.i201 ] ; [#uses=3] - %tmp84 = icmp eq i32 %tmp80206, %str.0.1 ; [#uses=1] - br i1 %tmp84, label %endif86, label %if85 - -if85: ; preds = %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit - %tmp92 = add i32 %tmp80206, 1 ; [#uses=2] - %tmp95 = getelementptr i8* %str.1.1, i32 %tmp92 ; [#uses=1] - %tmp96 = sub i32 %str.0.1, %tmp92 ; [#uses=2] - store i32 0, i32* %len.i - %insert.i = insertvalue %"byte[]" undef, i32 %tmp96, 0 ; <%"byte[]"> [#uses=1] - %insert14.i = insertvalue %"byte[]" %insert.i, i8* %tmp95, 1 ; <%"byte[]"> [#uses=1] - %tmp2.i191 = call fastcc i64 @_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl(%"byte[]" %insert14.i, i32 0, i32* %len.i) ; [#uses=1] - %tmp4.i = load i32* %len.i ; [#uses=1] - %tmp5.i192 = icmp ult i32 %tmp4.i, %tmp96 ; [#uses=1] - br i1 %tmp5.i192, label %if.i, label %_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit - -if.i: ; preds = %if85 - %.newclass_gc_alloc.i195 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4core9Exception24IllegalArgumentException7__ClassZ) - to label %.newclass_gc_alloc.i.noexc unwind label %landingpad ; [#uses=5] - -.newclass_gc_alloc.i.noexc: ; preds = %if.i - %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i195 to %object.Exception* ; <%object.Exception*> [#uses=1] - %vtbl.i = bitcast i8* %.newclass_gc_alloc.i195 to %object.Exception.__vtbl** ; <%object.Exception.__vtbl**> [#uses=1] - store %object.Exception.__vtbl* @_D5tango4core9Exception24IllegalArgumentException6__vtblZ, %object.Exception.__vtbl** %vtbl.i - %monitor.i = getelementptr i8* %.newclass_gc_alloc.i195, i32 4 ; [#uses=1] - %5 = bitcast i8* %monitor.i to i8** ; [#uses=1] - store i8* null, i8** %5 - %tmp6.i = getelementptr i8* %.newclass_gc_alloc.i195, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp6.i, i8* bitcast (%"byte[]"* getelementptr (%object.Exception* bitcast (%29* @_D5tango4core9Exception24IllegalArgumentException6__initZ to %object.Exception*), i32 0, i32 2) to i8*), i32 28, i32 1) - %tmp2.i.i193196 = invoke fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %.newclass_gc.i, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str244, i32 0, i32 0) }, %object.Exception* null) - to label %tmp2.i.i193.noexc unwind label %landingpad ; <%object.Exception*> [#uses=0] - -tmp2.i.i193.noexc: ; preds = %.newclass_gc_alloc.i.noexc - %tmp11.i = bitcast i8* %.newclass_gc_alloc.i195 to %object.Object* ; <%object.Object*> [#uses=1] - invoke void @_d_throw_exception(%object.Object* %tmp11.i) - to label %.noexc unwind label %landingpad - -.noexc: ; preds = %tmp2.i.i193.noexc - unreachable - -_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit: ; preds = %if85 - %tmp88 = getelementptr i8* %.gc_mem, i32 32 ; [#uses=1] - %6 = bitcast i8* %tmp88 to i32* ; [#uses=1] - %tmp101 = trunc i64 %tmp2.i191 to i32 ; [#uses=1] - store i32 %tmp101, i32* %6 - br label %endif86 - -endif86: ; preds = %_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit - %str.0.0 = phi i32 [ %tmp80206, %_D5tango4text7convert7Integer13__T6toLongTaZ6toLongFAakZl.exit ], [ %str.0.1, %_D5tango4text4Util19__T11locatePriorTaZ11locatePriorFAaakZk.exit ] ; [#uses=4] - %tmp2.i.i175 = getelementptr i8* %str.1.1, i32 -1 ; [#uses=1] - br label %forcond.i.i180 - -forcond.i.i180: ; preds = %forbody.i.i184, %endif86 - %len.0.i.i176 = phi i32 [ %str.0.0, %endif86 ], [ %tmp4.i.i178, %forbody.i.i184 ] ; [#uses=2] - %p.0.i.i177 = phi i8* [ %tmp2.i.i175, %endif86 ], [ %tmp7.i.i181, %forbody.i.i184 ] ; [#uses=1] - %tmp4.i.i178 = add i32 %len.0.i.i176, -1 ; [#uses=1] - %tmp5.i.i179 = icmp eq i32 %len.0.i.i176, 0 ; [#uses=1] - br i1 %tmp5.i.i179, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit, label %forbody.i.i184 - -forbody.i.i184: ; preds = %forcond.i.i180 - %tmp7.i.i181 = getelementptr i8* %p.0.i.i177, i32 1 ; [#uses=3] - %tmp8.i.i182 = load i8* %tmp7.i.i181 ; [#uses=1] - %tmp12.i.i183 = icmp eq i8 %tmp8.i.i182, 47 ; [#uses=1] - br i1 %tmp12.i.i183, label %if.i.i188, label %forcond.i.i180 - -if.i.i188: ; preds = %forbody.i.i184 - %tmp15.i.i185 = ptrtoint i8* %tmp7.i.i181 to i32 ; [#uses=1] - %tmp16.i.i186 = ptrtoint i8* %str.1.1 to i32 ; [#uses=1] - %tmp17.i.i187 = sub i32 %tmp15.i.i185, %tmp16.i.i186 ; [#uses=1] - br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit - -_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit: ; preds = %if.i.i188, %forcond.i.i180 - %tmp1318.i = phi i32 [ %tmp17.i.i187, %if.i.i188 ], [ %str.0.0, %forcond.i.i180 ] ; [#uses=4] - %tmp115 = icmp eq i32 %tmp1318.i, %str.0.0 ; [#uses=1] - br i1 %tmp115, label %endif117, label %if116 - -if116: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit - %tmp123 = add i32 %tmp1318.i, 1 ; [#uses=2] - %tmp126 = getelementptr i8* %str.1.1, i32 %tmp123 ; [#uses=1] - %tmp127 = sub i32 %str.0.0, %tmp123 ; [#uses=1] - %tmp128 = getelementptr i8* %.gc_mem, i32 8 ; [#uses=1] - %7 = bitcast i8* %tmp128 to i32* ; [#uses=1] - store i32 %tmp127, i32* %7 - %tmp129 = getelementptr i8* %.gc_mem, i32 12 ; [#uses=1] - %8 = bitcast i8* %tmp129 to i8** ; [#uses=1] - store i8* %tmp126, i8** %8 - br label %endif117 - -endif117: ; preds = %if116, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit - %tmp137 = bitcast i8* %.gc_mem to i32* ; [#uses=1] - store i32 %tmp1318.i, i32* %tmp137 - %tmp138 = getelementptr i8* %.gc_mem, i32 4 ; [#uses=1] - %9 = bitcast i8* %tmp138 to i8** ; [#uses=1] - store i8* %str.1.1, i8** %9 - %tmp143 = icmp eq i32 %tmp1318.i, 0 ; [#uses=1] - %retval = select i1 %tmp143, %tango.net.ftp.FtpClient.FtpAddress* null, %tango.net.ftp.FtpClient.FtpAddress* %.gc_mem3 ; <%tango.net.ftp.FtpClient.FtpAddress*> [#uses=1] - ret %tango.net.ftp.FtpClient.FtpAddress* %retval - -landingpad: ; preds = %tmp2.i.i193.noexc, %.newclass_gc_alloc.i.noexc, %if.i, %try - %10 = tail call i8* @llvm.eh.exception() ; [#uses=2] - %11 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %10, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D6Object7__ClassZ) ; [#uses=1] - %cond = icmp eq i32 %11, 1 ; [#uses=1] - br i1 %cond, label %catch, label %switchdefault - -catch: ; preds = %landingpad - ret %tango.net.ftp.FtpClient.FtpAddress* null - -switchdefault: ; preds = %landingpad - tail call void @_d_eh_resume_unwind(i8* %10) - unreachable -} - -declare fastcc %"byte[]" @_D6object6Object8toStringMFZAa(%object.Object*) - -declare fastcc i32 @_D6object6Object6toHashMFZk(%object.Object*) - -declare fastcc i32 @_D6object6Object5opCmpMFC6ObjectZi(%object.Object*, %object.Object*) - -declare fastcc i32 @_D6object6Object8opEqualsMFC6ObjectZi(%object.Object*, %object.Object*) - -declare fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception*, %"byte[]", %object.Exception*) - -declare fastcc void @_D6object9Exception8writeOutMFDFAaZvZv(%object.Exception*, %"void delegate(char[])") - -define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient12FtpException8toStringMFZAa(%tango.net.ftp.FtpClient.FtpException* nocapture %.this_arg) { -entry: - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 2, i32 0 ; [#uses=1] - %.len = load i32* %tmp2 ; [#uses=2] - %tmp3 = add i32 %.len, 4 ; [#uses=2] - %.gc_mem = tail call noalias i8* @_d_newarrayiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp3) ; [#uses=4] - %tmp10 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 7, i32 0 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %.gc_mem, i8* %tmp10, i32 3, i32 1) - %tmp13 = getelementptr i8* %.gc_mem, i32 3 ; [#uses=1] - store i8 32, i8* %tmp13 - %tmp18 = getelementptr i8* %.gc_mem, i32 4 ; [#uses=1] - %tmp23 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 2, i32 1 ; [#uses=1] - %.ptr24 = load i8** %tmp23 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp18, i8* %.ptr24, i32 %.len, i32 1) - %insert = insertvalue %"byte[]" undef, i32 %tmp3, 0 ; <%"byte[]"> [#uses=1] - %insert30 = insertvalue %"byte[]" %insert, i8* %.gc_mem, 1 ; <%"byte[]"> [#uses=1] - ret %"byte[]" %insert30 -} - -define fastcc %tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException(%tango.net.ftp.FtpClient.FtpException* %.this_arg, %"byte[]" %message_arg, [3 x i8]* nocapture %code_arg) { -entry: - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 7, i32 0 ; [#uses=1] - %tmp3 = getelementptr [3 x i8]* %code_arg, i32 0, i32 0 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp2, i8* %tmp3, i32 3, i32 1) - %tmp5 = bitcast %tango.net.ftp.FtpClient.FtpException* %.this_arg to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7 = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5, %"byte[]" %message_arg, %object.Exception* null) ; <%object.Exception*> [#uses=0] - ret %tango.net.ftp.FtpClient.FtpException* %.this_arg -} - -define fastcc %tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException5_ctorMFS5tango3net3ftp9FtpClient11FtpResponseZC5tango3net3ftp9FtpClient12FtpException(%tango.net.ftp.FtpClient.FtpException* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* nocapture byval %r_arg) { -entry: - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FtpException* %.this_arg, i32 0, i32 7, i32 0 ; [#uses=1] - %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %r_arg, i32 0, i32 0, i32 0 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp2, i8* %tmp4, i32 3, i32 1) - %tmp6 = bitcast %tango.net.ftp.FtpClient.FtpException* %.this_arg to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %r_arg, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] - %tmp8 = load %"byte[]"* %tmp7 ; <%"byte[]"> [#uses=1] - %tmp9 = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp6, %"byte[]" %tmp8, %object.Exception* null) ; <%object.Exception*> [#uses=0] - ret %tango.net.ftp.FtpClient.FtpException* %.this_arg -} - -declare fastcc void @_D5tango3net3ftp6Telnet6Telnet8sendlineMFAvZv(%tango.net.ftp.Telnet.Telnet*, %"byte[]") - -declare fastcc void @_D5tango3net3ftp6Telnet6Telnet8sendDataMFAvZv(%tango.net.ftp.Telnet.Telnet*, %"byte[]") - -declare fastcc %"byte[]" @_D5tango3net3ftp6Telnet6Telnet8readLineMFZAa(%tango.net.ftp.Telnet.Telnet*) - -declare fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp6Telnet6Telnet19findAvailableServerMFAaiZC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32) - -declare fastcc void @_D5tango4time4Time8TimeSpan10fromMillisFlZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret, i64) - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %message_arg) noreturn { -entry: - %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] - store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) - %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str66, i32 0, i32 0), i32 3, i32 1) - %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7.i = tail call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" %message_arg, %object.Exception* null) ; <%object.Exception*> [#uses=0] - %tmp6 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] - tail call void @_d_throw_exception(%object.Object* %tmp6) - unreachable -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg) nounwind { -entry: - %tmp34 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 10, i32 0 ; [#uses=1] - %tmp = load i64* %tmp34, align 1 ; [#uses=1] - %0 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] - store i64 %tmp, i64* %0 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7timeoutMFS5tango4time4Time8TimeSpanZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %tango.time.Time.Time* nocapture byval %t_arg) nounwind { -entry: - %tmp34 = getelementptr %tango.time.Time.Time* %t_arg, i32 0, i32 0 ; [#uses=1] - %tmp = load i64* %tmp34, align 1 ; [#uses=1] - %0 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 10, i32 0 ; [#uses=1] - store i64 %tmp, i64* %0 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12shutdownTimeMFZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg) nounwind { -entry: - %tmp1.0 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 10, i32 0 ; [#uses=1] - %tmp = load i64* %tmp1.0, align 1 ; [#uses=1] - %tmp5.i = shl i64 %tmp, 1 ; [#uses=1] - %0 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] - store i64 %tmp5.i, i64* %0 - ret void -} - -define fastcc %"FtpFeature[]" @_D5tango3net3ftp9FtpClient13FTPConnection17supportedFeaturesMFZAS5tango3net3ftp9FtpClient10FtpFeature(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] - %.len = load i32* %tmp3 ; [#uses=1] - %tmp4 = icmp eq i32 %.len, 0 ; [#uses=1] - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] - %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp5 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] - %tmp6 = icmp eq %tango.net.ftp.FtpClient.FtpFeature* %.ptr, null ; [#uses=1] - %tmp7 = and i1 %tmp4, %tmp6 ; [#uses=1] - br i1 %tmp7, label %endif, label %if - -if: ; preds = %entry - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] - %tmp10 = load %"FtpFeature[]"* %tmp9 ; <%"FtpFeature[]"> [#uses=1] - ret %"FtpFeature[]" %tmp10 - -endif: ; preds = %entry - %tmp12 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp13 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp12 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.getFeatures at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp13, i32 0, i32 34 ; [#uses=1] - %this.getFeatures = load void (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.getFeatures at vtbl", align 4 ; [#uses=1] - tail call fastcc void %this.getFeatures(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - %tmp16 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] - %tmp17 = load %"FtpFeature[]"* %tmp16 ; <%"FtpFeature[]"> [#uses=1] - ret %"FtpFeature[]" %tmp17 -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection9exceptionMFS5tango3net3ftp9FtpClient11FtpResponseZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* nocapture byval %fr_arg) { -entry: - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 5 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %fr_arg, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] - %tmp5 = load %"byte[]"* %tmp4 ; <%"byte[]"> [#uses=1] - tail call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %tmp5) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7connectMFS5tango3net3ftp9FtpClient10FtpAddressZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpAddress* nocapture byval %fad_arg) { -entry: - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.connect at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 16 ; [#uses=1] - %this.connect = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"byte[]", %"byte[]", i32)** %"this.connect at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 0 ; <%"byte[]"*> [#uses=1] - %tmp5 = load %"byte[]"* %tmp4 ; <%"byte[]"> [#uses=1] - %tmp6 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 2 ; <%"byte[]"*> [#uses=1] - %tmp7 = load %"byte[]"* %tmp6 ; <%"byte[]"> [#uses=1] - %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 3 ; <%"byte[]"*> [#uses=1] - %tmp9 = load %"byte[]"* %tmp8 ; <%"byte[]"> [#uses=1] - %tmp10 = getelementptr %tango.net.ftp.FtpClient.FtpAddress* %fad_arg, i32 0, i32 4 ; [#uses=1] - %tmp11 = load i32* %tmp10 ; [#uses=1] - tail call fastcc void %this.connect(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %tmp5, %"byte[]" %tmp7, %"byte[]" %tmp9, i32 %tmp11) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection7connectMFAaAaAakZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %hostname_arg, %"byte[]" %username_arg, %"byte[]" %password_arg, i32 %port_arg) { -entry: - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %__arrayArg120 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp44 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %__arrayArg121 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp73 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %username_arg100 = extractvalue %"byte[]" %username_arg, 0 ; [#uses=2] - %username_arg101 = extractvalue %"byte[]" %username_arg, 1 ; [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] - %tmp2 = load %tango.net.SocketConduit.SocketConduit** %tmp1 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=3] - %tmp3 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp2, null ; [#uses=1] - br i1 %tmp3, label %endif, label %if - -if: ; preds = %entry - %tmp7 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp2 to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] - %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %tmp2 to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] - %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] - %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] - %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] - call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp7) - br label %endif - -endif: ; preds = %if, %entry - %tmp9 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet* ; <%tango.net.ftp.Telnet.Telnet*> [#uses=1] - %tmp10 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet.__vtbl** ; <%tango.net.ftp.Telnet.Telnet.__vtbl**> [#uses=1] - %tmp11 = load %tango.net.ftp.Telnet.Telnet.__vtbl** %tmp10 ; <%tango.net.ftp.Telnet.Telnet.__vtbl*> [#uses=1] - %"(cast(Telnet)this).findAvailableServer at vtbl" = getelementptr %tango.net.ftp.Telnet.Telnet.__vtbl* %tmp11, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)**> [#uses=1] - %"(cast(Telnet)this).findAvailableServer" = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)** %"(cast(Telnet)this).findAvailableServer at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.Telnet.Telnet*, %"byte[]", i32)*> [#uses=1] - %tmp15 = call fastcc %tango.net.SocketConduit.SocketConduit* %"(cast(Telnet)this).findAvailableServer"(%tango.net.ftp.Telnet.Telnet* %tmp9, %"byte[]" %hostname_arg, i32 %port_arg) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=0] - %tmp22 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=7] - %tmp23 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp23, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str67, i32 0, i32 0) }) - to label %postinvoke unwind label %landingpad - -postinvoke: ; preds = %endif - %tmp26 = icmp eq i32 %username_arg100, 0 ; [#uses=1] - br i1 %tmp26, label %if27, label %endif28 - -if27: ; preds = %postinvoke - ret void - -endif28: ; preds = %postinvoke - %tmp31 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp31, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp33 = getelementptr [1 x %"byte[]"]* %__arrayArg120, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - %insert = insertvalue %"byte[]" undef, i32 %username_arg100, 0 ; <%"byte[]"> [#uses=1] - %insert99 = insertvalue %"byte[]" %insert, i8* %username_arg101, 1 ; <%"byte[]"> [#uses=1] - store %"byte[]" %insert99, %"byte[]"* %tmp33, align 8 - %tmp36 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp33, 1 ; <%"char[][]"> [#uses=1] - invoke fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str68, i32 0, i32 0) }, %"char[][]" %tmp36) - to label %postinvoke37 unwind label %landingpad - -postinvoke37: ; preds = %endif28 - %tmp40 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl41" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp40, i32 0, i32 37 ; [#uses=1] - %this.readResponse43 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl41", align 4 ; [#uses=1] - invoke fastcc void %this.readResponse43(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp44, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - to label %postinvoke45 unwind label %landingpad - -postinvoke45: ; preds = %postinvoke37 - %tmp46 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=5] - %tmp47 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp44, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp46, i8* %tmp47, i32 12, i32 4) - %tmp50 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp46, 1 ; <%"byte[]"> [#uses=1] - %tmp52 = invoke i32 @_adEq(%"byte[]" %tmp50, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str69, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly - to label %postinvoke51 unwind label %landingpad ; [#uses=1] - -postinvoke51: ; preds = %postinvoke45 - %tmp53 = icmp eq i32 %tmp52, 0 ; [#uses=1] - br i1 %tmp53, label %endif55, label %if54 - -if54: ; preds = %postinvoke51 - %tmp58 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl59" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp58, i32 0, i32 35 ; [#uses=1] - %this.sendCommand61 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl59", align 4 ; [#uses=1] - %tmp62 = getelementptr [1 x %"byte[]"]* %__arrayArg121, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %password_arg, %"byte[]"* %tmp62, align 8 - %tmp65 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp62, 1 ; <%"char[][]"> [#uses=1] - invoke fastcc void %this.sendCommand61(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str70, i32 0, i32 0) }, %"char[][]" %tmp65) - to label %postinvoke66 unwind label %landingpad - -postinvoke66: ; preds = %if54 - %tmp69 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl70" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp69, i32 0, i32 37 ; [#uses=1] - %this.readResponse72 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl70", align 4 ; [#uses=1] - invoke fastcc void %this.readResponse72(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp73, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - to label %postinvoke74 unwind label %landingpad - -postinvoke74: ; preds = %postinvoke66 - %tmp76 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp73, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp46, i8* %tmp76, i32 12, i32 4) - br label %endif55 - -endif55: ; preds = %postinvoke74, %postinvoke51 - %tmp79 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp46, 1 ; <%"byte[]"> [#uses=1] - %tmp81 = invoke i32 @_adEq(%"byte[]" %tmp79, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str71, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly - to label %postinvoke80 unwind label %landingpad ; [#uses=1] - -postinvoke80: ; preds = %endif55 - %tmp82 = icmp eq i32 %tmp81, 0 ; [#uses=1] - br i1 %tmp82, label %andand, label %endtrycatch - -andand: ; preds = %postinvoke80 - %tmp86 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp46, 1 ; <%"byte[]"> [#uses=1] - %tmp88 = invoke i32 @_adEq(%"byte[]" %tmp86, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str72, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly - to label %postinvoke87 unwind label %landingpad ; [#uses=1] - -postinvoke87: ; preds = %andand - %tmp89 = icmp eq i32 %tmp88, 0 ; [#uses=1] - br i1 %tmp89, label %if91, label %endtrycatch - -if91: ; preds = %postinvoke87 - %tmp95 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp95, i32 0, i32 14 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) - to label %endtrycatch unwind label %landingpad - -landingpad: ; preds = %if91, %andand, %endif55, %postinvoke66, %if54, %postinvoke45, %postinvoke37, %endif28, %endif - %0 = call i8* @llvm.eh.exception() ; [#uses=3] - %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D6Object7__ClassZ) ; [#uses=1] - %cond = icmp eq i32 %1, 1 ; [#uses=1] - br i1 %cond, label %catch, label %switchdefault - -catch: ; preds = %landingpad - %2 = bitcast i8* %0 to %object.Object* ; <%object.Object*> [#uses=1] - %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp22 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.close at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 17 ; [#uses=1] - %this.close = load void (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.close at vtbl", align 4 ; [#uses=1] - call fastcc void %this.close(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - call void @_d_throw_exception(%object.Object* %2) - unreachable - -switchdefault: ; preds = %landingpad - call void @_d_eh_resume_unwind(i8* %0) - unreachable - -endtrycatch: ; preds = %if91, %postinvoke87, %postinvoke80 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection5closeMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] - %tmp2 = load %tango.net.SocketConduit.SocketConduit** %tmp1 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp3 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp2, null ; [#uses=1] - br i1 %tmp3, label %endif, label %if - -if: ; preds = %entry - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp5 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 44 ; [#uses=1] - %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp2) - br label %endif - -endif: ; preds = %if, %entry - %tmp12 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=4] - %tmp13 = load %tango.net.SocketConduit.SocketConduit** %tmp12 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - %tmp14 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp13, null ; [#uses=1] - br i1 %tmp14, label %endif16, label %try - -try: ; preds = %endif - %tmp18 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp19 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp18 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp19, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str73, i32 0, i32 0) }, %"char[][]" zeroinitializer) - to label %postinvoke unwind label %landingpad - -postinvoke: ; preds = %try - %tmp23 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp18 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp23, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str74, i32 0, i32 0) }) - to label %endtrycatch unwind label %landingpad - -landingpad: ; preds = %postinvoke, %try - %0 = call i8* @llvm.eh.exception() ; [#uses=2] - %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=1] - %cond = icmp eq i32 %1, 1 ; [#uses=1] - br i1 %cond, label %endtrycatch, label %switchdefault - -switchdefault: ; preds = %landingpad - call void @_d_eh_resume_unwind(i8* %0) - unreachable - -endtrycatch: ; preds = %landingpad, %postinvoke - %tmp28 = load %tango.net.SocketConduit.SocketConduit** %tmp12 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp29 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp28 to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] - %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %tmp28 to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] - %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] - %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] - %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] - call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp29) - %tmp31 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] - %tmp32 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] - %.len = load i32* %tmp32 ; [#uses=1] - %tmp33 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] - %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp33 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] - %.tmp = bitcast %tango.net.ftp.FtpClient.FtpFeature* %.ptr to i8* ; [#uses=1] - call void @_d_delarray(i32 %.len, i8* %.tmp) - store %"FtpFeature[]" zeroinitializer, %"FtpFeature[]"* %tmp31 - %tmp36 = load %tango.net.SocketConduit.SocketConduit** %tmp12 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - %.tmp37 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp36 to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_delclass(%object.Object* %.tmp37) - store %tango.net.SocketConduit.SocketConduit* null, %tango.net.SocketConduit.SocketConduit** %tmp12 - ret void - -endif16: ; preds = %endif - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection10setPassiveMFZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg) { -entry: - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] - store i32 1, i32* %tmp2 - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 1 ; <%tango.net.Socket.Address**> [#uses=2] - %tmp6 = load %tango.net.Socket.Address** %tmp5 ; <%tango.net.Socket.Address*> [#uses=1] - %.tmp = bitcast %tango.net.Socket.Address* %tmp6 to %object.Object* ; <%object.Object*> [#uses=1] - tail call void @_d_delclass(%object.Object* %.tmp) - store %tango.net.Socket.Address* null, %tango.net.Socket.Address** %tmp5 - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 2 ; <%tango.net.Socket.Address**> [#uses=2] - %tmp10 = load %tango.net.Socket.Address** %tmp9 ; <%tango.net.Socket.Address*> [#uses=1] - %.tmp11 = bitcast %tango.net.Socket.Address* %tmp10 to %object.Object* ; <%object.Object*> [#uses=1] - tail call void @_d_delclass(%object.Object* %.tmp11) - store %tango.net.Socket.Address* null, %tango.net.Socket.Address** %tmp9 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection9setActiveMFAatAatZv(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %ip_arg, i16 zeroext %port_arg, %"byte[]" %listen_ip_arg, i16 zeroext %listen_port_arg) { -entry: - %listen_ip_arg64 = extractvalue %"byte[]" %listen_ip_arg, 0 ; [#uses=2] - %listen_ip_arg65 = extractvalue %"byte[]" %listen_ip_arg, 1 ; [#uses=2] - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] - store i32 0, i32* %tmp2 - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 1 ; <%tango.net.Socket.Address**> [#uses=1] - %.newclass_gc_alloc = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=4] - %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp6 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp6, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) - %tmp12 = zext i16 %port_arg to i32 ; [#uses=1] - %tmp13 = tail call fastcc %tango.net.Socket.IPv4Address* @_D5tango3net6Socket11IPv4Address5_ctorMFAaiZC5tango3net6Socket11IPv4Address(%tango.net.Socket.IPv4Address* %.newclass_gc, %"byte[]" %ip_arg, i32 %tmp12) ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %tmp14 = bitcast %tango.net.Socket.IPv4Address* %tmp13 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] - store %tango.net.Socket.Address* %tmp14, %tango.net.Socket.Address** %tmp5 - %tmp17 = icmp eq i16 %listen_port_arg, 0 ; [#uses=1] - %listen_port.0 = select i1 %tmp17, i16 %port_arg, i16 %listen_port_arg ; [#uses=2] - %tmp22 = insertvalue %"byte[]" undef, i32 %listen_ip_arg64, 0 ; <%"byte[]"> [#uses=1] - %tmp23 = insertvalue %"byte[]" %tmp22, i8* %listen_ip_arg65, 1 ; <%"byte[]"> [#uses=1] - %tmp24 = tail call i32 @_adEq(%"byte[]" %tmp23, %"byte[]" zeroinitializer, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp25 = icmp eq i32 %tmp24, 0 ; [#uses=1] - %tmp30 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 2 ; <%tango.net.Socket.Address**> [#uses=2] - %.newclass_gc_alloc31 = tail call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=7] - %vtbl33 = bitcast i8* %.newclass_gc_alloc31 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl33 - %monitor34 = getelementptr i8* %.newclass_gc_alloc31, i32 4 ; [#uses=1] - %1 = bitcast i8* %monitor34 to i8** ; [#uses=1] - store i8* null, i8** %1 - %tmp35 = getelementptr i8* %.newclass_gc_alloc31, i32 8 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp35, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) - br i1 %tmp25, label %else, label %if26 - -if26: ; preds = %entry - %tmp2.i = getelementptr i8* %.newclass_gc_alloc31, i32 20 ; [#uses=1] - %2 = bitcast i8* %tmp2.i to i32* ; [#uses=1] - store i32 0, i32* %2 - %tmp7.i = getelementptr i8* %.newclass_gc_alloc31, i32 18 ; [#uses=1] - %3 = bitcast i8* %tmp7.i to i16* ; [#uses=1] - store i16 %listen_port.0, i16* %3 - %tmp41 = bitcast i8* %.newclass_gc_alloc31 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] - store %tango.net.Socket.Address* %tmp41, %tango.net.Socket.Address** %tmp30 - ret void - -else: ; preds = %entry - %.newclass_gc32 = bitcast i8* %.newclass_gc_alloc31 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %insert = insertvalue %"byte[]" undef, i32 %listen_ip_arg64, 0 ; <%"byte[]"> [#uses=1] - %insert59 = insertvalue %"byte[]" %insert, i8* %listen_ip_arg65, 1 ; <%"byte[]"> [#uses=1] - %tmp55 = zext i16 %listen_port.0 to i32 ; [#uses=1] - %tmp56 = tail call fastcc %tango.net.Socket.IPv4Address* @_D5tango3net6Socket11IPv4Address5_ctorMFAaiZC5tango3net6Socket11IPv4Address(%tango.net.Socket.IPv4Address* %.newclass_gc32, %"byte[]" %insert59, i32 %tmp55) ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %tmp57 = bitcast %tango.net.Socket.IPv4Address* %tmp56 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] - store %tango.net.Socket.Address* %tmp57, %tango.net.Socket.Address** %tmp30 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection2cdMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %dir_arg) { -entry: - %__arrayArg123 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg123, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %dir_arg, %"byte[]"* %tmp4, align 8 - %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str75, i32 0, i32 0) }, %"char[][]" %tmp7) - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str76, i32 0, i32 0) }) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection4cdupMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %fr = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str77, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 37 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %fr, i32 0, i32 0, i32 0 ; [#uses=3] - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp8, i8* %tmp9, i32 12, i32 4) - %tmp12 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp8, 1 ; <%"byte[]"> [#uses=1] - %tmp13 = call i32 @_adEq(%"byte[]" %tmp12, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str78, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp14 = icmp eq i32 %tmp13, 0 ; [#uses=1] - br i1 %tmp14, label %oror, label %if.critedge - -oror: ; preds = %entry - %tmp17 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp8, 1 ; <%"byte[]"> [#uses=1] - %tmp18 = call i32 @_adEq(%"byte[]" %tmp17, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str79, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp19 = icmp eq i32 %tmp18, 0 ; [#uses=1] - br i1 %tmp19, label %else, label %if - -if.critedge: ; preds = %entry - ret void - -if: ; preds = %oror - ret void - -else: ; preds = %oror - %tmp22 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp22, i32 0, i32 14 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] - call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %fr) - ret void -} - -define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient13FTPConnection3cwdMFZAa(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str80, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str81, i32 0, i32 0) }) - %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp8, i8* %tmp9, i32 12, i32 4) - %tmp12 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.parse257 at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp12, i32 0, i32 38 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)**> [#uses=1] - %this.parse257 = load %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.parse257 at vtbl", align 4 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*> [#uses=1] - %tmp14 = call fastcc %"byte[]" %this.parse257(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) ; <%"byte[]"> [#uses=1] - ret %"byte[]" %tmp14 -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection5chmodMFAaiZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, i32 %mode_arg) { -entry: - %.nongc_mem182.i = alloca [18 x i8], align 1 ; <[18 x i8]*> [#uses=2] - %__arrayArg126 = alloca [2 x %"byte[]"], align 8 ; <[2 x %"byte[]"]*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp3 = sext i32 %mode_arg to i64 ; [#uses=1] - %.nongc_mem182.sub.i = getelementptr [18 x i8]* %.nongc_mem182.i, i32 0, i32 0 ; [#uses=2] - switch i32 111, label %default37.i [ - i32 100, label %case8.i - i32 68, label %case8.i - i32 103, label %case8.i - i32 71, label %case8.i - i32 117, label %switchend.i - i32 85, label %switchend.i - i32 98, label %case28.i - i32 66, label %case28.i - i32 111, label %case31.i - i32 79, label %case31.i - i32 120, label %case33.i - i32 88, label %case35.i - ] - -case8.i: ; preds = %entry, %entry, %entry, %entry - br i1 undef, label %if11.i, label %switchend.i - -if11.i: ; preds = %case8.i - br label %switchend.i - -case28.i: ; preds = %entry, %entry - br label %switchend.i - -case31.i: ; preds = %entry, %entry - br label %switchend.i - -case33.i: ; preds = %entry - br label %switchend.i - -case35.i: ; preds = %entry - br label %switchend.i - -default37.i: ; preds = %entry - call void @llvm.memcpy.i32(i8* %.nongc_mem182.sub.i, i8* getelementptr ([18 x i8]* @.str263, i32 0, i32 0), i32 17, i32 1) - %tmp38.i = getelementptr [18 x i8]* %.nongc_mem182.i, i32 0, i32 17 ; [#uses=1] - store i8 111, i8* %tmp38.i - %.gc_mem40.i = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 20) ; [#uses=2] - call void @llvm.memcpy.i32(i8* %.gc_mem40.i, i8* %.nongc_mem182.sub.i, i32 18, i32 1) - %tmp41.i = getelementptr i8* %.gc_mem40.i, i32 18 ; [#uses=1] - %tmp41181.i = bitcast i8* %tmp41.i to i16* ; [#uses=1] - %tmp.i = load i16* bitcast ([3 x i8]* @.str264 to i16*), align 2 ; [#uses=1] - store i16 %tmp.i, i16* %tmp41181.i, align 1 - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - -switchend.i: ; preds = %case35.i, %case33.i, %case31.i, %case28.i, %if11.i, %case8.i, %entry, %entry - %index.1.i = phi i32 [ 7, %case35.i ], [ 6, %case33.i ], [ 5, %case31.i ], [ 4, %case28.i ], [ 0, %entry ], [ 0, %entry ], [ 1, %if11.i ], [ 0, %case8.i ] ; [#uses=3] - %pre.0.i = phi i8 [ -1, %case35.i ], [ -1, %case33.i ], [ -1, %case31.i ], [ -1, %case28.i ], [ 35, %entry ], [ 35, %if11.i ], [ 35, %entry ], [ 35, %case8.i ] ; [#uses=1] - %tmp48.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %index.1.i, i32 2 ; <%"byte[]"*> [#uses=1] - %tmp49.i = load %"byte[]"* %tmp48.i ; <%"byte[]"> [#uses=1] - %tmp49178.i = extractvalue %"byte[]" %tmp49.i, 1 ; [#uses=2] - %tmp51.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %index.1.i, i32 0 ; [#uses=1] - %tmp52.i = load i32* %tmp51.i ; [#uses=3] - %tmp58.i19 = icmp sgt i32 %mode_arg, -1 ; [#uses=1] - br i1 %tmp58.i19, label %if59.i, label %dowhile82.i - -if59.i: ; preds = %switchend.i - br label %dowhile.i - -dowhile.i: ; preds = %andand.i, %if59.i - %p.0.i = phi i8* [ getelementptr ([4 x i8]* @.str82, i32 0, i32 3), %if59.i ], [ %tmp65.i, %andand.i ] ; [#uses=1] - %v.0.i = phi i32 [ %mode_arg, %if59.i ], [ %tmp75.i, %andand.i ] ; [#uses=2] - %len.0.i = phi i32 [ 3, %if59.i ], [ %tmp78.i, %andand.i ] ; [#uses=3] - %tmp65.i = getelementptr i8* %p.0.i, i32 -1 ; [#uses=2] - %tmp68.i = urem i32 %v.0.i, %tmp52.i ; [#uses=1] - %tmp71.i = getelementptr i8* %tmp49178.i, i32 %tmp68.i ; [#uses=1] - %tmp72.i = load i8* %tmp71.i ; [#uses=1] - store i8 %tmp72.i, i8* %tmp65.i - %tmp75.i = udiv i32 %v.0.i, %tmp52.i ; [#uses=2] - %tmp76.i = icmp eq i32 %tmp75.i, 0 ; [#uses=1] - br i1 %tmp76.i, label %endif60.i, label %andand.i - -andand.i: ; preds = %dowhile.i - %tmp78.i = add i32 %len.0.i, -1 ; [#uses=2] - %tmp79.i = icmp eq i32 %len.0.i, 1 ; [#uses=1] - br i1 %tmp79.i, label %endif60.i, label %dowhile.i - -dowhile82.i: ; preds = %andand100.i, %switchend.i - %p.2.i = phi i8* [ %tmp86.i, %andand100.i ], [ getelementptr ([4 x i8]* @.str82, i32 0, i32 3), %switchend.i ] ; [#uses=1] - %v80.0.i = phi i64 [ %tmp99.i, %andand100.i ], [ %tmp3, %switchend.i ] ; [#uses=2] - %len.2.i = phi i32 [ %tmp104.i, %andand100.i ], [ 3, %switchend.i ] ; [#uses=3] - %tmp86.i = getelementptr i8* %p.2.i, i32 -1 ; [#uses=2] - %tmp88.i = zext i32 %tmp52.i to i64 ; [#uses=2] - %tmp90.i = urem i64 %v80.0.i, %tmp88.i ; [#uses=1] - %tmp91.i = trunc i64 %tmp90.i to i32 ; [#uses=1] - %tmp94.i = getelementptr i8* %tmp49178.i, i32 %tmp91.i ; [#uses=1] - %tmp95.i = load i8* %tmp94.i ; [#uses=1] - store i8 %tmp95.i, i8* %tmp86.i - %tmp99.i = udiv i64 %v80.0.i, %tmp88.i ; [#uses=2] - %tmp102.i = icmp eq i64 %tmp99.i, 0 ; [#uses=1] - br i1 %tmp102.i, label %endif60.i, label %andand100.i - -andand100.i: ; preds = %dowhile82.i - %tmp104.i = add i32 %len.2.i, -1 ; [#uses=2] - %tmp105.i = icmp eq i32 %len.2.i, 1 ; [#uses=1] - br i1 %tmp105.i, label %endif60.i, label %dowhile82.i - -endif60.i: ; preds = %andand100.i, %dowhile82.i, %andand.i, %dowhile.i - %len.1.i = phi i32 [ %tmp78.i, %andand.i ], [ %len.0.i, %dowhile.i ], [ %tmp104.i, %andand100.i ], [ %len.2.i, %dowhile82.i ] ; [#uses=2] - %tmp109.i = icmp eq i8 %pre.0.i, 35 ; [#uses=1] - br i1 %tmp109.i, label %condtrue.i, label %condend.i - -condtrue.i: ; preds = %endif60.i - %tmp111.i = getelementptr [8 x %nest.parseListLine]* @.constarray262, i32 0, i32 %index.1.i, i32 1 ; <%"byte[]"*> [#uses=1] - %tmp112.i = load %"byte[]"* %tmp111.i ; <%"byte[]"> [#uses=1] - br label %condend.i - -condend.i: ; preds = %condtrue.i, %endif60.i - %condtmp.0.i = phi %"byte[]" [ %tmp112.i, %condtrue.i ], [ zeroinitializer, %endif60.i ] ; <%"byte[]"> [#uses=2] - %condtmp.0175.i = extractvalue %"byte[]" %condtmp.0.i, 0 ; [#uses=3] - %tmp117.i = icmp ugt i32 %len.1.i, %condtmp.0175.i ; [#uses=1] - br i1 %tmp117.i, label %endif127.i, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - -endif127.i: ; preds = %condend.i - %condtmp.0176.i = extractvalue %"byte[]" %condtmp.0.i, 1 ; [#uses=1] - %tmp123.i = add i32 %condtmp.0175.i, 1 ; [#uses=1] - %tmp124.i = sub i32 %len.1.i, %tmp123.i ; [#uses=1] - %tmp156.i = getelementptr [4 x i8]* @.str82, i32 0, i32 %tmp124.i ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp156.i, i8* %condtmp.0176.i, i32 %condtmp.0175.i, i32 1) - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit: ; preds = %endif127.i, %condend.i, %default37.i - %tmp6 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp6 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp9 = getelementptr [2 x %"byte[]"]* %__arrayArg126, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str82, i32 0, i32 0) }, %"byte[]"* %tmp9, align 8 - %tmp11 = getelementptr [2 x %"byte[]"]* %__arrayArg126, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] - store %"byte[]" %path_arg, %"byte[]"* %tmp11, align 8 - %tmp14 = insertvalue %"char[][]" { i32 2, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 10, i8* getelementptr ([11 x i8]* @.str84, i32 0, i32 0) }, %"char[][]" %tmp14) - %tmp17 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp6 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp17, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str85, i32 0, i32 0) }) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection3delMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { -entry: - %__arrayArg127 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg127, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %path_arg, %"byte[]"* %tmp4, align 8 - %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str86, i32 0, i32 0) }, %"char[][]" %tmp7) - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str87, i32 0, i32 0) }) - %tmp12 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=2] - %tmp13 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp12, i8* %tmp13, i32 12, i32 4) - %tmp16 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp12, 1 ; <%"byte[]"> [#uses=1] - %tmp17 = call i32 @_adEq(%"byte[]" %tmp16, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str88, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp18 = icmp eq i32 %tmp17, 0 ; [#uses=1] - br i1 %tmp18, label %if, label %endif - -if: ; preds = %entry - %tmp22 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.rm at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp22, i32 0, i32 25 ; [#uses=1] - %this.rm = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.rm at vtbl", align 4 ; [#uses=1] - call fastcc void %this.rm(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) - ret void - -endif: ; preds = %entry - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection2rmMFAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { -entry: - %__arrayArg128 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg128, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %path_arg, %"byte[]"* %tmp4, align 8 - %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str89, i32 0, i32 0) }, %"char[][]" %tmp7) - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str90, i32 0, i32 0) }) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection6renameMFAaAaZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %old_path_arg, %"byte[]" %new_path_arg) { -entry: - %__arrayArg129 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %__arrayArg130 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp28 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=4] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg129, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %old_path_arg, %"byte[]"* %tmp4, align 8 - %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str91, i32 0, i32 0) }, %"char[][]" %tmp7) - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str92, i32 0, i32 0) }) - %tmp14 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl15" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp14, i32 0, i32 35 ; [#uses=1] - %this.sendCommand17 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl15", align 4 ; [#uses=1] - %tmp18 = getelementptr [1 x %"byte[]"]* %__arrayArg130, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %new_path_arg, %"byte[]"* %tmp18, align 8 - %tmp21 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp18, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand17(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str93, i32 0, i32 0) }, %"char[][]" %tmp21) - %tmp24 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl25" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp24, i32 0, i32 36 ; [#uses=1] - %this.readResponse27 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl25", align 4 ; [#uses=1] - call fastcc void %this.readResponse27(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp28, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str94, i32 0, i32 0) }) - ret void -} - -define fastcc i32 @_D5tango3net3ftp9FtpClient13FTPConnection5existMFAaZi(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %file_arg) { -entry: - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 8 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=2] - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp9 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.getFileInfo at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 52 ; [#uses=1] - %this.getFileInfo = load void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.getFileInfo at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.getFileInfo(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %file_arg) - to label %postinvoke unwind label %landingpad - -postinvoke: ; preds = %entry - %.rettmp.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 1 ; [#uses=1] - %tmp40 = load i32* %.rettmp.1, align 8 ; [#uses=2] - switch i32 %tmp40, label %oror27 [ - i32 1, label %if18 - i32 4, label %if33.critedge37 - i32 2, label %if33.critedge - ] - -if18: ; preds = %postinvoke - ret i32 1 - -oror27: ; preds = %postinvoke - %tmp31 = icmp eq i32 %tmp40, 3 ; [#uses=1] - %retval = select i1 %tmp31, i32 2, i32 0 ; [#uses=1] - ret i32 %retval - -if33.critedge: ; preds = %postinvoke - ret i32 2 - -if33.critedge37: ; preds = %postinvoke - ret i32 2 - -landingpad: ; preds = %entry - %0 = call i8* @llvm.eh.exception() ; [#uses=3] - %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=1] - %cond = icmp eq i32 %1, 1 ; [#uses=1] - br i1 %cond, label %catch, label %switchdefault - -catch: ; preds = %landingpad - %tmp3 = getelementptr i8* %0, i32 36 ; [#uses=1] - %tmp4 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp3, 1 ; <%"byte[]"> [#uses=1] - %tmp5 = call i32 @_adEq(%"byte[]" %tmp4, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str95, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=0] - ret i32 0 - -switchdefault: ; preds = %landingpad - call void @_d_eh_resume_unwind(i8* %0) - unreachable -} - -define fastcc i32 @_D5tango3net3ftp9FtpClient13FTPConnection4sizeMFAaE5tango3net3ftp9FtpClient9FtpFormatZk(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg, i32 %format_arg) { -entry: - %__arrayArg131 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.type at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 29 ; [#uses=1] - %this.type = load void (%tango.net.ftp.FtpClient.FTPConnection*, i32)** %"this.type at vtbl", align 4 ; [#uses=1] - call fastcc void %this.type(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) - %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp9 = getelementptr [1 x %"byte[]"]* %__arrayArg131, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %path_arg, %"byte[]"* %tmp9, align 8 - %tmp12 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp9, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str96, i32 0, i32 0) }, %"char[][]" %tmp12) - %tmp15 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp15, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str97, i32 0, i32 0) }) - %.rettmp.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 0 ; [#uses=1] - %tmp = load i32* %.rettmp.1.0, align 4 ; [#uses=1] - %.rettmp.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 1 ; [#uses=1] - %tmp54 = load i8** %.rettmp.1.1, align 4 ; [#uses=6] - br label %whilecond - -whilecond: ; preds = %endif, %entry - %end_pos.0 = phi i32 [ 0, %entry ], [ %tmp39, %endif ] ; [#uses=6] - %tmp22 = icmp ult i32 %end_pos.0, %tmp ; [#uses=1] - br i1 %tmp22, label %whilebody, label %endwhile - -whilebody: ; preds = %whilecond - %tmp26 = getelementptr i8* %tmp54, i32 %end_pos.0 ; [#uses=1] - %tmp27 = load i8* %tmp26 ; [#uses=1] - %tmp27.off = add i8 %tmp27, -48 ; [#uses=1] - %or.cond = icmp ugt i8 %tmp27.off, 9 ; [#uses=1] - br i1 %or.cond, label %endwhile, label %endif - -endif: ; preds = %whilebody - %tmp39 = add i32 %end_pos.0, 1 ; [#uses=1] - br label %whilecond - -endwhile: ; preds = %whilebody, %whilecond - %tmp4.i.i = icmp eq i32 %end_pos.0, 0 ; [#uses=1] - br i1 %tmp4.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %forcond.i.i - -forcond.i.i: ; preds = %forinc.i.i, %endwhile - %sign.1.i = phi i1 [ false, %endwhile ], [ %sign.0.i, %forinc.i.i ] ; [#uses=4] - %len.0.i.i = phi i32 [ %tmp33.i.i, %forinc.i.i ], [ %end_pos.0, %endwhile ] ; [#uses=3] - %p.0.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp54, %endwhile ] ; [#uses=6] - %c.0.in.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp54, %endwhile ] ; [#uses=1] - %c.0.i.i = load i8* %c.0.in.i.i ; [#uses=2] - %tmp8.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] - br i1 %tmp8.i.i, label %endfor.i.i, label %forbody.i.i - -forbody.i.i: ; preds = %forcond.i.i - switch i8 %c.0.i.i, label %endfor.i.i [ - i8 32, label %forinc.i.i - i8 9, label %forinc.i.i - i8 45, label %if20.i.i - i8 43, label %if26.i.i - ] - -if20.i.i: ; preds = %forbody.i.i - br label %forinc.i.i - -if26.i.i: ; preds = %forbody.i.i - br label %forinc.i.i - -forinc.i.i: ; preds = %if26.i.i, %if20.i.i, %forbody.i.i, %forbody.i.i - %sign.0.i = phi i1 [ false, %if26.i.i ], [ true, %if20.i.i ], [ %sign.1.i, %forbody.i.i ], [ %sign.1.i, %forbody.i.i ] ; [#uses=1] - %tmp30.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] - %tmp33.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] - br label %forcond.i.i - -endfor.i.i: ; preds = %forbody.i.i, %forcond.i.i - %tmp37.i.i = icmp eq i8 %c.0.i.i, 48 ; [#uses=1] - %tmp39.i.i = icmp sgt i32 %len.0.i.i, 1 ; [#uses=1] - %or.cond.i.i = and i1 %tmp37.i.i, %tmp39.i.i ; [#uses=1] - br i1 %or.cond.i.i, label %if40.i.i, label %endif41.i.i - -if40.i.i: ; preds = %endfor.i.i - %tmp43.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] - %tmp44.i.i = load i8* %tmp43.i.i ; [#uses=1] - %tmp45.i.i = zext i8 %tmp44.i.i to i32 ; [#uses=1] - switch i32 %tmp45.i.i, label %endif41.i.i [ - i32 120, label %case46.i.i - i32 88, label %case46.i.i - i32 98, label %case51.i.i - i32 66, label %case51.i.i - i32 111, label %case56.i.i - i32 79, label %case56.i.i - ] - -case46.i.i: ; preds = %if40.i.i, %if40.i.i - %tmp48.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] - br label %endif41.i.i - -case51.i.i: ; preds = %if40.i.i, %if40.i.i - %tmp53.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] - br label %endif41.i.i - -case56.i.i: ; preds = %if40.i.i, %if40.i.i - %tmp58.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] - br label %endif41.i.i - -endif41.i.i: ; preds = %case56.i.i, %case51.i.i, %case46.i.i, %if40.i.i, %endfor.i.i - %r.0.i.i = phi i32 [ 0, %if40.i.i ], [ 8, %case56.i.i ], [ 2, %case51.i.i ], [ 16, %case46.i.i ], [ 0, %endfor.i.i ] ; [#uses=2] - %p.2.i.i = phi i8* [ %tmp43.i.i, %if40.i.i ], [ %tmp58.i.i, %case56.i.i ], [ %tmp53.i.i, %case51.i.i ], [ %tmp48.i.i, %case46.i.i ], [ %p.0.i.i, %endfor.i.i ] ; [#uses=2] - %tmp63.i.i = icmp eq i32 %r.0.i.i, 0 ; [#uses=1] - br i1 %tmp63.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %if70.i.i - -if70.i.i: ; preds = %endif41.i.i - br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i - -_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i: ; preds = %if70.i.i, %endif41.i.i, %endwhile - %sign.2.i = phi i1 [ false, %endwhile ], [ %sign.1.i, %if70.i.i ], [ %sign.1.i, %endif41.i.i ] ; [#uses=1] - %radix.0.i = phi i32 [ 0, %endwhile ], [ %r.0.i.i, %if70.i.i ], [ 10, %endif41.i.i ] ; [#uses=2] - %p.1.i.i = phi i8* [ %p.2.i.i, %if70.i.i ], [ %tmp54, %endwhile ], [ %p.2.i.i, %endif41.i.i ] ; [#uses=1] - %tmp84.i.i = ptrtoint i8* %p.1.i.i to i32 ; [#uses=1] - %tmp85.i.i = ptrtoint i8* %tmp54 to i32 ; [#uses=1] - %tmp86.i.i = sub i32 %tmp84.i.i, %tmp85.i.i ; [#uses=2] - %tmp6.i = sub i32 %end_pos.0, %tmp86.i.i ; [#uses=1] - br label %foreachcond.i.i - -foreachcond.i.i: ; preds = %if55.i.i, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i - %value.0.i.i = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp65.i.i, %if55.i.i ] ; [#uses=3] - %foreachkey.0.i.i = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp70.i.i, %if55.i.i ] ; [#uses=3] - %tmp3.i.i = icmp ult i32 %foreachkey.0.i.i, %tmp6.i ; [#uses=1] - br i1 %tmp3.i.i, label %foreachbody.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit - -foreachbody.i.i: ; preds = %foreachcond.i.i - %tmp5.sum.i = add i32 %tmp86.i.i, %foreachkey.0.i.i ; [#uses=1] - %tmp5.i.i = getelementptr i8* %tmp54, i32 %tmp5.sum.i ; [#uses=1] - %tmp6.i.i = load i8* %tmp5.i.i ; [#uses=6] - %tmp6.off84.i.i = add i8 %tmp6.i.i, -48 ; [#uses=1] - %or.cond.i28.i = icmp ugt i8 %tmp6.off84.i.i, 9 ; [#uses=1] - br i1 %or.cond.i28.i, label %else.i.i, label %endif.i.i - -else.i.i: ; preds = %foreachbody.i.i - %tmp6.off83.i.i = add i8 %tmp6.i.i, -97 ; [#uses=1] - %or.cond81.i.i = icmp ugt i8 %tmp6.off83.i.i, 25 ; [#uses=1] - br i1 %or.cond81.i.i, label %else24.i.i, label %if22.i.i - -if22.i.i: ; preds = %else.i.i - %tmp27.i.i = add i8 %tmp6.i.i, -39 ; [#uses=1] - br label %endif.i.i - -else24.i.i: ; preds = %else.i.i - %tmp6.off.i.i = add i8 %tmp6.i.i, -65 ; [#uses=1] - %or.cond82.i.i = icmp ugt i8 %tmp6.off.i.i, 25 ; [#uses=1] - br i1 %or.cond82.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, label %if39.i.i - -if39.i.i: ; preds = %else24.i.i - %tmp44.i29.i = add i8 %tmp6.i.i, -7 ; [#uses=1] - br label %endif.i.i - -endif.i.i: ; preds = %if39.i.i, %if22.i.i, %foreachbody.i.i - %c.0.i30.i = phi i8 [ %tmp27.i.i, %if22.i.i ], [ %tmp44.i29.i, %if39.i.i ], [ %tmp6.i.i, %foreachbody.i.i ] ; [#uses=1] - %tmp48.i31.i = zext i8 %c.0.i30.i to i32 ; [#uses=1] - %tmp49.i.i = add i32 %tmp48.i31.i, 208 ; [#uses=1] - %tmp52.i.i = and i32 %tmp49.i.i, 255 ; [#uses=2] - %tmp54.i.i = icmp ult i32 %tmp52.i.i, %radix.0.i ; [#uses=1] - br i1 %tmp54.i.i, label %if55.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit - -if55.i.i: ; preds = %endif.i.i - %tmp59.i.i = zext i32 %radix.0.i to i64 ; [#uses=1] - %tmp61.i.i = mul i64 %value.0.i.i, %tmp59.i.i ; [#uses=1] - %tmp64.i.i = zext i32 %tmp52.i.i to i64 ; [#uses=1] - %tmp65.i.i = add i64 %tmp61.i.i, %tmp64.i.i ; [#uses=1] - %tmp70.i.i = add i32 %foreachkey.0.i.i, 1 ; [#uses=1] - br label %foreachcond.i.i - -_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit: ; preds = %endif.i.i, %else24.i.i, %foreachcond.i.i - %negval.i = sub i64 0, %value.0.i.i ; [#uses=1] - %condtmp.0.i = select i1 %sign.2.i, i64 %negval.i, i64 %value.0.i.i ; [#uses=1] - %tmp49 = trunc i64 %condtmp.0.i to i32 ; [#uses=1] - ret i32 %tmp49 -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection4typeMFE5tango3net3ftp9FtpClient9FtpFormatZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 %format_arg) { -entry: - %__arrayArg132 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %__arrayArg133 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp1 = icmp eq i32 %format_arg, 0 ; [#uses=1] - %tmp3 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp4 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp4, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=2] - br i1 %tmp1, label %if, label %else - -if: ; preds = %entry - %tmp6 = getelementptr [1 x %"byte[]"]* %__arrayArg132, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str99, i32 0, i32 0) }, %"byte[]"* %tmp6, align 8 - %tmp8 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp6, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str98, i32 0, i32 0) }, %"char[][]" %tmp8) - br label %endif - -else: ; preds = %entry - %tmp15 = getelementptr [1 x %"byte[]"]* %__arrayArg133, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" { i32 1, i8* getelementptr ([2 x i8]* @.str101, i32 0, i32 0) }, %"byte[]"* %tmp15, align 8 - %tmp17 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp15, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str100, i32 0, i32 0) }, %"char[][]" %tmp17) - br label %endif - -endif: ; preds = %else, %if - %tmp20 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp3 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp20, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str102, i32 0, i32 0) }) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection8modifiedMFAaZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %file_arg) { -entry: - %__arrayArg134 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] - %.rettmp18 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg134, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %file_arg, %"byte[]"* %tmp4, align 8 - %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str103, i32 0, i32 0) }, %"char[][]" %tmp7) - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str104, i32 0, i32 0) }) - %.rettmp.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 0 ; [#uses=1] - %tmp = load i32* %.rettmp.1.0, align 4 ; [#uses=1] - %.rettmp.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 1 ; [#uses=1] - %tmp27 = load i8** %.rettmp.1.1, align 4 ; [#uses=1] - %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.parseTimeval at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 31 ; [#uses=1] - %this.parseTimeval = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseTimeval at vtbl", align 4 ; [#uses=1] - %insert = insertvalue %"byte[]" undef, i32 %tmp, 0 ; <%"byte[]"> [#uses=1] - %insert29 = insertvalue %"byte[]" %insert, i8* %tmp27, 1 ; <%"byte[]"> [#uses=1] - call fastcc void %this.parseTimeval(%tango.time.Time.Time* noalias nocapture sret %.rettmp18, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert29) - %tmp2234 = getelementptr %tango.time.Time.Time* %.rettmp18, i32 0, i32 0 ; [#uses=1] - %tmp36 = load i64* %tmp2234, align 8 ; [#uses=1] - %0 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] - store i64 %tmp36, i64* %0 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12parseTimevalMFAaZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %timeval_arg) { -entry: - %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %timeval_arg43 = extractvalue %"byte[]" %timeval_arg, 0 ; [#uses=1] - %timeval_arg44 = extractvalue %"byte[]" %timeval_arg, 1 ; [#uses=6] - %tmp1 = icmp ult i32 %timeval_arg43, 14 ; [#uses=1] - br i1 %tmp1, label %if, label %endif - -if: ; preds = %entry - %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] - store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp2 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) - %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2.i, i8* getelementptr ([4 x i8]* @.str106, i32 0, i32 0), i32 3, i32 1) - %tmp5.i = bitcast i8* %.newclass_gc_alloc to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7.i = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str105, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] - %tmp7 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_throw_exception(%object.Object* %tmp7) - unreachable - -endif: ; preds = %entry - %1 = load %tango.time.chrono.Gregorian.Gregorian** @_D5tango4time6chrono9Gregorian9Gregorian7genericC5tango4time6chrono9Gregorian9Gregorian ; <%tango.time.chrono.Gregorian.Gregorian*> [#uses=2] - %tmp8 = bitcast %tango.time.chrono.Gregorian.Gregorian* %1 to %tango.time.chrono.Calendar.Calendar* ; <%tango.time.chrono.Calendar.Calendar*> [#uses=1] - %tmp9 = bitcast %tango.time.chrono.Gregorian.Gregorian* %1 to %tango.time.chrono.Calendar.Calendar.__vtbl** ; <%tango.time.chrono.Calendar.Calendar.__vtbl**> [#uses=1] - %tmp10 = load %tango.time.chrono.Calendar.Calendar.__vtbl** %tmp9 ; <%tango.time.chrono.Calendar.Calendar.__vtbl*> [#uses=1] - %"generic.toTime at vtbl" = getelementptr %tango.time.chrono.Calendar.Calendar.__vtbl* %tmp10, i32 0, i32 7 ; [#uses=1] - %generic.toTime = load void (%tango.time.Time.Time*, %tango.time.chrono.Calendar.Calendar*, i32, i32, i32, i32, i32, i32, i32)** %"generic.toTime at vtbl", align 4 ; [#uses=1] - br label %foreachcond.i - -foreachcond.i: ; preds = %if.i, %endif - %value.0.i = phi i32 [ 0, %endif ], [ %tmp19.i, %if.i ] ; [#uses=2] - %foreachkey.0.i = phi i32 [ 0, %endif ], [ %tmp21.i, %if.i ] ; [#uses=3] - %tmp3.i = icmp ult i32 %foreachkey.0.i, 4 ; [#uses=1] - br i1 %tmp3.i, label %foreachbody.i, label %foreachcond.i125 - -foreachbody.i: ; preds = %foreachcond.i - %tmp5.i47 = getelementptr i8* %timeval_arg44, i32 %foreachkey.0.i ; [#uses=1] - %tmp6.i = load i8* %tmp5.i47 ; [#uses=2] - %tmp6.off.i = add i8 %tmp6.i, -48 ; [#uses=1] - %or.cond.i = icmp ugt i8 %tmp6.off.i, 9 ; [#uses=1] - br i1 %or.cond.i, label %foreachcond.i125, label %if.i - -if.i: ; preds = %foreachbody.i - %tmp15.i = mul i32 %value.0.i, 10 ; [#uses=1] - %tmp17.i = zext i8 %tmp6.i to i32 ; [#uses=1] - %tmp18.i = add i32 %tmp17.i, -48 ; [#uses=1] - %tmp19.i = add i32 %tmp15.i, %tmp18.i ; [#uses=1] - %tmp21.i = add i32 %foreachkey.0.i, 1 ; [#uses=1] - br label %foreachcond.i - -foreachcond.i125: ; preds = %if.i136, %foreachbody.i, %foreachcond.i - %value.0.i122 = phi i32 [ %tmp19.i134, %if.i136 ], [ 0, %foreachcond.i ], [ 0, %foreachbody.i ] ; [#uses=2] - %foreachkey.0.i123 = phi i32 [ %tmp21.i135, %if.i136 ], [ 0, %foreachcond.i ], [ 0, %foreachbody.i ] ; [#uses=3] - %tmp3.i124 = icmp ult i32 %foreachkey.0.i123, 2 ; [#uses=1] - br i1 %tmp3.i124, label %foreachbody.i130, label %foreachcond.i107 - -foreachbody.i130: ; preds = %foreachcond.i125 - %tmp18.sum = add i32 %foreachkey.0.i123, 4 ; [#uses=1] - %tmp5.i126 = getelementptr i8* %timeval_arg44, i32 %tmp18.sum ; [#uses=1] - %tmp6.i127 = load i8* %tmp5.i126 ; [#uses=2] - %tmp6.off.i128 = add i8 %tmp6.i127, -48 ; [#uses=1] - %or.cond.i129 = icmp ugt i8 %tmp6.off.i128, 9 ; [#uses=1] - br i1 %or.cond.i129, label %foreachcond.i107, label %if.i136 - -if.i136: ; preds = %foreachbody.i130 - %tmp15.i131 = mul i32 %value.0.i122, 10 ; [#uses=1] - %tmp17.i132 = zext i8 %tmp6.i127 to i32 ; [#uses=1] - %tmp18.i133 = add i32 %tmp17.i132, -48 ; [#uses=1] - %tmp19.i134 = add i32 %tmp15.i131, %tmp18.i133 ; [#uses=1] - %tmp21.i135 = add i32 %foreachkey.0.i123, 1 ; [#uses=1] - br label %foreachcond.i125 - -foreachcond.i107: ; preds = %if.i118, %foreachbody.i130, %foreachcond.i125 - %value.0.i104 = phi i32 [ %tmp19.i116, %if.i118 ], [ 0, %foreachcond.i125 ], [ 0, %foreachbody.i130 ] ; [#uses=2] - %foreachkey.0.i105 = phi i32 [ %tmp21.i117, %if.i118 ], [ 0, %foreachcond.i125 ], [ 0, %foreachbody.i130 ] ; [#uses=3] - %tmp3.i106 = icmp ult i32 %foreachkey.0.i105, 2 ; [#uses=1] - br i1 %tmp3.i106, label %foreachbody.i112, label %foreachcond.i89 - -foreachbody.i112: ; preds = %foreachcond.i107 - %tmp23.sum = add i32 %foreachkey.0.i105, 6 ; [#uses=1] - %tmp5.i108 = getelementptr i8* %timeval_arg44, i32 %tmp23.sum ; [#uses=1] - %tmp6.i109 = load i8* %tmp5.i108 ; [#uses=2] - %tmp6.off.i110 = add i8 %tmp6.i109, -48 ; [#uses=1] - %or.cond.i111 = icmp ugt i8 %tmp6.off.i110, 9 ; [#uses=1] - br i1 %or.cond.i111, label %foreachcond.i89, label %if.i118 - -if.i118: ; preds = %foreachbody.i112 - %tmp15.i113 = mul i32 %value.0.i104, 10 ; [#uses=1] - %tmp17.i114 = zext i8 %tmp6.i109 to i32 ; [#uses=1] - %tmp18.i115 = add i32 %tmp17.i114, -48 ; [#uses=1] - %tmp19.i116 = add i32 %tmp15.i113, %tmp18.i115 ; [#uses=1] - %tmp21.i117 = add i32 %foreachkey.0.i105, 1 ; [#uses=1] - br label %foreachcond.i107 - -foreachcond.i89: ; preds = %if.i100, %foreachbody.i112, %foreachcond.i107 - %value.0.i86 = phi i32 [ %tmp19.i98, %if.i100 ], [ 0, %foreachcond.i107 ], [ 0, %foreachbody.i112 ] ; [#uses=2] - %foreachkey.0.i87 = phi i32 [ %tmp21.i99, %if.i100 ], [ 0, %foreachcond.i107 ], [ 0, %foreachbody.i112 ] ; [#uses=3] - %tmp3.i88 = icmp ult i32 %foreachkey.0.i87, 2 ; [#uses=1] - br i1 %tmp3.i88, label %foreachbody.i94, label %foreachcond.i71 - -foreachbody.i94: ; preds = %foreachcond.i89 - %tmp28.sum = add i32 %foreachkey.0.i87, 8 ; [#uses=1] - %tmp5.i90 = getelementptr i8* %timeval_arg44, i32 %tmp28.sum ; [#uses=1] - %tmp6.i91 = load i8* %tmp5.i90 ; [#uses=2] - %tmp6.off.i92 = add i8 %tmp6.i91, -48 ; [#uses=1] - %or.cond.i93 = icmp ugt i8 %tmp6.off.i92, 9 ; [#uses=1] - br i1 %or.cond.i93, label %foreachcond.i71, label %if.i100 - -if.i100: ; preds = %foreachbody.i94 - %tmp15.i95 = mul i32 %value.0.i86, 10 ; [#uses=1] - %tmp17.i96 = zext i8 %tmp6.i91 to i32 ; [#uses=1] - %tmp18.i97 = add i32 %tmp17.i96, -48 ; [#uses=1] - %tmp19.i98 = add i32 %tmp15.i95, %tmp18.i97 ; [#uses=1] - %tmp21.i99 = add i32 %foreachkey.0.i87, 1 ; [#uses=1] - br label %foreachcond.i89 - -foreachcond.i71: ; preds = %if.i82, %foreachbody.i94, %foreachcond.i89 - %value.0.i68 = phi i32 [ %tmp19.i80, %if.i82 ], [ 0, %foreachcond.i89 ], [ 0, %foreachbody.i94 ] ; [#uses=2] - %foreachkey.0.i69 = phi i32 [ %tmp21.i81, %if.i82 ], [ 0, %foreachcond.i89 ], [ 0, %foreachbody.i94 ] ; [#uses=3] - %tmp3.i70 = icmp ult i32 %foreachkey.0.i69, 2 ; [#uses=1] - br i1 %tmp3.i70, label %foreachbody.i76, label %foreachcond.i53 - -foreachbody.i76: ; preds = %foreachcond.i71 - %tmp33.sum = add i32 %foreachkey.0.i69, 10 ; [#uses=1] - %tmp5.i72 = getelementptr i8* %timeval_arg44, i32 %tmp33.sum ; [#uses=1] - %tmp6.i73 = load i8* %tmp5.i72 ; [#uses=2] - %tmp6.off.i74 = add i8 %tmp6.i73, -48 ; [#uses=1] - %or.cond.i75 = icmp ugt i8 %tmp6.off.i74, 9 ; [#uses=1] - br i1 %or.cond.i75, label %foreachcond.i53, label %if.i82 - -if.i82: ; preds = %foreachbody.i76 - %tmp15.i77 = mul i32 %value.0.i68, 10 ; [#uses=1] - %tmp17.i78 = zext i8 %tmp6.i73 to i32 ; [#uses=1] - %tmp18.i79 = add i32 %tmp17.i78, -48 ; [#uses=1] - %tmp19.i80 = add i32 %tmp15.i77, %tmp18.i79 ; [#uses=1] - %tmp21.i81 = add i32 %foreachkey.0.i69, 1 ; [#uses=1] - br label %foreachcond.i71 - -foreachcond.i53: ; preds = %if.i64, %foreachbody.i76, %foreachcond.i71 - %value.0.i50 = phi i32 [ %tmp19.i62, %if.i64 ], [ 0, %foreachcond.i71 ], [ 0, %foreachbody.i76 ] ; [#uses=2] - %foreachkey.0.i51 = phi i32 [ %tmp21.i63, %if.i64 ], [ 0, %foreachcond.i71 ], [ 0, %foreachbody.i76 ] ; [#uses=3] - %tmp3.i52 = icmp ult i32 %foreachkey.0.i51, 2 ; [#uses=1] - br i1 %tmp3.i52, label %foreachbody.i58, label %_D5tango4text7convert7Integer11__T4atoiTaZ4atoiFAaiZk.exit65 - -foreachbody.i58: ; preds = %foreachcond.i53 - %tmp38.sum = add i32 %foreachkey.0.i51, 12 ; [#uses=1] - %tmp5.i54 = getelementptr i8* %timeval_arg44, i32 %tmp38.sum ; [#uses=1] - %tmp6.i55 = load i8* %tmp5.i54 ; [#uses=2] - %tmp6.off.i56 = add i8 %tmp6.i55, -48 ; [#uses=1] - %or.cond.i57 = icmp ugt i8 %tmp6.off.i56, 9 ; [#uses=1] - br i1 %or.cond.i57, label %_D5tango4text7convert7Integer11__T4atoiTaZ4atoiFAaiZk.exit65, label %if.i64 - -if.i64: ; preds = %foreachbody.i58 - %tmp15.i59 = mul i32 %value.0.i50, 10 ; [#uses=1] - %tmp17.i60 = zext i8 %tmp6.i55 to i32 ; [#uses=1] - %tmp18.i61 = add i32 %tmp17.i60, -48 ; [#uses=1] - %tmp19.i62 = add i32 %tmp15.i59, %tmp18.i61 ; [#uses=1] - %tmp21.i63 = add i32 %foreachkey.0.i51, 1 ; [#uses=1] - br label %foreachcond.i53 - -_D5tango4text7convert7Integer11__T4atoiTaZ4atoiFAaiZk.exit65: ; preds = %foreachbody.i58, %foreachcond.i53 - call fastcc void %generic.toTime(%tango.time.Time.Time* noalias nocapture sret %.rettmp, %tango.time.chrono.Calendar.Calendar* %tmp8, i32 %value.0.i, i32 %value.0.i122, i32 %value.0.i104, i32 %value.0.i86, i32 %value.0.i68, i32 %value.0.i50, i32 0) - %tmp4245 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] - %tmp = load i64* %tmp4245, align 8 ; [#uses=1] - %2 = getelementptr %tango.time.Time.Time* %.sret_arg, i32 0, i32 0 ; [#uses=1] - store i64 %tmp, i64* %2 - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection4noopMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str109, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str110, i32 0, i32 0) }) - ret void -} - -define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient13FTPConnection5mkdirMFAaZAa(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { -entry: - %__arrayArg136 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp4 = getelementptr [1 x %"byte[]"]* %__arrayArg136, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %path_arg, %"byte[]"* %tmp4, align 8 - %tmp7 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp4, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str111, i32 0, i32 0) }, %"char[][]" %tmp7) - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str112, i32 0, i32 0) }) - %tmp12 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp13 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp12, i8* %tmp13, i32 12, i32 4) - %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.parse257 at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 38 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)**> [#uses=1] - %this.parse257 = load %"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.parse257 at vtbl", align 4 ; <%"byte[]" (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)*> [#uses=1] - %tmp18 = call fastcc %"byte[]" %this.parse257(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) ; <%"byte[]"> [#uses=1] - ret %"byte[]" %tmp18 -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection11getFeaturesMFZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %.frame.i = alloca %nest.splitLines, align 8 ; <%nest.splitLines*> [#uses=5] - %.rettmp.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] - %.rettmp8.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str113, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 37 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - %tmp8 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=2] - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp8, i8* %tmp9, i32 12, i32 4) - %tmp12 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp8, 1 ; <%"byte[]"> [#uses=1] - %tmp13 = call i32 @_adEq(%"byte[]" %tmp12, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str114, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp14 = icmp eq i32 %tmp13, 0 ; [#uses=1] - br i1 %tmp14, label %if, label %else - -if: ; preds = %entry - %tmp17 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5 ; <%"FtpFeature[]"*> [#uses=1] - %tmp18 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] - %.len = load i32* %tmp18 ; [#uses=1] - %tmp19 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] - %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp19 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] - %.tmp = bitcast %tango.net.ftp.FtpClient.FtpFeature* %.ptr to i8* ; [#uses=1] - call void @_d_delarray(i32 %.len, i8* %.tmp) - store %"FtpFeature[]" zeroinitializer, %"FtpFeature[]"* %tmp17 - ret void - -else: ; preds = %entry - %tmp20 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] - %tmp21 = load %"byte[]"* %tmp20 ; <%"byte[]"> [#uses=4] - %count.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 0 ; [#uses=3] - %result.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1 ; <%"char[][]"*> [#uses=1] - store i32 0, i32* %count.i, align 8 - %src_arg8.i.i = extractvalue %"byte[]" %tmp21, 0 ; [#uses=1] - %src_arg9.i.i = extractvalue %"byte[]" %tmp21, 1 ; [#uses=1] - %0 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 0 ; [#uses=1] - store i32 %src_arg8.i.i, i32* %0, align 8 - %.sret_arg10.1.i.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 1 ; [#uses=1] - store i8* %src_arg9.i.i, i8** %.sret_arg10.1.i.i, align 4 - %tmp1.i = bitcast %nest.splitLines* %.frame.i to i8* ; [#uses=2] - %tmp2.i = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i, 0 ; <%"int delegate(ref char[])"> [#uses=1] - %.func.i = insertvalue %"int delegate(ref char[])" %tmp2.i, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody41MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] - %tmp3.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, %"int delegate(ref char[])" %.func.i) ; [#uses=0] - %tmp4.i = load i32* %count.i, align 8 ; [#uses=2] - %.gc_mem.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_AAa6__initZ to %object.TypeInfo*), i32 %tmp4.i) ; [#uses=1] - %.gc_mem5.i = bitcast i8* %.gc_mem.i to %"byte[]"* ; <%"byte[]"*> [#uses=1] - %tmp6.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 0 ; [#uses=1] - store i32 %tmp4.i, i32* %tmp6.i - %tmp7.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 1 ; <%"byte[]"**> [#uses=1] - store %"byte[]"* %.gc_mem5.i, %"byte[]"** %tmp7.i - store i32 0, i32* %count.i, align 8 - %src_arg8.i15.i = extractvalue %"byte[]" %tmp21, 0 ; [#uses=1] - %src_arg9.i16.i = extractvalue %"byte[]" %tmp21, 1 ; [#uses=1] - %1 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 0 ; [#uses=1] - store i32 %src_arg8.i15.i, i32* %1, align 8 - %.sret_arg10.1.i17.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 1 ; [#uses=1] - store i8* %src_arg9.i16.i, i8** %.sret_arg10.1.i17.i, align 4 - %tmp11.i = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i, 0 ; <%"int delegate(ref char[])"> [#uses=1] - %.func12.i = insertvalue %"int delegate(ref char[])" %tmp11.i, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody42MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] - %tmp13.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, %"int delegate(ref char[])" %.func12.i) ; [#uses=0] - %tmp14.i = load %"char[][]"* %result.i ; <%"char[][]"> [#uses=2] - %tmp22109 = extractvalue %"char[][]" %tmp14.i, 0 ; [#uses=2] - %tmp22110 = extractvalue %"char[][]" %tmp14.i, 1 ; <%"byte[]"*> [#uses=4] - %tmp27 = add i32 %tmp22109, -1 ; [#uses=3] - %.gc_mem = call noalias i8* @_d_newarrayiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D47TypeInfo_AS5tango3net3ftp9FtpClient10FtpFeature6__initZ to %object.TypeInfo*), i32 %tmp27) ; [#uses=2] - %.gc_mem28 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpFeature* ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=1] - %tmp29 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] - store i32 %tmp27, i32* %tmp29 - %tmp30 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=3] - store %tango.net.ftp.FtpClient.FtpFeature* %.gc_mem28, %tango.net.ftp.FtpClient.FtpFeature** %tmp30 - %tmp36 = bitcast i8* %.gc_mem to %"byte[]"* ; <%"byte[]"*> [#uses=1] - store %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str115, i32 0, i32 0) }, %"byte[]"* %tmp36 - br label %forcond - -forcond: ; preds = %forinc, %else - %i.0 = phi i32 [ 1, %else ], [ %tmp103, %forinc ] ; [#uses=9] - %tmp41 = icmp ult i32 %i.0, %tmp27 ; [#uses=1] - br i1 %tmp41, label %forbody, label %endfor - -forbody: ; preds = %forcond - %tmp45 = getelementptr %"byte[]"* %tmp22110, i32 %i.0 ; <%"byte[]"*> [#uses=1] - %tmp46 = load %"byte[]"* %tmp45 ; <%"byte[]"> [#uses=2] - %source_arg16.i = extractvalue %"byte[]" %tmp46, 0 ; [#uses=2] - %source_arg17.i = extractvalue %"byte[]" %tmp46, 1 ; [#uses=2] - %tmp2.i.i = getelementptr i8* %source_arg17.i, i32 -1 ; [#uses=1] - br label %forcond.i.i - -forcond.i.i: ; preds = %forbody.i.i, %forbody - %len.0.i.i = phi i32 [ %source_arg16.i, %forbody ], [ %tmp4.i.i, %forbody.i.i ] ; [#uses=2] - %p.0.i.i = phi i8* [ %tmp2.i.i, %forbody ], [ %tmp7.i.i, %forbody.i.i ] ; [#uses=1] - %tmp4.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] - %tmp5.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] - br i1 %tmp5.i.i, label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit, label %forbody.i.i - -forbody.i.i: ; preds = %forcond.i.i - %tmp7.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=3] - %tmp8.i.i = load i8* %tmp7.i.i ; [#uses=1] - %tmp12.i.i = icmp eq i8 %tmp8.i.i, 32 ; [#uses=1] - br i1 %tmp12.i.i, label %if.i.i, label %forcond.i.i - -if.i.i: ; preds = %forbody.i.i - %tmp15.i.i = ptrtoint i8* %tmp7.i.i to i32 ; [#uses=1] - %tmp16.i.i = ptrtoint i8* %source_arg17.i to i32 ; [#uses=1] - %tmp17.i.i = sub i32 %tmp15.i.i, %tmp16.i.i ; [#uses=1] - br label %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit - -_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit: ; preds = %if.i.i, %forcond.i.i - %tmp1318.i = phi i32 [ %tmp17.i.i, %if.i.i ], [ %source_arg16.i, %forcond.i.i ] ; [#uses=3] - %.ptr51 = load %tango.net.ftp.FtpClient.FtpFeature** %tmp30 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=2] - %tmp59 = getelementptr %"byte[]"* %tmp22110, i32 %i.0, i32 1 ; [#uses=2] - %.ptr60 = load i8** %tmp59 ; [#uses=1] - %tmp64 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr51, i32 %i.0, i32 0, i32 0 ; [#uses=1] - store i32 %tmp1318.i, i32* %tmp64 - %tmp65 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr51, i32 %i.0, i32 0, i32 1 ; [#uses=1] - store i8* %.ptr60, i8** %tmp65 - %tmp70 = getelementptr %"byte[]"* %tmp22110, i32 %i.0, i32 0 ; [#uses=1] - %.len71 = load i32* %tmp70 ; [#uses=2] - %tmp72 = add i32 %.len71, -1 ; [#uses=1] - %tmp74 = icmp ult i32 %tmp1318.i, %tmp72 ; [#uses=1] - br i1 %tmp74, label %if75, label %forinc - -if75: ; preds = %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit - %.ptr80 = load %tango.net.ftp.FtpClient.FtpFeature** %tmp30 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=2] - %.ptr89 = load i8** %tmp59 ; [#uses=1] - %tmp91 = add i32 %tmp1318.i, 1 ; [#uses=2] - %tmp98 = getelementptr i8* %.ptr89, i32 %tmp91 ; [#uses=1] - %tmp99 = sub i32 %.len71, %tmp91 ; [#uses=1] - %tmp100 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr80, i32 %i.0, i32 1, i32 0 ; [#uses=1] - store i32 %tmp99, i32* %tmp100 - %tmp101 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr80, i32 %i.0, i32 1, i32 1 ; [#uses=1] - store i8* %tmp98, i8** %tmp101 - br label %forinc - -forinc: ; preds = %if75, %_D5tango4text4Util13__T6locateTaZ6locateFAaakZk.exit - %tmp103 = add i32 %i.0, 1 ; [#uses=1] - br label %forcond - -endfor: ; preds = %forcond - %.tmp108 = bitcast %"byte[]"* %tmp22110 to i8* ; [#uses=1] - call void @_d_delarray(i32 %tmp22109, i8* %.tmp108) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection11sendCommandMFAaAAaXv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg, %"char[][]" %parameters_arg) { -entry: - %parameters_arg55 = extractvalue %"char[][]" %parameters_arg, 0 ; [#uses=1] - %parameters_arg56 = extractvalue %"char[][]" %parameters_arg, 1 ; <%"byte[]"*> [#uses=1] - %command_arg53 = extractvalue %"byte[]" %command_arg, 0 ; [#uses=1] - %command_arg54 = extractvalue %"byte[]" %command_arg, 1 ; [#uses=1] - br label %foreachcond - -foreachcond: ; preds = %foreachbody, %entry - %socketCommand.0.0 = phi i32 [ %command_arg53, %entry ], [ %tmp17, %foreachbody ] ; [#uses=6] - %socketCommand.1.0 = phi i8* [ %command_arg54, %entry ], [ %.gc_mem22, %foreachbody ] ; [#uses=2] - %foreachkey.0 = phi i32 [ 0, %entry ], [ %tmp28, %foreachbody ] ; [#uses=3] - %tmp4 = icmp ult i32 %foreachkey.0, %parameters_arg55 ; [#uses=1] - br i1 %tmp4, label %foreachbody, label %foreachend - -foreachbody: ; preds = %foreachcond - %tmp6 = getelementptr %"byte[]"* %parameters_arg56, i32 %foreachkey.0 ; <%"byte[]"*> [#uses=1] - %tmp7 = load %"byte[]"* %tmp6 ; <%"byte[]"> [#uses=2] - %tmp751 = extractvalue %"byte[]" %tmp7, 0 ; [#uses=2] - %tmp752 = extractvalue %"byte[]" %tmp7, 1 ; [#uses=1] - %tmp10 = add i32 %tmp751, 1 ; [#uses=3] - %.nongc_mem = alloca i8, i32 %tmp10, align 1 ; [#uses=3] - store i8 32, i8* %.nongc_mem, align 1 - %tmp13 = getelementptr i8* %.nongc_mem, i32 1 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp13, i8* %tmp752, i32 %tmp751, i32 1) - %tmp17 = add i32 %socketCommand.0.0, %tmp10 ; [#uses=2] - %.gc_mem22 = tail call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp17, i32 %socketCommand.0.0, i8* %socketCommand.1.0) ; [#uses=2] - %tmp23 = getelementptr i8* %.gc_mem22, i32 %socketCommand.0.0 ; [#uses=1] - tail call void @llvm.memcpy.i32(i8* %tmp23, i8* %.nongc_mem, i32 %tmp10, i32 1) - %tmp28 = add i32 %foreachkey.0, 1 ; [#uses=1] - br label %foreachcond - -foreachend: ; preds = %foreachcond - %tmp31 = add i32 %socketCommand.0.0, 2 ; [#uses=2] - %.gc_mem36 = tail call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp31, i32 %socketCommand.0.0, i8* %socketCommand.1.0) ; [#uses=2] - %tmp37 = getelementptr i8* %.gc_mem36, i32 %socketCommand.0.0 ; [#uses=1] - %tmp3757 = bitcast i8* %tmp37 to i16* ; [#uses=1] - %tmp = load i16* bitcast ([3 x i8]* @.str117 to i16*), align 2 ; [#uses=1] - store i16 %tmp, i16* %tmp3757, align 1 - %tmp41 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet* ; <%tango.net.ftp.Telnet.Telnet*> [#uses=1] - %tmp42 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet.__vtbl** ; <%tango.net.ftp.Telnet.Telnet.__vtbl**> [#uses=1] - %tmp43 = load %tango.net.ftp.Telnet.Telnet.__vtbl** %tmp42 ; <%tango.net.ftp.Telnet.Telnet.__vtbl*> [#uses=1] - %"(cast(Telnet)this).sendData at vtbl" = getelementptr %tango.net.ftp.Telnet.Telnet.__vtbl* %tmp43, i32 0, i32 7 ; [#uses=1] - %"(cast(Telnet)this).sendData" = load void (%tango.net.ftp.Telnet.Telnet*, %"byte[]")** %"(cast(Telnet)this).sendData at vtbl", align 4 ; [#uses=1] - %tmp49 = insertvalue %"byte[]" undef, i32 %tmp31, 0 ; <%"byte[]"> [#uses=1] - %tmp50 = insertvalue %"byte[]" %tmp49, i8* %.gc_mem36, 1 ; <%"byte[]"> [#uses=1] - tail call fastcc void %"(cast(Telnet)this).sendData"(%tango.net.ftp.Telnet.Telnet* %tmp41, %"byte[]" %tmp50) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFAaZS5tango3net3ftp9FtpClient11FtpResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %expected_code_arg) { -entry: - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %expected_code_arg26 = extractvalue %"byte[]" %expected_code_arg, 0 ; [#uses=1] - %expected_code_arg27 = extractvalue %"byte[]" %expected_code_arg, 1 ; [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 37 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - %tmp4 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=3] - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp4, i8* %tmp5, i32 12, i32 4) - %tmp12 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp4, 1 ; <%"byte[]"> [#uses=1] - %tmp13 = insertvalue %"byte[]" undef, i32 %expected_code_arg26, 0 ; <%"byte[]"> [#uses=1] - %tmp14 = insertvalue %"byte[]" %tmp13, i8* %expected_code_arg27, 1 ; <%"byte[]"> [#uses=1] - %tmp15 = call i32 @_adEq(%"byte[]" %tmp12, %"byte[]" %tmp14, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp16 = icmp eq i32 %tmp15, 0 ; [#uses=1] - br i1 %tmp16, label %if, label %endif - -if: ; preds = %entry - %tmp20 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp20, i32 0, i32 14 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] - call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) - br label %endif - -endif: ; preds = %if, %entry - %tmp22 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.sret_arg, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp22, i8* %tmp4, i32 12, i32 1) - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection12readResponseMFZS5tango3net3ftp9FtpClient11FtpResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.sret_arg, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp2 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=4] - %.rettmp6 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - call fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) - call fastcc void @_D5tango4time4Time8TimeSpan10fromMillisFlZS5tango4time4Time8TimeSpan(%tango.time.Time.Time* noalias nocapture sret %.rettmp2, i64 2500) - %tmp1.i = getelementptr %tango.time.Time.Time* %.rettmp2, i32 0, i32 0 ; [#uses=1] - %tmp2.i = load i64* %tmp1.i, align 8 ; [#uses=1] - %tmp4.i = mul i64 %tmp2.i, 10 ; [#uses=1] - %tmp1.i177 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] - %tmp3.i = load i64* %tmp1.i177, align 8 ; [#uses=1] - %tmp5.i = add i64 %tmp3.i, %tmp4.i ; [#uses=1] - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=6] - call void @llvm.memcpy.i32(i8* %tmp5, i8* getelementptr (%tango.net.ftp.FtpClient.FtpResponse* @_D5tango3net3ftp9FtpClient11FtpResponse6__initZ, i32 0, i32 0, i32 0), i32 12, i32 4) - br label %whilecond - -whilecond: ; preds = %andand153, %andand139, %endif, %entry - call fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp6) - %tmp1.i181 = getelementptr %tango.time.Time.Time* %.rettmp6, i32 0, i32 0 ; [#uses=1] - %tmp3.i183 = load i64* %tmp1.i181, align 8 ; [#uses=1] - %tmp5.i185 = icmp slt i64 %tmp3.i183, %tmp5.i ; [#uses=1] - br i1 %tmp5.i185, label %whilebody, label %endwhile - -whilebody: ; preds = %whilecond - %tmp10 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp11 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp10 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readLine at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp11, i32 0, i32 8 ; <%"byte[]" (%tango.net.ftp.Telnet.Telnet*)**> [#uses=1] - %this.readLine = load %"byte[]" (%tango.net.ftp.Telnet.Telnet*)** %"this.readLine at vtbl", align 4 ; <%"byte[]" (%tango.net.ftp.Telnet.Telnet*)*> [#uses=1] - %tmp13 = bitcast %tango.net.ftp.FtpClient.FTPConnection* %.this_arg to %tango.net.ftp.Telnet.Telnet* ; <%tango.net.ftp.Telnet.Telnet*> [#uses=1] - %tmp14 = call fastcc %"byte[]" %this.readLine(%tango.net.ftp.Telnet.Telnet* %tmp13) ; <%"byte[]"> [#uses=2] - %tmp14168 = extractvalue %"byte[]" %tmp14, 0 ; [#uses=9] - %tmp14169 = extractvalue %"byte[]" %tmp14, 1 ; [#uses=9] - %tmp16 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1, i32 0 ; [#uses=6] - %.len = load i32* %tmp16 ; [#uses=4] - %tmp17 = icmp eq i32 %.len, 0 ; [#uses=1] - br i1 %tmp17, label %if, label %else - -if: ; preds = %whilebody - %tmp20 = icmp ult i32 %tmp14168, 4 ; [#uses=1] - br i1 %tmp20, label %if21, label %endif22 - -if21: ; preds = %if - call void @llvm.memcpy.i32(i8* %tmp5, i8* getelementptr ([4 x i8]* @.str118, i32 0, i32 0), i32 3, i32 1) - br label %endwhile - -endif22: ; preds = %if - call void @llvm.memcpy.i32(i8* %tmp5, i8* %tmp14169, i32 3, i32 1) - %tmp34 = getelementptr i8* %tmp14169, i32 4 ; [#uses=1] - %tmp35 = add i32 %tmp14168, -4 ; [#uses=1] - store i32 %tmp35, i32* %tmp16 - %tmp37 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1, i32 1 ; [#uses=1] - store i8* %tmp34, i8** %tmp37 - br label %endif - -else: ; preds = %whilebody - %tmp41 = add i32 %.len, 1 ; [#uses=11] - %tmp44 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 1, i32 1 ; [#uses=5] - %.ptr45 = load i8** %tmp44 ; [#uses=1] - %.gc_mem = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp41, i32 %.len, i8* %.ptr45) ; [#uses=5] - %tmp46 = getelementptr i8* %.gc_mem, i32 %.len ; [#uses=1] - store i8 10, i8* %tmp46, align 1 - store i32 %tmp41, i32* %tmp16 - store i8* %.gc_mem, i8** %tmp44 - %tmp51 = icmp ugt i32 %tmp14168, 4 ; [#uses=1] - br i1 %tmp51, label %andand, label %else65 - -andand: ; preds = %else - %tmp59 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp14169, 1 ; <%"byte[]"> [#uses=1] - %tmp60 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp5, 1 ; <%"byte[]"> [#uses=1] - %tmp61 = call i32 @_adEq(%"byte[]" %tmp59, %"byte[]" %tmp60, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp62 = icmp eq i32 %tmp61, 0 ; [#uses=1] - br i1 %tmp62, label %else65, label %if63 - -if63: ; preds = %andand - %tmp71 = getelementptr i8* %tmp14169, i32 4 ; [#uses=1] - %tmp72 = add i32 %tmp14168, -4 ; [#uses=2] - %tmp75 = add i32 %tmp41, %tmp72 ; [#uses=2] - %.gc_mem80 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp75, i32 %tmp41, i8* %.gc_mem) ; [#uses=2] - %tmp81 = getelementptr i8* %.gc_mem80, i32 %tmp41 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp81, i8* %tmp71, i32 %tmp72, i32 1) - store i32 %tmp75, i32* %tmp16 - store i8* %.gc_mem80, i8** %tmp44 - br label %endif - -else65: ; preds = %andand, %else - %tmp87 = icmp ugt i32 %tmp14168, 2 ; [#uses=1] - br i1 %tmp87, label %andand88, label %else99 - -andand88: ; preds = %else65 - %tmp93 = load i8* %tmp14169 ; [#uses=1] - %tmp95 = icmp eq i8 %tmp93, 32 ; [#uses=1] - br i1 %tmp95, label %if97, label %else99 - -if97: ; preds = %andand88 - %tmp105 = getelementptr i8* %tmp14169, i32 1 ; [#uses=1] - %tmp106 = add i32 %tmp14168, -1 ; [#uses=2] - %tmp109 = add i32 %tmp41, %tmp106 ; [#uses=2] - %.gc_mem114 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp109, i32 %tmp41, i8* %.gc_mem) ; [#uses=2] - %tmp115 = getelementptr i8* %.gc_mem114, i32 %tmp41 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp115, i8* %tmp105, i32 %tmp106, i32 1) - store i32 %tmp109, i32* %tmp16 - store i8* %.gc_mem114, i8** %tmp44 - br label %endif - -else99: ; preds = %andand88, %else65 - %tmp124 = add i32 %tmp41, %tmp14168 ; [#uses=2] - %.gc_mem129 = call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp124, i32 %tmp41, i8* %.gc_mem) ; [#uses=2] - %tmp132 = getelementptr i8* %.gc_mem129, i32 %tmp41 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp132, i8* %tmp14169, i32 %tmp14168, i32 1) - store i32 %tmp124, i32* %tmp16 - store i8* %.gc_mem129, i8** %tmp44 - br label %endif - -endif: ; preds = %else99, %if97, %if63, %endif22 - %tmp138 = icmp ult i32 %tmp14168, 4 ; [#uses=1] - br i1 %tmp138, label %whilecond, label %andand139 - -andand139: ; preds = %endif - %tmp148 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp14169, 1 ; <%"byte[]"> [#uses=1] - %tmp149 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp5, 1 ; <%"byte[]"> [#uses=1] - %tmp150 = call i32 @_adEq(%"byte[]" %tmp148, %"byte[]" %tmp149, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp151 = icmp eq i32 %tmp150, 0 ; [#uses=1] - br i1 %tmp151, label %whilecond, label %andand153 - -andand153: ; preds = %andand139 - %tmp157 = getelementptr i8* %tmp14169, i32 3 ; [#uses=1] - %tmp158 = load i8* %tmp157 ; [#uses=1] - %tmp160 = icmp eq i8 %tmp158, 32 ; [#uses=1] - br i1 %tmp160, label %endwhile, label %whilecond - -endwhile: ; preds = %andand153, %if21, %whilecond - %tmp165 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.sret_arg, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp165, i8* %tmp5, i32 12, i32 1) - ret void -} - -define fastcc %"byte[]" @_D5tango3net3ftp9FtpClient13FTPConnection8parse257MFS5tango3net3ftp9FtpClient11FtpResponseZAa(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response_arg) { -entry: - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response_arg, i32 0, i32 1, i32 0 ; [#uses=3] - %.len = load i32* %tmp1 ; [#uses=2] - %.gc_mem = tail call noalias i8* @_d_newarrayiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %.len) ; [#uses=3] - %.len6 = load i32* %tmp1 ; [#uses=1] - %tmp7 = icmp ugt i32 %.len6, 2 ; [#uses=1] - br i1 %tmp7, label %whilecond, label %if - -if: ; preds = %entry - %tmp9 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp9 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 14 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] - tail call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response_arg) - br label %whilecond - -whilecond: ; preds = %endif25, %if, %entry - %pos.1 = phi i32 [ 1, %if ], [ %tmp70, %endif25 ], [ 1, %entry ] ; [#uses=4] - %len.1 = phi i32 [ 0, %if ], [ %len.0, %endif25 ], [ 0, %entry ] ; [#uses=5] - %.len14 = load i32* %tmp1 ; [#uses=2] - %tmp16 = icmp ult i32 %pos.1, %.len14 ; [#uses=1] - br i1 %tmp16, label %whilebody, label %endwhile - -whilebody: ; preds = %whilecond - %tmp18 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response_arg, i32 0, i32 1, i32 1 ; [#uses=1] - %.ptr = load i8** %tmp18 ; [#uses=2] - %tmp20 = getelementptr i8* %.ptr, i32 %pos.1 ; [#uses=1] - %tmp21 = load i8* %tmp20 ; [#uses=2] - %tmp23 = icmp eq i8 %tmp21, 34 ; [#uses=1] - br i1 %tmp23, label %if24, label %else - -if24: ; preds = %whilebody - %tmp27 = add i32 %pos.1, 1 ; [#uses=3] - %tmp31 = icmp eq i32 %tmp27, %.len14 ; [#uses=1] - br i1 %tmp31, label %endwhile, label %endif33 - -endif33: ; preds = %if24 - %tmp39 = getelementptr i8* %.ptr, i32 %tmp27 ; [#uses=1] - %tmp40 = load i8* %tmp39 ; [#uses=2] - %tmp42 = icmp eq i8 %tmp40, 34 ; [#uses=1] - br i1 %tmp42, label %if43, label %endwhile - -if43: ; preds = %endif33 - %tmp50 = getelementptr i8* %.gc_mem, i32 %len.1 ; [#uses=1] - store i8 %tmp40, i8* %tmp50 - br label %endif25 - -else: ; preds = %whilebody - %tmp62 = getelementptr i8* %.gc_mem, i32 %len.1 ; [#uses=1] - store i8 %tmp21, i8* %tmp62 - br label %endif25 - -endif25: ; preds = %else, %if43 - %pos.0 = phi i32 [ %tmp27, %if43 ], [ %pos.1, %else ] ; [#uses=1] - %len.0 = add i32 %len.1, 1 ; [#uses=1] - %tmp70 = add i32 %pos.0, 1 ; [#uses=1] - br label %whilecond - -endwhile: ; preds = %endif33, %if24, %whilecond - %.gc_mem76 = tail call i8* @_d_arraysetlengthiT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %len.1, i32 %.len, i8* %.gc_mem) ; [#uses=1] - %insert = insertvalue %"byte[]" undef, i32 %len.1, 0 ; <%"byte[]"> [#uses=1] - %insert82 = insertvalue %"byte[]" %insert, i8* %.gc_mem76, 1 ; <%"byte[]"> [#uses=1] - ret %"byte[]" %insert82 -} - -define fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp9FtpClient13FTPConnection13getDataSocketMFZC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %tmp63207 = alloca [64 x i8], align 1 ; <[64 x i8]*> [#uses=1] - %__arrayArg139 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %__arrayArg138 = alloca [3 x %"byte[]"], align 8 ; <[3 x %"byte[]"]*> [#uses=3] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp145208 = alloca [64 x i8], align 1 ; <[64 x i8]*> [#uses=1] - %foo = alloca [20 x i8], align 1 ; <[20 x i8]*> [#uses=12] - %__arrayArg140 = alloca [7 x %"byte[]"], align 8 ; <[7 x %"byte[]"]*> [#uses=7] - %__arrayArg141 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp204 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %tmp145208.sub = getelementptr [64 x i8]* %tmp145208, i32 0, i32 0 ; [#uses=1] - %tmp63207.sub = getelementptr [64 x i8]* %tmp63207, i32 0, i32 0 ; [#uses=1] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 9 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] - %tmp2 = load %tango.net.SocketConduit.SocketConduit** %tmp1 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp3 = icmp eq %tango.net.SocketConduit.SocketConduit* %tmp2, null ; [#uses=1] - br i1 %tmp3, label %endif, label %if - -if: ; preds = %entry - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp5 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 44 ; [#uses=1] - %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %tmp2) - br label %endif - -endif: ; preds = %if, %entry - %tmp13 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] - %tmp14 = load i32* %tmp13 ; [#uses=1] - switch i32 %tmp14, label %default15 [ - i32 1, label %endif.case_crit_edge - i32 0, label %case25 - ] - -endif.case_crit_edge: ; preds = %endif - %tmp21.pre = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - br label %case - -default15: ; preds = %endif - %tmp17 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp17 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 5 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] - call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 23, i8* getelementptr ([24 x i8]* @.str120, i32 0, i32 0) }) - br label %case - -case: ; preds = %default15, %endif.case_crit_edge - %tmp21.pre-phi = phi %tango.net.ftp.FtpClient.FTPConnection.__vtbl** [ %tmp21.pre, %endif.case_crit_edge ], [ %tmp17, %default15 ] ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp22 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp21.pre-phi ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.connectPassive at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp22, i32 0, i32 40 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)**> [#uses=1] - %this.connectPassive = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.connectPassive at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*> [#uses=1] - %tmp24 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.connectPassive(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - ret %tango.net.SocketConduit.SocketConduit* %tmp24 - -case25: ; preds = %endif - %tmp28 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 1 ; <%tango.net.Socket.Address**> [#uses=1] - %tmp29 = load %tango.net.Socket.Address** %tmp28 ; <%tango.net.Socket.Address*> [#uses=1] - %tmp30 = bitcast %tango.net.Socket.Address* %tmp29 to %object.Object* ; <%object.Object*> [#uses=1] - %tmp31 = call %object.Object* @_d_dynamic_cast(%object.Object* %tmp30, %object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) nounwind readonly ; <%object.Object*> [#uses=3] - %tmp32 = bitcast %object.Object* %tmp31 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=8] - %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net13SocketConduit13SocketConduit7__ClassZ) ; [#uses=5] - %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.SocketConduit.SocketConduit* ; <%tango.net.SocketConduit.SocketConduit*> [#uses=4] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.SocketConduit.SocketConduit.__vtbl** ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=3] - store %tango.net.SocketConduit.SocketConduit.__vtbl* @_D5tango3net13SocketConduit13SocketConduit6__vtblZ, %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp33 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp33, i8* bitcast (%15** getelementptr (%tango.net.SocketConduit.SocketConduit* bitcast (%23* @_D5tango3net13SocketConduit13SocketConduit6__initZ to %tango.net.SocketConduit.SocketConduit*), i32 0, i32 2) to i8*), i32 40, i32 1) - %tmp1.i.i.i = getelementptr i8* %.newclass_gc_alloc, i32 28 ; [#uses=1] - %1 = bitcast i8* %tmp1.i.i.i to %tango.net.Socket.Socket** ; <%tango.net.Socket.Socket**> [#uses=1] - %.newclass_gc_alloc.i.i.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket6Socket7__ClassZ) ; [#uses=7] - %.newclass_gc.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i to %tango.net.Socket.Socket* ; <%tango.net.Socket.Socket*> [#uses=2] - %vtbl.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i to %tango.net.Socket.Socket.__vtbl** ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - store %tango.net.Socket.Socket.__vtbl* @_D5tango3net6Socket6Socket6__vtblZ, %tango.net.Socket.Socket.__vtbl** %vtbl.i.i.i - %monitor.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 4 ; [#uses=1] - %2 = bitcast i8* %monitor.i.i.i to i8** ; [#uses=1] - store i8* null, i8** %2 - %tmp2.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2.i.i.i, i8* bitcast (i32* getelementptr (%tango.net.Socket.Socket* bitcast (%25* @_D5tango3net6Socket6Socket6__initZ to %tango.net.Socket.Socket*), i32 0, i32 2) to i8*), i32 16, i32 1) - %tmp1.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 12 ; [#uses=1] - %3 = bitcast i8* %tmp1.i.i.i.i to i32* ; [#uses=1] - store i32 1, i32* %3 - %tmp4.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 16 ; [#uses=1] - %4 = bitcast i8* %tmp4.i.i.i.i to i32* ; [#uses=1] - store i32 2, i32* %4 - %tmp7.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i, i32 20 ; [#uses=1] - %5 = bitcast i8* %tmp7.i.i.i.i to i32* ; [#uses=1] - store i32 6, i32* %5 - call fastcc void @_D5tango3net6Socket6Socket10initializeMFT5tango3net6Socket8socket_tZv(%tango.net.Socket.Socket* %.newclass_gc.i.i.i, i32 -1) - store %tango.net.Socket.Socket* %.newclass_gc.i.i.i, %tango.net.Socket.Socket** %1 - %tmp40 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"listener.bind at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp40, i32 0, i32 19 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)**> [#uses=1] - %listener.bind = load %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)** %"listener.bind at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*> [#uses=1] - %tmp44 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 2 ; <%tango.net.Socket.Address**> [#uses=1] - %tmp45 = load %tango.net.Socket.Address** %tmp44 ; <%tango.net.Socket.Address*> [#uses=1] - %tmp46 = call fastcc %tango.net.SocketConduit.SocketConduit* %listener.bind(%tango.net.SocketConduit.SocketConduit* %.newclass_gc, %tango.net.Socket.Address* %tmp45) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=0] - %tmp49 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"listener.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp49, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %listener.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"listener.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp51 = call fastcc %tango.net.Socket.Socket* %listener.socket(%tango.net.SocketConduit.SocketConduit* %.newclass_gc) ; <%tango.net.Socket.Socket*> [#uses=2] - %tmp52 = getelementptr %tango.net.Socket.Socket* %tmp51, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - %tmp53 = load %tango.net.Socket.Socket.__vtbl** %tmp52 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] - %"listener.socket().listen at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp53, i32 0, i32 13 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)**> [#uses=1] - %"listener.socket().listen" = load %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)** %"listener.socket().listen at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*> [#uses=1] - %tmp55 = call fastcc %tango.net.Socket.Socket* %"listener.socket().listen"(%tango.net.Socket.Socket* %tmp51, i32 32) ; <%tango.net.Socket.Socket*> [#uses=0] - %tmp57 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=5] - %tmp58 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.is_supported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp58, i32 0, i32 42 ; [#uses=1] - %this.is_supported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.is_supported at vtbl", align 4 ; [#uses=1] - %tmp60 = call fastcc i1 %this.is_supported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str122, i32 0, i32 0) }) ; [#uses=1] - br i1 %tmp60, label %if61, label %else - -if61: ; preds = %case25 - %tmp66 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp66, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - %tmp68 = getelementptr [1 x %"byte[]"]* %__arrayArg139, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - %tmp70 = insertvalue %"byte[]" { i32 64, i8* undef }, i8* %tmp63207.sub, 1 ; <%"byte[]"> [#uses=1] - %tmp71 = getelementptr [3 x %"byte[]"]* %__arrayArg138, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" { i32 9, i8* getelementptr ([10 x i8]* @.str124, i32 0, i32 0) }, %"byte[]"* %tmp71, align 8 - %tmp72 = getelementptr [3 x %"byte[]"]* %__arrayArg138, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] - %tmp74 = bitcast %object.Object* %tmp31 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=2] - %tmp75 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp74 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.toAddrString at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp75, i32 0, i32 10 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)**> [#uses=1] - %data_addr.toAddrString = load %"byte[]" (%tango.net.Socket.IPv4Address*)** %"data_addr.toAddrString at vtbl", align 4 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)*> [#uses=1] - %tmp77 = call fastcc %"byte[]" %data_addr.toAddrString(%tango.net.Socket.IPv4Address* %tmp32) ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp77, %"byte[]"* %tmp72, align 8 - %tmp78 = getelementptr [3 x %"byte[]"]* %__arrayArg138, i32 0, i32 2 ; <%"byte[]"*> [#uses=1] - %tmp81 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp74 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.toPortString at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp81, i32 0, i32 11 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)**> [#uses=1] - %data_addr.toPortString = load %"byte[]" (%tango.net.Socket.IPv4Address*)** %"data_addr.toPortString at vtbl", align 4 ; <%"byte[]" (%tango.net.Socket.IPv4Address*)*> [#uses=1] - %tmp83 = call fastcc %"byte[]" %data_addr.toPortString(%tango.net.Socket.IPv4Address* %tmp32) ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp83, %"byte[]"* %tmp78, align 8 - %tmp85 = insertvalue %"char[][]" { i32 3, %"byte[]"* undef }, %"byte[]"* %tmp71, 1 ; <%"char[][]"> [#uses=1] - %tmp86 = call fastcc %"byte[]" @_D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa(%"byte[]" %tmp70, %"char[][]" %tmp85) ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp86, %"byte[]"* %tmp68, align 8 - %tmp88 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp68, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str123, i32 0, i32 0) }, %"char[][]" %tmp88) - %tmp91 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp91, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str125, i32 0, i32 0) }) - ret %tango.net.SocketConduit.SocketConduit* %.newclass_gc - -else: ; preds = %case25 - %tmp94 = bitcast %object.Object* %tmp31 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=6] - %tmp95 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.addr at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp95, i32 0, i32 9 ; [#uses=1] - %data_addr.addr = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl", align 4 ; [#uses=1] - %tmp97 = call fastcc i32 %data_addr.addr(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] - %tmp98 = lshr i32 %tmp97, 24 ; [#uses=1] - %tmp102 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.addr at vtbl103" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp102, i32 0, i32 9 ; [#uses=1] - %data_addr.addr105 = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl103", align 4 ; [#uses=1] - %tmp106 = call fastcc i32 %data_addr.addr105(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] - %tmp107 = lshr i32 %tmp106, 16 ; [#uses=1] - %tmp108 = and i32 %tmp107, 255 ; [#uses=1] - %tmp111 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.addr at vtbl112" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp111, i32 0, i32 9 ; [#uses=1] - %data_addr.addr114 = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl112", align 4 ; [#uses=1] - %tmp115 = call fastcc i32 %data_addr.addr114(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] - %tmp116 = lshr i32 %tmp115, 8 ; [#uses=1] - %tmp117 = and i32 %tmp116, 255 ; [#uses=1] - %tmp120 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.addr at vtbl121" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp120, i32 0, i32 9 ; [#uses=1] - %data_addr.addr123 = load i32 (%tango.net.Socket.IPv4Address*)** %"data_addr.addr at vtbl121", align 4 ; [#uses=1] - %tmp124 = call fastcc i32 %data_addr.addr123(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] - %tmp126 = and i32 %tmp124, 255 ; [#uses=1] - %tmp129 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.port at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp129, i32 0, i32 8 ; [#uses=1] - %data_addr.port = load i16 (%tango.net.Socket.IPv4Address*)** %"data_addr.port at vtbl", align 4 ; [#uses=1] - %tmp131 = call fastcc zeroext i16 %data_addr.port(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] - %tmp132 = zext i16 %tmp131 to i32 ; [#uses=1] - %tmp133210 = lshr i32 %tmp132, 8 ; [#uses=1] - %tmp137 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp94 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"data_addr.port at vtbl138" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp137, i32 0, i32 8 ; [#uses=1] - %data_addr.port140 = load i16 (%tango.net.Socket.IPv4Address*)** %"data_addr.port at vtbl138", align 4 ; [#uses=1] - %tmp141 = call fastcc zeroext i16 %data_addr.port140(%tango.net.Socket.IPv4Address* %tmp32) ; [#uses=1] - %tmp142 = zext i16 %tmp141 to i32 ; [#uses=1] - %tmp144 = and i32 %tmp142, 255 ; [#uses=1] - %tmp147 = insertvalue %"byte[]" { i32 64, i8* undef }, i8* %tmp145208.sub, 1 ; <%"byte[]"> [#uses=1] - %tmp148 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" { i32 17, i8* getelementptr ([18 x i8]* @.str126, i32 0, i32 0) }, %"byte[]"* %tmp148, align 8 - %tmp149 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 1 ; <%"byte[]"*> [#uses=1] - %tmp49.i = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] - %tmp49178.i = extractvalue %"byte[]" %tmp49.i, 1 ; [#uses=1] - %tmp52.i = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] - %tmp56.i = getelementptr [20 x i8]* %foo, i32 0, i32 3 ; [#uses=1] - br i1 false, label %dowhile82.i, label %if59.i - -if59.i: ; preds = %else - br label %dowhile.i - -dowhile.i: ; preds = %andand.i, %if59.i - %p.0.i = phi i8* [ %tmp56.i, %if59.i ], [ %tmp65.i, %andand.i ] ; [#uses=1] - %v.0.i = phi i32 [ %tmp98, %if59.i ], [ %tmp75.i, %andand.i ] ; [#uses=2] - %len.0.i = phi i32 [ 3, %if59.i ], [ %tmp78.i, %andand.i ] ; [#uses=3] - %tmp65.i = getelementptr i8* %p.0.i, i32 -1 ; [#uses=2] - %tmp68.i = urem i32 %v.0.i, %tmp52.i ; [#uses=1] - %tmp71.i = getelementptr i8* %tmp49178.i, i32 %tmp68.i ; [#uses=1] - %tmp72.i = load i8* %tmp71.i ; [#uses=1] - store i8 %tmp72.i, i8* %tmp65.i - %tmp75.i = udiv i32 %v.0.i, %tmp52.i ; [#uses=2] - %tmp76.i = icmp eq i32 %tmp75.i, 0 ; [#uses=1] - br i1 %tmp76.i, label %condtrue.i, label %andand.i - -andand.i: ; preds = %dowhile.i - %tmp78.i = add i32 %len.0.i, -1 ; [#uses=2] - %tmp79.i = icmp eq i32 %len.0.i, 1 ; [#uses=1] - br i1 %tmp79.i, label %condtrue.i, label %dowhile.i - -dowhile82.i: ; preds = %andand100.i, %else - br i1 undef, label %condtrue.i, label %andand100.i - -andand100.i: ; preds = %dowhile82.i - br i1 undef, label %condtrue.i, label %dowhile82.i - -condtrue.i: ; preds = %andand100.i, %dowhile82.i, %andand.i, %dowhile.i - %len.1.i = phi i32 [ %tmp78.i, %andand.i ], [ %len.0.i, %dowhile.i ], [ undef, %andand100.i ], [ undef, %dowhile82.i ] ; [#uses=2] - %tmp112.i = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] - %condtmp.0175.i = extractvalue %"byte[]" %tmp112.i, 0 ; [#uses=3] - %tmp117.i = icmp ugt i32 %len.1.i, %condtmp.0175.i ; [#uses=1] - br i1 %tmp117.i, label %if118.i, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - -if118.i: ; preds = %condtrue.i - %condtmp.0176.i = extractvalue %"byte[]" %tmp112.i, 1 ; [#uses=1] - %tmp123.i = add i32 %condtmp.0175.i, 1 ; [#uses=1] - %tmp124.i = sub i32 %len.1.i, %tmp123.i ; [#uses=2] - %tmp156.i = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp124.i ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp156.i, i8* %condtmp.0176.i, i32 %condtmp.0175.i, i32 1) - %tmp170.i = sub i32 3, %tmp124.i ; [#uses=1] - %tmp171.i = insertvalue %"byte[]" undef, i32 %tmp170.i, 0 ; <%"byte[]"> [#uses=1] - %tmp172.i = insertvalue %"byte[]" %tmp171.i, i8* %tmp156.i, 1 ; <%"byte[]"> [#uses=1] - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit: ; preds = %if118.i, %condtrue.i - %tmp6.i.i408 = phi %"byte[]" [ %tmp172.i, %if118.i ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i ] ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp6.i.i408, %"byte[]"* %tmp149, align 8 - %tmp155 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 2 ; <%"byte[]"*> [#uses=1] - %tmp49.i423 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] - %tmp49178.i424 = extractvalue %"byte[]" %tmp49.i423, 1 ; [#uses=1] - %tmp52.i426 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] - %tmp56.i427 = getelementptr [20 x i8]* %foo, i32 0, i32 6 ; [#uses=1] - br i1 false, label %dowhile82.i456, label %if59.i431 - -if59.i431: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - br label %dowhile.i441 - -dowhile.i441: ; preds = %andand.i444, %if59.i431 - %p.0.i432 = phi i8* [ %tmp56.i427, %if59.i431 ], [ %tmp65.i435, %andand.i444 ] ; [#uses=1] - %v.0.i433 = phi i32 [ %tmp108, %if59.i431 ], [ %tmp75.i439, %andand.i444 ] ; [#uses=2] - %len.0.i434 = phi i32 [ 3, %if59.i431 ], [ %tmp78.i442, %andand.i444 ] ; [#uses=3] - %tmp65.i435 = getelementptr i8* %p.0.i432, i32 -1 ; [#uses=2] - %tmp68.i436 = urem i32 %v.0.i433, %tmp52.i426 ; [#uses=1] - %tmp71.i437 = getelementptr i8* %tmp49178.i424, i32 %tmp68.i436 ; [#uses=1] - %tmp72.i438 = load i8* %tmp71.i437 ; [#uses=1] - store i8 %tmp72.i438, i8* %tmp65.i435 - %tmp75.i439 = udiv i32 %v.0.i433, %tmp52.i426 ; [#uses=2] - %tmp76.i440 = icmp eq i32 %tmp75.i439, 0 ; [#uses=1] - br i1 %tmp76.i440, label %condtrue.i466, label %andand.i444 - -andand.i444: ; preds = %dowhile.i441 - %tmp78.i442 = add i32 %len.0.i434, -1 ; [#uses=2] - %tmp79.i443 = icmp eq i32 %len.0.i434, 1 ; [#uses=1] - br i1 %tmp79.i443, label %condtrue.i466, label %dowhile.i441 - -dowhile82.i456: ; preds = %andand100.i459, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit - br i1 undef, label %condtrue.i466, label %andand100.i459 - -andand100.i459: ; preds = %dowhile82.i456 - br i1 undef, label %condtrue.i466, label %dowhile82.i456 - -condtrue.i466: ; preds = %andand100.i459, %dowhile82.i456, %andand.i444, %dowhile.i441 - %len.1.i461 = phi i32 [ %tmp78.i442, %andand.i444 ], [ %len.0.i434, %dowhile.i441 ], [ undef, %andand100.i459 ], [ undef, %dowhile82.i456 ] ; [#uses=2] - %tmp112.i465 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] - %condtmp.0175.i468 = extractvalue %"byte[]" %tmp112.i465, 0 ; [#uses=3] - %tmp117.i470 = icmp ugt i32 %len.1.i461, %condtmp.0175.i468 ; [#uses=1] - br i1 %tmp117.i470, label %if118.i474, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 - -if118.i474: ; preds = %condtrue.i466 - %condtmp.0176.i469 = extractvalue %"byte[]" %tmp112.i465, 1 ; [#uses=1] - %tmp123.i472 = add i32 %condtmp.0175.i468, 1 ; [#uses=1] - %tmp124.i473 = sub i32 %len.1.i461, %tmp123.i472 ; [#uses=2] - %tmp157.sum788 = add i32 %tmp124.i473, 3 ; [#uses=1] - %tmp156.i476 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp157.sum788 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp156.i476, i8* %condtmp.0176.i469, i32 %condtmp.0175.i468, i32 1) - %tmp170.i477 = sub i32 3, %tmp124.i473 ; [#uses=1] - %tmp171.i478 = insertvalue %"byte[]" undef, i32 %tmp170.i477, 0 ; <%"byte[]"> [#uses=1] - %tmp172.i479 = insertvalue %"byte[]" %tmp171.i478, i8* %tmp156.i476, 1 ; <%"byte[]"> [#uses=1] - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482: ; preds = %if118.i474, %condtrue.i466 - %tmp6.i.i248483 = phi %"byte[]" [ %tmp172.i479, %if118.i474 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i466 ] ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp6.i.i248483, %"byte[]"* %tmp155, align 8 - %tmp161 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 3 ; <%"byte[]"*> [#uses=1] - %tmp49.i498 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] - %tmp49178.i499 = extractvalue %"byte[]" %tmp49.i498, 1 ; [#uses=1] - %tmp52.i501 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] - %tmp56.i502 = getelementptr [20 x i8]* %foo, i32 0, i32 9 ; [#uses=1] - br i1 false, label %dowhile82.i531, label %if59.i506 - -if59.i506: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 - br label %dowhile.i516 - -dowhile.i516: ; preds = %andand.i519, %if59.i506 - %p.0.i507 = phi i8* [ %tmp56.i502, %if59.i506 ], [ %tmp65.i510, %andand.i519 ] ; [#uses=1] - %v.0.i508 = phi i32 [ %tmp117, %if59.i506 ], [ %tmp75.i514, %andand.i519 ] ; [#uses=2] - %len.0.i509 = phi i32 [ 3, %if59.i506 ], [ %tmp78.i517, %andand.i519 ] ; [#uses=3] - %tmp65.i510 = getelementptr i8* %p.0.i507, i32 -1 ; [#uses=2] - %tmp68.i511 = urem i32 %v.0.i508, %tmp52.i501 ; [#uses=1] - %tmp71.i512 = getelementptr i8* %tmp49178.i499, i32 %tmp68.i511 ; [#uses=1] - %tmp72.i513 = load i8* %tmp71.i512 ; [#uses=1] - store i8 %tmp72.i513, i8* %tmp65.i510 - %tmp75.i514 = udiv i32 %v.0.i508, %tmp52.i501 ; [#uses=2] - %tmp76.i515 = icmp eq i32 %tmp75.i514, 0 ; [#uses=1] - br i1 %tmp76.i515, label %condtrue.i541, label %andand.i519 - -andand.i519: ; preds = %dowhile.i516 - %tmp78.i517 = add i32 %len.0.i509, -1 ; [#uses=2] - %tmp79.i518 = icmp eq i32 %len.0.i509, 1 ; [#uses=1] - br i1 %tmp79.i518, label %condtrue.i541, label %dowhile.i516 - -dowhile82.i531: ; preds = %andand100.i534, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit482 - br i1 undef, label %condtrue.i541, label %andand100.i534 - -andand100.i534: ; preds = %dowhile82.i531 - br i1 undef, label %condtrue.i541, label %dowhile82.i531 - -condtrue.i541: ; preds = %andand100.i534, %dowhile82.i531, %andand.i519, %dowhile.i516 - %len.1.i536 = phi i32 [ %tmp78.i517, %andand.i519 ], [ %len.0.i509, %dowhile.i516 ], [ undef, %andand100.i534 ], [ undef, %dowhile82.i531 ] ; [#uses=2] - %tmp112.i540 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] - %condtmp.0175.i543 = extractvalue %"byte[]" %tmp112.i540, 0 ; [#uses=3] - %tmp117.i545 = icmp ugt i32 %len.1.i536, %condtmp.0175.i543 ; [#uses=1] - br i1 %tmp117.i545, label %if118.i549, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 - -if118.i549: ; preds = %condtrue.i541 - %condtmp.0176.i544 = extractvalue %"byte[]" %tmp112.i540, 1 ; [#uses=1] - %tmp123.i547 = add i32 %condtmp.0175.i543, 1 ; [#uses=1] - %tmp124.i548 = sub i32 %len.1.i536, %tmp123.i547 ; [#uses=2] - %tmp163.sum787 = add i32 %tmp124.i548, 6 ; [#uses=1] - %tmp156.i551 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp163.sum787 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp156.i551, i8* %condtmp.0176.i544, i32 %condtmp.0175.i543, i32 1) - %tmp170.i552 = sub i32 3, %tmp124.i548 ; [#uses=1] - %tmp171.i553 = insertvalue %"byte[]" undef, i32 %tmp170.i552, 0 ; <%"byte[]"> [#uses=1] - %tmp172.i554 = insertvalue %"byte[]" %tmp171.i553, i8* %tmp156.i551, 1 ; <%"byte[]"> [#uses=1] - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557: ; preds = %if118.i549, %condtrue.i541 - %tmp6.i.i286558 = phi %"byte[]" [ %tmp172.i554, %if118.i549 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i541 ] ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp6.i.i286558, %"byte[]"* %tmp161, align 8 - %tmp167 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 4 ; <%"byte[]"*> [#uses=1] - %tmp49.i573 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] - %tmp49178.i574 = extractvalue %"byte[]" %tmp49.i573, 1 ; [#uses=1] - %tmp52.i576 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] - %tmp56.i577 = getelementptr [20 x i8]* %foo, i32 0, i32 12 ; [#uses=1] - br i1 false, label %dowhile82.i606, label %if59.i581 - -if59.i581: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 - br label %dowhile.i591 - -dowhile.i591: ; preds = %andand.i594, %if59.i581 - %p.0.i582 = phi i8* [ %tmp56.i577, %if59.i581 ], [ %tmp65.i585, %andand.i594 ] ; [#uses=1] - %v.0.i583 = phi i32 [ %tmp126, %if59.i581 ], [ %tmp75.i589, %andand.i594 ] ; [#uses=2] - %len.0.i584 = phi i32 [ 3, %if59.i581 ], [ %tmp78.i592, %andand.i594 ] ; [#uses=3] - %tmp65.i585 = getelementptr i8* %p.0.i582, i32 -1 ; [#uses=2] - %tmp68.i586 = urem i32 %v.0.i583, %tmp52.i576 ; [#uses=1] - %tmp71.i587 = getelementptr i8* %tmp49178.i574, i32 %tmp68.i586 ; [#uses=1] - %tmp72.i588 = load i8* %tmp71.i587 ; [#uses=1] - store i8 %tmp72.i588, i8* %tmp65.i585 - %tmp75.i589 = udiv i32 %v.0.i583, %tmp52.i576 ; [#uses=2] - %tmp76.i590 = icmp eq i32 %tmp75.i589, 0 ; [#uses=1] - br i1 %tmp76.i590, label %condtrue.i616, label %andand.i594 - -andand.i594: ; preds = %dowhile.i591 - %tmp78.i592 = add i32 %len.0.i584, -1 ; [#uses=2] - %tmp79.i593 = icmp eq i32 %len.0.i584, 1 ; [#uses=1] - br i1 %tmp79.i593, label %condtrue.i616, label %dowhile.i591 - -dowhile82.i606: ; preds = %andand100.i609, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit557 - br i1 undef, label %condtrue.i616, label %andand100.i609 - -andand100.i609: ; preds = %dowhile82.i606 - br i1 undef, label %condtrue.i616, label %dowhile82.i606 - -condtrue.i616: ; preds = %andand100.i609, %dowhile82.i606, %andand.i594, %dowhile.i591 - %len.1.i611 = phi i32 [ %tmp78.i592, %andand.i594 ], [ %len.0.i584, %dowhile.i591 ], [ undef, %andand100.i609 ], [ undef, %dowhile82.i606 ] ; [#uses=2] - %tmp112.i615 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] - %condtmp.0175.i618 = extractvalue %"byte[]" %tmp112.i615, 0 ; [#uses=3] - %tmp117.i620 = icmp ugt i32 %len.1.i611, %condtmp.0175.i618 ; [#uses=1] - br i1 %tmp117.i620, label %if118.i624, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 - -if118.i624: ; preds = %condtrue.i616 - %condtmp.0176.i619 = extractvalue %"byte[]" %tmp112.i615, 1 ; [#uses=1] - %tmp123.i622 = add i32 %condtmp.0175.i618, 1 ; [#uses=1] - %tmp124.i623 = sub i32 %len.1.i611, %tmp123.i622 ; [#uses=2] - %tmp169.sum786 = add i32 %tmp124.i623, 9 ; [#uses=1] - %tmp156.i626 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp169.sum786 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp156.i626, i8* %condtmp.0176.i619, i32 %condtmp.0175.i618, i32 1) - %tmp170.i627 = sub i32 3, %tmp124.i623 ; [#uses=1] - %tmp171.i628 = insertvalue %"byte[]" undef, i32 %tmp170.i627, 0 ; <%"byte[]"> [#uses=1] - %tmp172.i629 = insertvalue %"byte[]" %tmp171.i628, i8* %tmp156.i626, 1 ; <%"byte[]"> [#uses=1] - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632: ; preds = %if118.i624, %condtrue.i616 - %tmp6.i.i400633 = phi %"byte[]" [ %tmp172.i629, %if118.i624 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i616 ] ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp6.i.i400633, %"byte[]"* %tmp167, align 8 - %tmp173 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 5 ; <%"byte[]"*> [#uses=1] - %tmp49.i723 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] - %tmp49178.i724 = extractvalue %"byte[]" %tmp49.i723, 1 ; [#uses=1] - %tmp52.i726 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] - %tmp56.i727 = getelementptr [20 x i8]* %foo, i32 0, i32 15 ; [#uses=1] - br i1 false, label %dowhile82.i756, label %if59.i731 - -if59.i731: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 - br label %dowhile.i741 - -dowhile.i741: ; preds = %andand.i744, %if59.i731 - %p.0.i732 = phi i8* [ %tmp56.i727, %if59.i731 ], [ %tmp65.i735, %andand.i744 ] ; [#uses=1] - %v.0.i733 = phi i32 [ %tmp133210, %if59.i731 ], [ %tmp75.i739, %andand.i744 ] ; [#uses=2] - %len.0.i734 = phi i32 [ 3, %if59.i731 ], [ %tmp78.i742, %andand.i744 ] ; [#uses=3] - %tmp65.i735 = getelementptr i8* %p.0.i732, i32 -1 ; [#uses=2] - %tmp68.i736 = urem i32 %v.0.i733, %tmp52.i726 ; [#uses=1] - %tmp71.i737 = getelementptr i8* %tmp49178.i724, i32 %tmp68.i736 ; [#uses=1] - %tmp72.i738 = load i8* %tmp71.i737 ; [#uses=1] - store i8 %tmp72.i738, i8* %tmp65.i735 - %tmp75.i739 = udiv i32 %v.0.i733, %tmp52.i726 ; [#uses=2] - %tmp76.i740 = icmp eq i32 %tmp75.i739, 0 ; [#uses=1] - br i1 %tmp76.i740, label %condtrue.i766, label %andand.i744 - -andand.i744: ; preds = %dowhile.i741 - %tmp78.i742 = add i32 %len.0.i734, -1 ; [#uses=2] - %tmp79.i743 = icmp eq i32 %len.0.i734, 1 ; [#uses=1] - br i1 %tmp79.i743, label %condtrue.i766, label %dowhile.i741 - -dowhile82.i756: ; preds = %andand100.i759, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit632 - br i1 undef, label %condtrue.i766, label %andand100.i759 - -andand100.i759: ; preds = %dowhile82.i756 - br i1 undef, label %condtrue.i766, label %dowhile82.i756 - -condtrue.i766: ; preds = %andand100.i759, %dowhile82.i756, %andand.i744, %dowhile.i741 - %len.1.i761 = phi i32 [ %tmp78.i742, %andand.i744 ], [ %len.0.i734, %dowhile.i741 ], [ undef, %andand100.i759 ], [ undef, %dowhile82.i756 ] ; [#uses=2] - %tmp112.i765 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] - %condtmp.0175.i768 = extractvalue %"byte[]" %tmp112.i765, 0 ; [#uses=3] - %tmp117.i770 = icmp ugt i32 %len.1.i761, %condtmp.0175.i768 ; [#uses=1] - br i1 %tmp117.i770, label %if118.i774, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 - -if118.i774: ; preds = %condtrue.i766 - %condtmp.0176.i769 = extractvalue %"byte[]" %tmp112.i765, 1 ; [#uses=1] - %tmp123.i772 = add i32 %condtmp.0175.i768, 1 ; [#uses=1] - %tmp124.i773 = sub i32 %len.1.i761, %tmp123.i772 ; [#uses=2] - %tmp175.sum785 = add i32 %tmp124.i773, 12 ; [#uses=1] - %tmp156.i776 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp175.sum785 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp156.i776, i8* %condtmp.0176.i769, i32 %condtmp.0175.i768, i32 1) - %tmp170.i777 = sub i32 3, %tmp124.i773 ; [#uses=1] - %tmp171.i778 = insertvalue %"byte[]" undef, i32 %tmp170.i777, 0 ; <%"byte[]"> [#uses=1] - %tmp172.i779 = insertvalue %"byte[]" %tmp171.i778, i8* %tmp156.i776, 1 ; <%"byte[]"> [#uses=1] - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782: ; preds = %if118.i774, %condtrue.i766 - %tmp6.i.i362783 = phi %"byte[]" [ %tmp172.i779, %if118.i774 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i766 ] ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp6.i.i362783, %"byte[]"* %tmp173, align 8 - %tmp179 = getelementptr [7 x %"byte[]"]* %__arrayArg140, i32 0, i32 6 ; <%"byte[]"*> [#uses=1] - %tmp49.i648 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 2) ; <%"byte[]"> [#uses=1] - %tmp49178.i649 = extractvalue %"byte[]" %tmp49.i648, 1 ; [#uses=1] - %tmp52.i651 = load i32* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 0), align 8 ; [#uses=2] - %tmp56.i652 = getelementptr [20 x i8]* %foo, i32 0, i32 18 ; [#uses=1] - br i1 false, label %dowhile82.i681, label %if59.i656 - -if59.i656: ; preds = %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 - br label %dowhile.i666 - -dowhile.i666: ; preds = %andand.i669, %if59.i656 - %p.0.i657 = phi i8* [ %tmp56.i652, %if59.i656 ], [ %tmp65.i660, %andand.i669 ] ; [#uses=1] - %v.0.i658 = phi i32 [ %tmp144, %if59.i656 ], [ %tmp75.i664, %andand.i669 ] ; [#uses=2] - %len.0.i659 = phi i32 [ 3, %if59.i656 ], [ %tmp78.i667, %andand.i669 ] ; [#uses=3] - %tmp65.i660 = getelementptr i8* %p.0.i657, i32 -1 ; [#uses=2] - %tmp68.i661 = urem i32 %v.0.i658, %tmp52.i651 ; [#uses=1] - %tmp71.i662 = getelementptr i8* %tmp49178.i649, i32 %tmp68.i661 ; [#uses=1] - %tmp72.i663 = load i8* %tmp71.i662 ; [#uses=1] - store i8 %tmp72.i663, i8* %tmp65.i660 - %tmp75.i664 = udiv i32 %v.0.i658, %tmp52.i651 ; [#uses=2] - %tmp76.i665 = icmp eq i32 %tmp75.i664, 0 ; [#uses=1] - br i1 %tmp76.i665, label %condtrue.i691, label %andand.i669 - -andand.i669: ; preds = %dowhile.i666 - %tmp78.i667 = add i32 %len.0.i659, -1 ; [#uses=2] - %tmp79.i668 = icmp eq i32 %len.0.i659, 1 ; [#uses=1] - br i1 %tmp79.i668, label %condtrue.i691, label %dowhile.i666 - -dowhile82.i681: ; preds = %andand100.i684, %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit782 - br i1 undef, label %condtrue.i691, label %andand100.i684 - -andand100.i684: ; preds = %dowhile82.i681 - br i1 undef, label %condtrue.i691, label %dowhile82.i681 - -condtrue.i691: ; preds = %andand100.i684, %dowhile82.i681, %andand.i669, %dowhile.i666 - %len.1.i686 = phi i32 [ %tmp78.i667, %andand.i669 ], [ %len.0.i659, %dowhile.i666 ], [ undef, %andand100.i684 ], [ undef, %dowhile82.i681 ] ; [#uses=2] - %tmp112.i690 = load %"byte[]"* getelementptr ([8 x %nest.parseListLine]* @.constarray262, i32 0, i32 0, i32 1) ; <%"byte[]"> [#uses=2] - %condtmp.0175.i693 = extractvalue %"byte[]" %tmp112.i690, 0 ; [#uses=3] - %tmp117.i695 = icmp ugt i32 %len.1.i686, %condtmp.0175.i693 ; [#uses=1] - br i1 %tmp117.i695, label %if118.i699, label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit707 - -if118.i699: ; preds = %condtrue.i691 - %condtmp.0176.i694 = extractvalue %"byte[]" %tmp112.i690, 1 ; [#uses=1] - %tmp123.i697 = add i32 %condtmp.0175.i693, 1 ; [#uses=1] - %tmp124.i698 = sub i32 %len.1.i686, %tmp123.i697 ; [#uses=2] - %tmp181.sum784 = add i32 %tmp124.i698, 15 ; [#uses=1] - %tmp156.i701 = getelementptr [20 x i8]* %foo, i32 0, i32 %tmp181.sum784 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp156.i701, i8* %condtmp.0176.i694, i32 %condtmp.0175.i693, i32 1) - %tmp170.i702 = sub i32 3, %tmp124.i698 ; [#uses=1] - %tmp171.i703 = insertvalue %"byte[]" undef, i32 %tmp170.i702, 0 ; <%"byte[]"> [#uses=1] - %tmp172.i704 = insertvalue %"byte[]" %tmp171.i703, i8* %tmp156.i701, 1 ; <%"byte[]"> [#uses=1] - br label %_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit707 - -_D5tango4text7convert7Integer16__T9formatterTaZ9formatterFAalaaiZAa.exit707: ; preds = %if118.i699, %condtrue.i691 - %tmp6.i.i324708 = phi %"byte[]" [ %tmp172.i704, %if118.i699 ], [ { i32 24, i8* getelementptr ([25 x i8]* @.str265, i32 0, i32 0) }, %condtrue.i691 ] ; <%"byte[]"> [#uses=1] - store %"byte[]" %tmp6.i.i324708, %"byte[]"* %tmp179, align 8 - %tmp186 = insertvalue %"char[][]" { i32 7, %"byte[]"* undef }, %"byte[]"* %tmp148, 1 ; <%"char[][]"> [#uses=1] - %tmp187 = call fastcc %"byte[]" @_D5tango4text4Util13__T6layoutTaZ6layoutFAaAAaXAa(%"byte[]" %tmp147, %"char[][]" %tmp186) ; <%"byte[]"> [#uses=1] - %tmp190 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl191" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp190, i32 0, i32 35 ; [#uses=1] - %this.sendCommand193 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl191", align 4 ; [#uses=1] - %tmp194 = getelementptr [1 x %"byte[]"]* %__arrayArg141, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - store %"byte[]" %tmp187, %"byte[]"* %tmp194, align 8 - %tmp197 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp194, 1 ; <%"char[][]"> [#uses=1] - call fastcc void %this.sendCommand193(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str127, i32 0, i32 0) }, %"char[][]" %tmp197) - %tmp200 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp57 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl201" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp200, i32 0, i32 36 ; [#uses=1] - %this.readResponse203 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl201", align 4 ; [#uses=1] - call fastcc void %this.readResponse203(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp204, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str128, i32 0, i32 0) }) - ret %tango.net.SocketConduit.SocketConduit* %.newclass_gc -} - -define fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp9FtpClient13FTPConnection14connectPassiveMFZC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) { -entry: - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] - %.rettmp70 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] - %.rettmp161 = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=3] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=6] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.is_supported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 42 ; [#uses=1] - %this.is_supported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.is_supported at vtbl", align 4 ; [#uses=1] - %tmp4 = call fastcc i1 %this.is_supported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str129, i32 0, i32 0) }) ; [#uses=1] - %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=2] - br i1 %tmp4, label %if, label %else - -if: ; preds = %entry - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str130, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp11 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp11, i32 0, i32 36 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str131, i32 0, i32 0) }) - %.rettmp.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 0 ; [#uses=1] - %tmp359 = load i32* %.rettmp.1.0, align 4 ; [#uses=3] - %.rettmp.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 1, i32 1 ; [#uses=1] - %tmp360 = load i8** %.rettmp.1.1, align 4 ; [#uses=5] - %tmp16 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] - %tmp17 = load %tango.net.SocketConduit.SocketConduit** %tmp16 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp18 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp17, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp19 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp18 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"this.socket_.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp19, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %this.socket_.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"this.socket_.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp21 = call fastcc %tango.net.Socket.Socket* %this.socket_.socket(%tango.net.SocketConduit.SocketConduit* %tmp17) ; <%tango.net.Socket.Socket*> [#uses=2] - %tmp22 = getelementptr %tango.net.Socket.Socket* %tmp21, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - %tmp23 = load %tango.net.Socket.Socket.__vtbl** %tmp22 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] - %"this.socket_.socket().remoteAddress at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp23, i32 0, i32 23 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)**> [#uses=1] - %"this.socket_.socket().remoteAddress" = load %tango.net.Socket.Address* (%tango.net.Socket.Socket*)** %"this.socket_.socket().remoteAddress at vtbl", align 4 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)*> [#uses=1] - %tmp25 = call fastcc %tango.net.Socket.Address* %"this.socket_.socket().remoteAddress"(%tango.net.Socket.Socket* %tmp21) ; <%tango.net.Socket.Address*> [#uses=1] - %tmp26 = bitcast %tango.net.Socket.Address* %tmp25 to %object.Object* ; <%object.Object*> [#uses=1] - %tmp27 = call %object.Object* @_d_dynamic_cast(%object.Object* %tmp26, %object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) nounwind readonly ; <%object.Object*> [#uses=2] - %tmp28 = bitcast %object.Object* %tmp27 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %tmp30 = bitcast %object.Object* %tmp27 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - %tmp31 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp30 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"remote.addr at vtbl" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp31, i32 0, i32 9 ; [#uses=1] - %remote.addr = load i32 (%tango.net.Socket.IPv4Address*)** %"remote.addr at vtbl", align 4 ; [#uses=1] - %tmp33 = call fastcc i32 %remote.addr(%tango.net.Socket.IPv4Address* %tmp28) ; [#uses=1] - %tmp4.i.i = icmp eq i32 %tmp359, 0 ; [#uses=1] - br i1 %tmp4.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %forcond.i.i - -forcond.i.i: ; preds = %forinc.i.i, %if - %sign.1.i = phi i1 [ false, %if ], [ %sign.0.i, %forinc.i.i ] ; [#uses=4] - %len.0.i.i = phi i32 [ %tmp33.i.i, %forinc.i.i ], [ %tmp359, %if ] ; [#uses=3] - %p.0.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp360, %if ] ; [#uses=6] - %c.0.in.i.i = phi i8* [ %tmp30.i.i, %forinc.i.i ], [ %tmp360, %if ] ; [#uses=1] - %c.0.i.i = load i8* %c.0.in.i.i ; [#uses=2] - %tmp8.i.i = icmp eq i32 %len.0.i.i, 0 ; [#uses=1] - br i1 %tmp8.i.i, label %endfor.i.i, label %forbody.i.i - -forbody.i.i: ; preds = %forcond.i.i - switch i8 %c.0.i.i, label %endfor.i.i [ - i8 32, label %forinc.i.i - i8 9, label %forinc.i.i - i8 45, label %if20.i.i - i8 43, label %if26.i.i - ] - -if20.i.i: ; preds = %forbody.i.i - br label %forinc.i.i - -if26.i.i: ; preds = %forbody.i.i - br label %forinc.i.i - -forinc.i.i: ; preds = %if26.i.i, %if20.i.i, %forbody.i.i, %forbody.i.i - %sign.0.i = phi i1 [ false, %if26.i.i ], [ true, %if20.i.i ], [ %sign.1.i, %forbody.i.i ], [ %sign.1.i, %forbody.i.i ] ; [#uses=1] - %tmp30.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] - %tmp33.i.i = add i32 %len.0.i.i, -1 ; [#uses=1] - br label %forcond.i.i - -endfor.i.i: ; preds = %forbody.i.i, %forcond.i.i - %tmp37.i.i = icmp eq i8 %c.0.i.i, 48 ; [#uses=1] - %tmp39.i.i = icmp sgt i32 %len.0.i.i, 1 ; [#uses=1] - %or.cond.i.i = and i1 %tmp37.i.i, %tmp39.i.i ; [#uses=1] - br i1 %or.cond.i.i, label %if40.i.i, label %endif41.i.i - -if40.i.i: ; preds = %endfor.i.i - %tmp43.i.i = getelementptr i8* %p.0.i.i, i32 1 ; [#uses=2] - %tmp44.i.i = load i8* %tmp43.i.i ; [#uses=1] - %tmp45.i.i = zext i8 %tmp44.i.i to i32 ; [#uses=1] - switch i32 %tmp45.i.i, label %endif41.i.i [ - i32 120, label %case46.i.i - i32 88, label %case46.i.i - i32 98, label %case51.i.i - i32 66, label %case51.i.i - i32 111, label %case56.i.i - i32 79, label %case56.i.i - ] - -case46.i.i: ; preds = %if40.i.i, %if40.i.i - %tmp48.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] - br label %endif41.i.i - -case51.i.i: ; preds = %if40.i.i, %if40.i.i - %tmp53.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] - br label %endif41.i.i - -case56.i.i: ; preds = %if40.i.i, %if40.i.i - %tmp58.i.i = getelementptr i8* %p.0.i.i, i32 2 ; [#uses=1] - br label %endif41.i.i - -endif41.i.i: ; preds = %case56.i.i, %case51.i.i, %case46.i.i, %if40.i.i, %endfor.i.i - %r.0.i.i = phi i32 [ 0, %if40.i.i ], [ 8, %case56.i.i ], [ 2, %case51.i.i ], [ 16, %case46.i.i ], [ 0, %endfor.i.i ] ; [#uses=2] - %p.2.i.i = phi i8* [ %tmp43.i.i, %if40.i.i ], [ %tmp58.i.i, %case56.i.i ], [ %tmp53.i.i, %case51.i.i ], [ %tmp48.i.i, %case46.i.i ], [ %p.0.i.i, %endfor.i.i ] ; [#uses=2] - %tmp63.i.i = icmp eq i32 %r.0.i.i, 0 ; [#uses=1] - br i1 %tmp63.i.i, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i, label %if70.i.i - -if70.i.i: ; preds = %endif41.i.i - br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i - -_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i: ; preds = %if70.i.i, %endif41.i.i, %if - %sign.2.i = phi i1 [ false, %if ], [ %sign.1.i, %if70.i.i ], [ %sign.1.i, %endif41.i.i ] ; [#uses=1] - %radix.0.i = phi i32 [ 0, %if ], [ %r.0.i.i, %if70.i.i ], [ 10, %endif41.i.i ] ; [#uses=2] - %p.1.i.i = phi i8* [ %p.2.i.i, %if70.i.i ], [ %tmp360, %if ], [ %p.2.i.i, %endif41.i.i ] ; [#uses=1] - %tmp84.i.i = ptrtoint i8* %p.1.i.i to i32 ; [#uses=1] - %tmp85.i.i = ptrtoint i8* %tmp360 to i32 ; [#uses=1] - %tmp86.i.i = sub i32 %tmp84.i.i, %tmp85.i.i ; [#uses=2] - %tmp6.i = sub i32 %tmp359, %tmp86.i.i ; [#uses=1] - br label %foreachcond.i.i - -foreachcond.i.i: ; preds = %if55.i.i, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i - %value.0.i.i = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp65.i.i, %if55.i.i ] ; [#uses=3] - %foreachkey.0.i.i = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i ], [ %tmp70.i.i, %if55.i.i ] ; [#uses=3] - %tmp3.i.i = icmp ult i32 %foreachkey.0.i.i, %tmp6.i ; [#uses=1] - br i1 %tmp3.i.i, label %foreachbody.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit - -foreachbody.i.i: ; preds = %foreachcond.i.i - %tmp5.sum.i = add i32 %tmp86.i.i, %foreachkey.0.i.i ; [#uses=1] - %tmp5.i.i = getelementptr i8* %tmp360, i32 %tmp5.sum.i ; [#uses=1] - %tmp6.i.i = load i8* %tmp5.i.i ; [#uses=6] - %tmp6.off84.i.i = add i8 %tmp6.i.i, -48 ; [#uses=1] - %or.cond.i28.i = icmp ugt i8 %tmp6.off84.i.i, 9 ; [#uses=1] - br i1 %or.cond.i28.i, label %else.i.i, label %endif.i.i - -else.i.i: ; preds = %foreachbody.i.i - %tmp6.off83.i.i = add i8 %tmp6.i.i, -97 ; [#uses=1] - %or.cond81.i.i = icmp ugt i8 %tmp6.off83.i.i, 25 ; [#uses=1] - br i1 %or.cond81.i.i, label %else24.i.i, label %if22.i.i - -if22.i.i: ; preds = %else.i.i - %tmp27.i.i = add i8 %tmp6.i.i, -39 ; [#uses=1] - br label %endif.i.i - -else24.i.i: ; preds = %else.i.i - %tmp6.off.i.i = add i8 %tmp6.i.i, -65 ; [#uses=1] - %or.cond82.i.i = icmp ugt i8 %tmp6.off.i.i, 25 ; [#uses=1] - br i1 %or.cond82.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit, label %if39.i.i - -if39.i.i: ; preds = %else24.i.i - %tmp44.i29.i = add i8 %tmp6.i.i, -7 ; [#uses=1] - br label %endif.i.i - -endif.i.i: ; preds = %if39.i.i, %if22.i.i, %foreachbody.i.i - %c.0.i30.i = phi i8 [ %tmp27.i.i, %if22.i.i ], [ %tmp44.i29.i, %if39.i.i ], [ %tmp6.i.i, %foreachbody.i.i ] ; [#uses=1] - %tmp48.i31.i = zext i8 %c.0.i30.i to i32 ; [#uses=1] - %tmp49.i.i = add i32 %tmp48.i31.i, 208 ; [#uses=1] - %tmp52.i.i = and i32 %tmp49.i.i, 255 ; [#uses=2] - %tmp54.i.i = icmp ult i32 %tmp52.i.i, %radix.0.i ; [#uses=1] - br i1 %tmp54.i.i, label %if55.i.i, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit - -if55.i.i: ; preds = %endif.i.i - %tmp59.i.i = zext i32 %radix.0.i to i64 ; [#uses=1] - %tmp61.i.i = mul i64 %value.0.i.i, %tmp59.i.i ; [#uses=1] - %tmp64.i.i = zext i32 %tmp52.i.i to i64 ; [#uses=1] - %tmp65.i.i = add i64 %tmp61.i.i, %tmp64.i.i ; [#uses=1] - %tmp70.i.i = add i32 %foreachkey.0.i.i, 1 ; [#uses=1] - br label %foreachcond.i.i - -_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit: ; preds = %endif.i.i, %else24.i.i, %foreachcond.i.i - %negval.i = sub i64 0, %value.0.i.i ; [#uses=1] - %condtmp.0.i = select i1 %sign.2.i, i64 %negval.i, i64 %value.0.i.i ; [#uses=1] - %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=6] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp38 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp38, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) - %tmp44 = trunc i64 %condtmp.0.i to i16 ; [#uses=1] - %tmp2.i = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] - %1 = bitcast i8* %tmp2.i to i32* ; [#uses=1] - store i32 %tmp33, i32* %1 - %tmp7.i = getelementptr i8* %.newclass_gc_alloc, i32 18 ; [#uses=1] - %2 = bitcast i8* %tmp7.i to i16* ; [#uses=1] - store i16 %tmp44, i16* %2 - %tmp46 = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] - br label %try - -else: ; preds = %entry - %"this.is_supported at vtbl50" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 42 ; [#uses=1] - %this.is_supported52 = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.is_supported at vtbl50", align 4 ; [#uses=1] - %tmp53 = call fastcc i1 %this.is_supported52(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str132, i32 0, i32 0) }) ; [#uses=1] - %tmp59 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl60" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp59, i32 0, i32 35 ; [#uses=1] - %this.sendCommand62 = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl60", align 4 ; [#uses=2] - br i1 %tmp53, label %if54, label %else56 - -if54: ; preds = %else - call fastcc void %this.sendCommand62(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str133, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp66 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl67" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp66, i32 0, i32 36 ; [#uses=1] - %this.readResponse69 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl67", align 4 ; [#uses=1] - call fastcc void %this.readResponse69(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp70, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str134, i32 0, i32 0) }) - %.rettmp70.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp70, i32 0, i32 1, i32 0 ; [#uses=1] - %tmp345 = load i32* %.rettmp70.1.0, align 4 ; [#uses=2] - %.rettmp70.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp70, i32 0, i32 1, i32 1 ; [#uses=1] - %tmp346 = load i8** %.rettmp70.1.1, align 4 ; [#uses=2] - %.newclass_gc_alloc.i = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ) ; [#uses=4] - %.newclass_gc.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.RegExpT!(char).RegExpT"* ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=3] - %vtbl.i = bitcast i8* %.newclass_gc_alloc.i to %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"**> [#uses=3] - store %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ, %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i - %monitor.i = getelementptr i8* %.newclass_gc_alloc.i, i32 4 ; [#uses=1] - %3 = bitcast i8* %monitor.i to i8** ; [#uses=1] - store i8* null, i8** %3 - %tmp.i = getelementptr i8* %.newclass_gc_alloc.i, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp.i, i8* bitcast (%"Act[]"* getelementptr (%"tango.text.Regex.RegExpT!(char).RegExpT"* bitcast (%30* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ to %"tango.text.Regex.RegExpT!(char).RegExpT"*), i32 0, i32 2) to i8*), i32 36, i32 1) - %tmp2.i.i = call fastcc %"tango.text.Regex.RegExpT!(char).RegExpT"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT5_ctorMFAabbbZC5tango4text5Regex14__T7RegExpTTaZ7RegExpT(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str135, i32 0, i32 0) }, i1 false, i1 true, i1 false) ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=0] - %tmp76 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.test at vtbl" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp76, i32 0, i32 7 ; [#uses=1] - %r.test = load i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")** %"r.test at vtbl", align 4 ; [#uses=1] - br label %foreachcond.i.i460 - -foreachcond.i.i460: ; preds = %foreachnext.i.i, %if54 - %pos.0.i.i = phi i32 [ 0, %if54 ], [ %tmp12.i.i, %foreachnext.i.i ] ; [#uses=4] - %tmp3.i.i459 = icmp ult i32 %pos.0.i.i, %tmp345 ; [#uses=1] - br i1 %tmp3.i.i459, label %foreachbody.i.i463, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit - -foreachbody.i.i463: ; preds = %foreachcond.i.i460 - %tmp5.i.i461 = getelementptr i8* %tmp346, i32 %pos.0.i.i ; [#uses=1] - %tmp6.i.i462 = load i8* %tmp5.i.i461 ; [#uses=1] - %tmp4.i.i.i = icmp eq i8 %tmp6.i.i462, 10 ; [#uses=1] - br i1 %tmp4.i.i.i, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit, label %foreachnext.i.i - -foreachnext.i.i: ; preds = %foreachbody.i.i463 - %tmp12.i.i = add i32 %pos.0.i.i, 1 ; [#uses=1] - br label %foreachcond.i.i460 - -_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit: ; preds = %foreachbody.i.i463, %foreachcond.i.i460 - %tmp23.i = phi i32 [ %pos.0.i.i, %foreachbody.i.i463 ], [ %tmp345, %foreachcond.i.i460 ] ; [#uses=1] - %tmp85 = insertvalue %"byte[]" undef, i32 %tmp23.i, 0 ; <%"byte[]"> [#uses=1] - %tmp86 = insertvalue %"byte[]" %tmp85, i8* %tmp346, 1 ; <%"byte[]"> [#uses=1] - %tmp87 = call fastcc i1 %r.test(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, %"byte[]" %tmp86) ; [#uses=1] - br i1 %tmp87, label %endif89, label %if88 - -if88: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit - %.newclass_gc_alloc90 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] - %vtbl92 = bitcast i8* %.newclass_gc_alloc90 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] - store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl92 - %monitor93 = getelementptr i8* %.newclass_gc_alloc90, i32 4 ; [#uses=1] - %4 = bitcast i8* %monitor93 to i8** ; [#uses=1] - store i8* null, i8** %4 - %tmp94 = getelementptr i8* %.newclass_gc_alloc90, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp94, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) - %tmp2.i549 = getelementptr i8* %.newclass_gc_alloc90, i32 36 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2.i549, i8* getelementptr ([4 x i8]* @.str137, i32 0, i32 0), i32 3, i32 1) - %tmp5.i = bitcast i8* %.newclass_gc_alloc90 to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7.i550 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str136, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] - %tmp99 = bitcast i8* %.newclass_gc_alloc90 to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_throw_exception(%object.Object* %tmp99) - unreachable - -endif89: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit - %tmp102 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 2 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=1] - %tmp103 = load %tango.net.SocketConduit.SocketConduit** %tmp102 ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp104 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp103, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp105 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp104 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"this.socket_.socket at vtbl106" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp105, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %this.socket_.socket108 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"this.socket_.socket at vtbl106", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp109 = call fastcc %tango.net.Socket.Socket* %this.socket_.socket108(%tango.net.SocketConduit.SocketConduit* %tmp103) ; <%tango.net.Socket.Socket*> [#uses=2] - %tmp110 = getelementptr %tango.net.Socket.Socket* %tmp109, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - %tmp111 = load %tango.net.Socket.Socket.__vtbl** %tmp110 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] - %"this.socket_.socket().remoteAddress at vtbl112" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp111, i32 0, i32 23 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)**> [#uses=1] - %"this.socket_.socket().remoteAddress114" = load %tango.net.Socket.Address* (%tango.net.Socket.Socket*)** %"this.socket_.socket().remoteAddress at vtbl112", align 4 ; <%tango.net.Socket.Address* (%tango.net.Socket.Socket*)*> [#uses=1] - %tmp115 = call fastcc %tango.net.Socket.Address* %"this.socket_.socket().remoteAddress114"(%tango.net.Socket.Socket* %tmp109) ; <%tango.net.Socket.Address*> [#uses=1] - %tmp116 = bitcast %tango.net.Socket.Address* %tmp115 to %object.Object* ; <%object.Object*> [#uses=1] - %tmp117 = call %object.Object* @_d_dynamic_cast(%object.Object* %tmp116, %object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) nounwind readonly ; <%object.Object*> [#uses=2] - %tmp118 = bitcast %object.Object* %tmp117 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %tmp121 = bitcast %object.Object* %tmp117 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - %tmp122 = load %tango.net.Socket.IPv4Address.__vtbl** %tmp121 ; <%tango.net.Socket.IPv4Address.__vtbl*> [#uses=1] - %"remote.addr at vtbl123" = getelementptr %tango.net.Socket.IPv4Address.__vtbl* %tmp122, i32 0, i32 9 ; [#uses=1] - %remote.addr125 = load i32 (%tango.net.Socket.IPv4Address*)** %"remote.addr at vtbl123", align 4 ; [#uses=1] - %tmp126 = call fastcc i32 %remote.addr125(%tango.net.Socket.IPv4Address* %tmp118) ; [#uses=1] - %tmp130 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp130, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp132 = call fastcc %"byte[]" %r.match(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i, i32 1) ; <%"byte[]"> [#uses=2] - %digits_arg26.i551 = extractvalue %"byte[]" %tmp132, 0 ; [#uses=3] - %digits_arg27.i552 = extractvalue %"byte[]" %tmp132, 1 ; [#uses=5] - %tmp4.i.i553 = icmp eq i32 %digits_arg26.i551, 0 ; [#uses=1] - br i1 %tmp4.i.i553, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597, label %forcond.i.i560 - -forcond.i.i560: ; preds = %forinc.i.i567, %endif89 - %sign.1.i554 = phi i1 [ false, %endif89 ], [ %sign.0.i564, %forinc.i.i567 ] ; [#uses=4] - %len.0.i.i555 = phi i32 [ %tmp33.i.i566, %forinc.i.i567 ], [ %digits_arg26.i551, %endif89 ] ; [#uses=3] - %p.0.i.i556 = phi i8* [ %tmp30.i.i565, %forinc.i.i567 ], [ %digits_arg27.i552, %endif89 ] ; [#uses=6] - %c.0.in.i.i557 = phi i8* [ %tmp30.i.i565, %forinc.i.i567 ], [ %digits_arg27.i552, %endif89 ] ; [#uses=1] - %c.0.i.i558 = load i8* %c.0.in.i.i557 ; [#uses=2] - %tmp8.i.i559 = icmp eq i32 %len.0.i.i555, 0 ; [#uses=1] - br i1 %tmp8.i.i559, label %endfor.i.i571, label %forbody.i.i561 - -forbody.i.i561: ; preds = %forcond.i.i560 - switch i8 %c.0.i.i558, label %endfor.i.i571 [ - i8 32, label %forinc.i.i567 - i8 9, label %forinc.i.i567 - i8 45, label %if20.i.i562 - i8 43, label %if26.i.i563 - ] - -if20.i.i562: ; preds = %forbody.i.i561 - br label %forinc.i.i567 - -if26.i.i563: ; preds = %forbody.i.i561 - br label %forinc.i.i567 - -forinc.i.i567: ; preds = %if26.i.i563, %if20.i.i562, %forbody.i.i561, %forbody.i.i561 - %sign.0.i564 = phi i1 [ false, %if26.i.i563 ], [ true, %if20.i.i562 ], [ %sign.1.i554, %forbody.i.i561 ], [ %sign.1.i554, %forbody.i.i561 ] ; [#uses=1] - %tmp30.i.i565 = getelementptr i8* %p.0.i.i556, i32 1 ; [#uses=2] - %tmp33.i.i566 = add i32 %len.0.i.i555, -1 ; [#uses=1] - br label %forcond.i.i560 - -endfor.i.i571: ; preds = %forbody.i.i561, %forcond.i.i560 - %tmp37.i.i568 = icmp eq i8 %c.0.i.i558, 48 ; [#uses=1] - %tmp39.i.i569 = icmp sgt i32 %len.0.i.i555, 1 ; [#uses=1] - %or.cond.i.i570 = and i1 %tmp37.i.i568, %tmp39.i.i569 ; [#uses=1] - br i1 %or.cond.i.i570, label %if40.i.i575, label %endif41.i.i585 - -if40.i.i575: ; preds = %endfor.i.i571 - %tmp43.i.i572 = getelementptr i8* %p.0.i.i556, i32 1 ; [#uses=2] - %tmp44.i.i573 = load i8* %tmp43.i.i572 ; [#uses=1] - %tmp45.i.i574 = zext i8 %tmp44.i.i573 to i32 ; [#uses=1] - switch i32 %tmp45.i.i574, label %endif41.i.i585 [ - i32 120, label %case46.i.i577 - i32 88, label %case46.i.i577 - i32 98, label %case51.i.i579 - i32 66, label %case51.i.i579 - i32 111, label %case56.i.i581 - i32 79, label %case56.i.i581 - ] - -case46.i.i577: ; preds = %if40.i.i575, %if40.i.i575 - %tmp48.i.i576 = getelementptr i8* %p.0.i.i556, i32 2 ; [#uses=1] - br label %endif41.i.i585 - -case51.i.i579: ; preds = %if40.i.i575, %if40.i.i575 - %tmp53.i.i578 = getelementptr i8* %p.0.i.i556, i32 2 ; [#uses=1] - br label %endif41.i.i585 - -case56.i.i581: ; preds = %if40.i.i575, %if40.i.i575 - %tmp58.i.i580 = getelementptr i8* %p.0.i.i556, i32 2 ; [#uses=1] - br label %endif41.i.i585 - -endif41.i.i585: ; preds = %case56.i.i581, %case51.i.i579, %case46.i.i577, %if40.i.i575, %endfor.i.i571 - %r.0.i.i582 = phi i32 [ 0, %if40.i.i575 ], [ 8, %case56.i.i581 ], [ 2, %case51.i.i579 ], [ 16, %case46.i.i577 ], [ 0, %endfor.i.i571 ] ; [#uses=2] - %p.2.i.i583 = phi i8* [ %tmp43.i.i572, %if40.i.i575 ], [ %tmp58.i.i580, %case56.i.i581 ], [ %tmp53.i.i578, %case51.i.i579 ], [ %tmp48.i.i576, %case46.i.i577 ], [ %p.0.i.i556, %endfor.i.i571 ] ; [#uses=2] - %tmp63.i.i584 = icmp eq i32 %r.0.i.i582, 0 ; [#uses=1] - br i1 %tmp63.i.i584, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597, label %if70.i.i589 - -if70.i.i589: ; preds = %endif41.i.i585 - br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 - -_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597: ; preds = %if70.i.i589, %endif41.i.i585, %endif89 - %sign.2.i590 = phi i1 [ false, %endif89 ], [ %sign.1.i554, %if70.i.i589 ], [ %sign.1.i554, %endif41.i.i585 ] ; [#uses=1] - %radix.0.i591 = phi i32 [ 0, %endif89 ], [ %r.0.i.i582, %if70.i.i589 ], [ 10, %endif41.i.i585 ] ; [#uses=2] - %p.1.i.i592 = phi i8* [ %p.2.i.i583, %if70.i.i589 ], [ %digits_arg27.i552, %endif89 ], [ %p.2.i.i583, %endif41.i.i585 ] ; [#uses=1] - %tmp84.i.i593 = ptrtoint i8* %p.1.i.i592 to i32 ; [#uses=1] - %tmp85.i.i594 = ptrtoint i8* %digits_arg27.i552 to i32 ; [#uses=1] - %tmp86.i.i595 = sub i32 %tmp84.i.i593, %tmp85.i.i594 ; [#uses=2] - %tmp6.i596 = sub i32 %digits_arg26.i551, %tmp86.i.i595 ; [#uses=1] - br label %foreachcond.i.i602 - -foreachcond.i.i602: ; preds = %if55.i.i631, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 - %value.0.i.i598 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 ], [ %tmp65.i.i628, %if55.i.i631 ] ; [#uses=3] - %foreachkey.0.i.i600 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i597 ], [ %tmp70.i.i630, %if55.i.i631 ] ; [#uses=3] - %tmp3.i.i601 = icmp ult i32 %foreachkey.0.i.i600, %tmp6.i596 ; [#uses=1] - br i1 %tmp3.i.i601, label %foreachbody.i.i608, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635 - -foreachbody.i.i608: ; preds = %foreachcond.i.i602 - %tmp5.sum.i603 = add i32 %tmp86.i.i595, %foreachkey.0.i.i600 ; [#uses=1] - %tmp5.i.i604 = getelementptr i8* %digits_arg27.i552, i32 %tmp5.sum.i603 ; [#uses=1] - %tmp6.i.i605 = load i8* %tmp5.i.i604 ; [#uses=6] - %tmp6.off84.i.i606 = add i8 %tmp6.i.i605, -48 ; [#uses=1] - %or.cond.i28.i607 = icmp ugt i8 %tmp6.off84.i.i606, 9 ; [#uses=1] - br i1 %or.cond.i28.i607, label %else.i.i611, label %endif.i.i624 - -else.i.i611: ; preds = %foreachbody.i.i608 - %tmp6.off83.i.i609 = add i8 %tmp6.i.i605, -97 ; [#uses=1] - %or.cond81.i.i610 = icmp ugt i8 %tmp6.off83.i.i609, 25 ; [#uses=1] - br i1 %or.cond81.i.i610, label %else24.i.i616, label %if22.i.i613 - -if22.i.i613: ; preds = %else.i.i611 - %tmp27.i.i612 = add i8 %tmp6.i.i605, -39 ; [#uses=1] - br label %endif.i.i624 - -else24.i.i616: ; preds = %else.i.i611 - %tmp6.off.i.i614 = add i8 %tmp6.i.i605, -65 ; [#uses=1] - %or.cond82.i.i615 = icmp ugt i8 %tmp6.off.i.i614, 25 ; [#uses=1] - br i1 %or.cond82.i.i615, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635, label %if39.i.i618 - -if39.i.i618: ; preds = %else24.i.i616 - %tmp44.i29.i617 = add i8 %tmp6.i.i605, -7 ; [#uses=1] - br label %endif.i.i624 - -endif.i.i624: ; preds = %if39.i.i618, %if22.i.i613, %foreachbody.i.i608 - %c.0.i30.i619 = phi i8 [ %tmp27.i.i612, %if22.i.i613 ], [ %tmp44.i29.i617, %if39.i.i618 ], [ %tmp6.i.i605, %foreachbody.i.i608 ] ; [#uses=1] - %tmp48.i31.i620 = zext i8 %c.0.i30.i619 to i32 ; [#uses=1] - %tmp49.i.i621 = add i32 %tmp48.i31.i620, 208 ; [#uses=1] - %tmp52.i.i622 = and i32 %tmp49.i.i621, 255 ; [#uses=2] - %tmp54.i.i623 = icmp ult i32 %tmp52.i.i622, %radix.0.i591 ; [#uses=1] - br i1 %tmp54.i.i623, label %if55.i.i631, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635 - -if55.i.i631: ; preds = %endif.i.i624 - %tmp59.i.i625 = zext i32 %radix.0.i591 to i64 ; [#uses=1] - %tmp61.i.i626 = mul i64 %value.0.i.i598, %tmp59.i.i625 ; [#uses=1] - %tmp64.i.i627 = zext i32 %tmp52.i.i622 to i64 ; [#uses=1] - %tmp65.i.i628 = add i64 %tmp61.i.i626, %tmp64.i.i627 ; [#uses=1] - %tmp70.i.i630 = add i32 %foreachkey.0.i.i600, 1 ; [#uses=1] - br label %foreachcond.i.i602 - -_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635: ; preds = %endif.i.i624, %else24.i.i616, %foreachcond.i.i602 - %negval.i633 = sub i64 0, %value.0.i.i598 ; [#uses=1] - %condtmp.0.i634 = select i1 %sign.2.i590, i64 %negval.i633, i64 %value.0.i.i598 ; [#uses=1] - %.newclass_gc_alloc135 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=6] - %vtbl137 = bitcast i8* %.newclass_gc_alloc135 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl137 - %monitor138 = getelementptr i8* %.newclass_gc_alloc135, i32 4 ; [#uses=1] - %5 = bitcast i8* %monitor138 to i8** ; [#uses=1] - store i8* null, i8** %5 - %tmp139 = getelementptr i8* %.newclass_gc_alloc135, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp139, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) - %tmp145 = trunc i64 %condtmp.0.i634 to i16 ; [#uses=1] - %tmp2.i636 = getelementptr i8* %.newclass_gc_alloc135, i32 20 ; [#uses=1] - %6 = bitcast i8* %tmp2.i636 to i32* ; [#uses=1] - store i32 %tmp126, i32* %6 - %tmp7.i637 = getelementptr i8* %.newclass_gc_alloc135, i32 18 ; [#uses=1] - %7 = bitcast i8* %tmp7.i637 to i16* ; [#uses=1] - store i16 %tmp145, i16* %7 - %tmp147 = bitcast i8* %.newclass_gc_alloc135 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] - br label %try - -else56: ; preds = %else - call fastcc void %this.sendCommand62(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str138, i32 0, i32 0) }, %"char[][]" zeroinitializer) - %tmp157 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl158" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp157, i32 0, i32 36 ; [#uses=1] - %this.readResponse160 = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.readResponse at vtbl158", align 4 ; [#uses=1] - call fastcc void %this.readResponse160(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp161, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str139, i32 0, i32 0) }) - %.rettmp161.1.0 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp161, i32 0, i32 1, i32 0 ; [#uses=1] - %tmp = load i32* %.rettmp161.1.0, align 4 ; [#uses=2] - %.rettmp161.1.1 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp161, i32 0, i32 1, i32 1 ; [#uses=1] - %tmp332 = load i8** %.rettmp161.1.1, align 4 ; [#uses=2] - %.newclass_gc_alloc.i638 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT7__ClassZ) ; [#uses=4] - %.newclass_gc.i639 = bitcast i8* %.newclass_gc_alloc.i638 to %"tango.text.Regex.RegExpT!(char).RegExpT"* ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=9] - %vtbl.i640 = bitcast i8* %.newclass_gc_alloc.i638 to %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"**> [#uses=9] - store %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__vtblZ, %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 - %monitor.i641 = getelementptr i8* %.newclass_gc_alloc.i638, i32 4 ; [#uses=1] - %8 = bitcast i8* %monitor.i641 to i8** ; [#uses=1] - store i8* null, i8** %8 - %tmp.i642 = getelementptr i8* %.newclass_gc_alloc.i638, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp.i642, i8* bitcast (%"Act[]"* getelementptr (%"tango.text.Regex.RegExpT!(char).RegExpT"* bitcast (%30* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT6__initZ to %"tango.text.Regex.RegExpT!(char).RegExpT"*), i32 0, i32 2) to i8*), i32 36, i32 1) - %tmp2.i.i643 = call fastcc %"tango.text.Regex.RegExpT!(char).RegExpT"* @_D5tango4text5Regex14__T7RegExpTTaZ7RegExpT5_ctorMFAabbbZC5tango4text5Regex14__T7RegExpTTaZ7RegExpT(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, %"byte[]" { i32 53, i8* getelementptr ([54 x i8]* @.str140, i32 0, i32 0) }, i1 false, i1 true, i1 false) ; <%"tango.text.Regex.RegExpT!(char).RegExpT"*> [#uses=0] - %tmp168 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.test at vtbl169" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp168, i32 0, i32 7 ; [#uses=1] - %r.test171 = load i1 (%"tango.text.Regex.RegExpT!(char).RegExpT"*, %"byte[]")** %"r.test at vtbl169", align 4 ; [#uses=1] - br label %foreachcond.i.i648 - -foreachcond.i.i648: ; preds = %foreachnext.i.i655, %else56 - %pos.0.i.i646 = phi i32 [ 0, %else56 ], [ %tmp12.i.i654, %foreachnext.i.i655 ] ; [#uses=4] - %tmp3.i.i647 = icmp ult i32 %pos.0.i.i646, %tmp ; [#uses=1] - br i1 %tmp3.i.i647, label %foreachbody.i.i652, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658 - -foreachbody.i.i652: ; preds = %foreachcond.i.i648 - %tmp5.i.i649 = getelementptr i8* %tmp332, i32 %pos.0.i.i646 ; [#uses=1] - %tmp6.i.i650 = load i8* %tmp5.i.i649 ; [#uses=1] - %tmp4.i.i.i651 = icmp eq i8 %tmp6.i.i650, 10 ; [#uses=1] - br i1 %tmp4.i.i.i651, label %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658, label %foreachnext.i.i655 - -foreachnext.i.i655: ; preds = %foreachbody.i.i652 - %tmp12.i.i654 = add i32 %pos.0.i.i646, 1 ; [#uses=1] - br label %foreachcond.i.i648 - -_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658: ; preds = %foreachbody.i.i652, %foreachcond.i.i648 - %tmp23.i657 = phi i32 [ %pos.0.i.i646, %foreachbody.i.i652 ], [ %tmp, %foreachcond.i.i648 ] ; [#uses=1] - %tmp180 = insertvalue %"byte[]" undef, i32 %tmp23.i657, 0 ; <%"byte[]"> [#uses=1] - %tmp181 = insertvalue %"byte[]" %tmp180, i8* %tmp332, 1 ; <%"byte[]"> [#uses=1] - %tmp182 = call fastcc i1 %r.test171(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, %"byte[]" %tmp181) ; [#uses=1] - br i1 %tmp182, label %endif184, label %if183 - -if183: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658 - %.newclass_gc_alloc185 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=6] - %vtbl187 = bitcast i8* %.newclass_gc_alloc185 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] - store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl187 - %monitor188 = getelementptr i8* %.newclass_gc_alloc185, i32 4 ; [#uses=1] - %9 = bitcast i8* %monitor188 to i8** ; [#uses=1] - store i8* null, i8** %9 - %tmp189 = getelementptr i8* %.newclass_gc_alloc185, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp189, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) - %tmp2.i659 = getelementptr i8* %.newclass_gc_alloc185, i32 36 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2.i659, i8* getelementptr ([4 x i8]* @.str142, i32 0, i32 0), i32 3, i32 1) - %tmp5.i660 = bitcast i8* %.newclass_gc_alloc185 to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7.i661 = call fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i660, %"byte[]" { i32 31, i8* getelementptr ([32 x i8]* @.str141, i32 0, i32 0) }, %object.Exception* null) ; <%object.Exception*> [#uses=0] - %tmp194 = bitcast i8* %.newclass_gc_alloc185 to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_throw_exception(%object.Object* %tmp194) - unreachable - -endif184: ; preds = %_D5tango4core5Array14__T4findTAaTaZ4findFAaaZk.exit658 - %tmp199 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl200" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp199, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match202 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl200", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp203 = call fastcc %"byte[]" %r.match202(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 1) ; <%"byte[]"> [#uses=2] - %.len = extractvalue %"byte[]" %tmp203, 0 ; [#uses=3] - %tmp204 = add i32 %.len, 1 ; [#uses=4] - %.nongc_mem = alloca i8, i32 %tmp204, align 1 ; [#uses=3] - %.ptr205 = extractvalue %"byte[]" %tmp203, 1 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %.nongc_mem, i8* %.ptr205, i32 %.len, i32 1) - %tmp207 = getelementptr i8* %.nongc_mem, i32 %.len ; [#uses=1] - store i8 46, i8* %tmp207, align 1 - %tmp210 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl211" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp210, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match213 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl211", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp214 = call fastcc %"byte[]" %r.match213(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 2) ; <%"byte[]"> [#uses=2] - %.len215 = extractvalue %"byte[]" %tmp214, 0 ; [#uses=2] - %tmp216 = add i32 %tmp204, %.len215 ; [#uses=4] - %.nongc_mem662 = alloca i8, i32 %tmp216, align 1 ; [#uses=3] - %.ptr218 = extractvalue %"byte[]" %tmp214, 1 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %.nongc_mem662, i8* %.nongc_mem, i32 %tmp204, i32 1) - %tmp220 = getelementptr i8* %.nongc_mem662, i32 %tmp204 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp220, i8* %.ptr218, i32 %.len215, i32 1) - %tmp222 = add i32 %tmp216, 1 ; [#uses=4] - %.nongc_mem663 = alloca i8, i32 %tmp222, align 1 ; [#uses=3] - call void @llvm.memcpy.i32(i8* %.nongc_mem663, i8* %.nongc_mem662, i32 %tmp216, i32 1) - %tmp225 = getelementptr i8* %.nongc_mem663, i32 %tmp216 ; [#uses=1] - store i8 46, i8* %tmp225, align 1 - %tmp228 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl229" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp228, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match231 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl229", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp232 = call fastcc %"byte[]" %r.match231(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 3) ; <%"byte[]"> [#uses=2] - %.len233 = extractvalue %"byte[]" %tmp232, 0 ; [#uses=2] - %tmp234 = add i32 %tmp222, %.len233 ; [#uses=4] - %.nongc_mem664 = alloca i8, i32 %tmp234, align 1 ; [#uses=3] - %.ptr236 = extractvalue %"byte[]" %tmp232, 1 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %.nongc_mem664, i8* %.nongc_mem663, i32 %tmp222, i32 1) - %tmp238 = getelementptr i8* %.nongc_mem664, i32 %tmp222 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp238, i8* %.ptr236, i32 %.len233, i32 1) - %tmp240 = add i32 %tmp234, 1 ; [#uses=4] - %.nongc_mem665 = alloca i8, i32 %tmp240, align 1 ; [#uses=3] - call void @llvm.memcpy.i32(i8* %.nongc_mem665, i8* %.nongc_mem664, i32 %tmp234, i32 1) - %tmp243 = getelementptr i8* %.nongc_mem665, i32 %tmp234 ; [#uses=1] - store i8 46, i8* %tmp243, align 1 - %tmp246 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl247" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp246, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match249 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl247", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp250 = call fastcc %"byte[]" %r.match249(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 4) ; <%"byte[]"> [#uses=2] - %.len251 = extractvalue %"byte[]" %tmp250, 0 ; [#uses=2] - %tmp252 = add i32 %tmp240, %.len251 ; [#uses=2] - %.gc_mem253 = call noalias i8* @_d_newarrayvT(%object.TypeInfo* @_D11TypeInfo_Aa6__initZ, i32 %tmp252) ; [#uses=3] - %.ptr254 = extractvalue %"byte[]" %tmp250, 1 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %.gc_mem253, i8* %.nongc_mem665, i32 %tmp240, i32 1) - %tmp256 = getelementptr i8* %.gc_mem253, i32 %tmp240 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp256, i8* %.ptr254, i32 %.len251, i32 1) - %tmp263 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl264" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp263, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match266 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl264", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp267 = call fastcc %"byte[]" %r.match266(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 5) ; <%"byte[]"> [#uses=2] - %digits_arg26.i464 = extractvalue %"byte[]" %tmp267, 0 ; [#uses=3] - %digits_arg27.i465 = extractvalue %"byte[]" %tmp267, 1 ; [#uses=5] - %tmp4.i.i466 = icmp eq i32 %digits_arg26.i464, 0 ; [#uses=1] - br i1 %tmp4.i.i466, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510, label %forcond.i.i473 - -forcond.i.i473: ; preds = %forinc.i.i480, %endif184 - %sign.1.i467 = phi i1 [ false, %endif184 ], [ %sign.0.i477, %forinc.i.i480 ] ; [#uses=4] - %len.0.i.i468 = phi i32 [ %tmp33.i.i479, %forinc.i.i480 ], [ %digits_arg26.i464, %endif184 ] ; [#uses=3] - %p.0.i.i469 = phi i8* [ %tmp30.i.i478, %forinc.i.i480 ], [ %digits_arg27.i465, %endif184 ] ; [#uses=6] - %c.0.in.i.i470 = phi i8* [ %tmp30.i.i478, %forinc.i.i480 ], [ %digits_arg27.i465, %endif184 ] ; [#uses=1] - %c.0.i.i471 = load i8* %c.0.in.i.i470 ; [#uses=2] - %tmp8.i.i472 = icmp eq i32 %len.0.i.i468, 0 ; [#uses=1] - br i1 %tmp8.i.i472, label %endfor.i.i484, label %forbody.i.i474 - -forbody.i.i474: ; preds = %forcond.i.i473 - switch i8 %c.0.i.i471, label %endfor.i.i484 [ - i8 32, label %forinc.i.i480 - i8 9, label %forinc.i.i480 - i8 45, label %if20.i.i475 - i8 43, label %if26.i.i476 - ] - -if20.i.i475: ; preds = %forbody.i.i474 - br label %forinc.i.i480 - -if26.i.i476: ; preds = %forbody.i.i474 - br label %forinc.i.i480 - -forinc.i.i480: ; preds = %if26.i.i476, %if20.i.i475, %forbody.i.i474, %forbody.i.i474 - %sign.0.i477 = phi i1 [ false, %if26.i.i476 ], [ true, %if20.i.i475 ], [ %sign.1.i467, %forbody.i.i474 ], [ %sign.1.i467, %forbody.i.i474 ] ; [#uses=1] - %tmp30.i.i478 = getelementptr i8* %p.0.i.i469, i32 1 ; [#uses=2] - %tmp33.i.i479 = add i32 %len.0.i.i468, -1 ; [#uses=1] - br label %forcond.i.i473 - -endfor.i.i484: ; preds = %forbody.i.i474, %forcond.i.i473 - %tmp37.i.i481 = icmp eq i8 %c.0.i.i471, 48 ; [#uses=1] - %tmp39.i.i482 = icmp sgt i32 %len.0.i.i468, 1 ; [#uses=1] - %or.cond.i.i483 = and i1 %tmp37.i.i481, %tmp39.i.i482 ; [#uses=1] - br i1 %or.cond.i.i483, label %if40.i.i488, label %endif41.i.i498 - -if40.i.i488: ; preds = %endfor.i.i484 - %tmp43.i.i485 = getelementptr i8* %p.0.i.i469, i32 1 ; [#uses=2] - %tmp44.i.i486 = load i8* %tmp43.i.i485 ; [#uses=1] - %tmp45.i.i487 = zext i8 %tmp44.i.i486 to i32 ; [#uses=1] - switch i32 %tmp45.i.i487, label %endif41.i.i498 [ - i32 120, label %case46.i.i490 - i32 88, label %case46.i.i490 - i32 98, label %case51.i.i492 - i32 66, label %case51.i.i492 - i32 111, label %case56.i.i494 - i32 79, label %case56.i.i494 - ] - -case46.i.i490: ; preds = %if40.i.i488, %if40.i.i488 - %tmp48.i.i489 = getelementptr i8* %p.0.i.i469, i32 2 ; [#uses=1] - br label %endif41.i.i498 - -case51.i.i492: ; preds = %if40.i.i488, %if40.i.i488 - %tmp53.i.i491 = getelementptr i8* %p.0.i.i469, i32 2 ; [#uses=1] - br label %endif41.i.i498 - -case56.i.i494: ; preds = %if40.i.i488, %if40.i.i488 - %tmp58.i.i493 = getelementptr i8* %p.0.i.i469, i32 2 ; [#uses=1] - br label %endif41.i.i498 - -endif41.i.i498: ; preds = %case56.i.i494, %case51.i.i492, %case46.i.i490, %if40.i.i488, %endfor.i.i484 - %r.0.i.i495 = phi i32 [ 0, %if40.i.i488 ], [ 8, %case56.i.i494 ], [ 2, %case51.i.i492 ], [ 16, %case46.i.i490 ], [ 0, %endfor.i.i484 ] ; [#uses=2] - %p.2.i.i496 = phi i8* [ %tmp43.i.i485, %if40.i.i488 ], [ %tmp58.i.i493, %case56.i.i494 ], [ %tmp53.i.i491, %case51.i.i492 ], [ %tmp48.i.i489, %case46.i.i490 ], [ %p.0.i.i469, %endfor.i.i484 ] ; [#uses=2] - %tmp63.i.i497 = icmp eq i32 %r.0.i.i495, 0 ; [#uses=1] - br i1 %tmp63.i.i497, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510, label %if70.i.i502 - -if70.i.i502: ; preds = %endif41.i.i498 - br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 - -_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510: ; preds = %if70.i.i502, %endif41.i.i498, %endif184 - %sign.2.i503 = phi i1 [ false, %endif184 ], [ %sign.1.i467, %if70.i.i502 ], [ %sign.1.i467, %endif41.i.i498 ] ; [#uses=1] - %radix.0.i504 = phi i32 [ 0, %endif184 ], [ %r.0.i.i495, %if70.i.i502 ], [ 10, %endif41.i.i498 ] ; [#uses=2] - %p.1.i.i505 = phi i8* [ %p.2.i.i496, %if70.i.i502 ], [ %digits_arg27.i465, %endif184 ], [ %p.2.i.i496, %endif41.i.i498 ] ; [#uses=1] - %tmp84.i.i506 = ptrtoint i8* %p.1.i.i505 to i32 ; [#uses=1] - %tmp85.i.i507 = ptrtoint i8* %digits_arg27.i465 to i32 ; [#uses=1] - %tmp86.i.i508 = sub i32 %tmp84.i.i506, %tmp85.i.i507 ; [#uses=2] - %tmp6.i509 = sub i32 %digits_arg26.i464, %tmp86.i.i508 ; [#uses=1] - br label %foreachcond.i.i515 - -foreachcond.i.i515: ; preds = %if55.i.i544, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 - %value.0.i.i511 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 ], [ %tmp65.i.i541, %if55.i.i544 ] ; [#uses=3] - %foreachkey.0.i.i513 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i510 ], [ %tmp70.i.i543, %if55.i.i544 ] ; [#uses=3] - %tmp3.i.i514 = icmp ult i32 %foreachkey.0.i.i513, %tmp6.i509 ; [#uses=1] - br i1 %tmp3.i.i514, label %foreachbody.i.i521, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 - -foreachbody.i.i521: ; preds = %foreachcond.i.i515 - %tmp5.sum.i516 = add i32 %tmp86.i.i508, %foreachkey.0.i.i513 ; [#uses=1] - %tmp5.i.i517 = getelementptr i8* %digits_arg27.i465, i32 %tmp5.sum.i516 ; [#uses=1] - %tmp6.i.i518 = load i8* %tmp5.i.i517 ; [#uses=6] - %tmp6.off84.i.i519 = add i8 %tmp6.i.i518, -48 ; [#uses=1] - %or.cond.i28.i520 = icmp ugt i8 %tmp6.off84.i.i519, 9 ; [#uses=1] - br i1 %or.cond.i28.i520, label %else.i.i524, label %endif.i.i537 - -else.i.i524: ; preds = %foreachbody.i.i521 - %tmp6.off83.i.i522 = add i8 %tmp6.i.i518, -97 ; [#uses=1] - %or.cond81.i.i523 = icmp ugt i8 %tmp6.off83.i.i522, 25 ; [#uses=1] - br i1 %or.cond81.i.i523, label %else24.i.i529, label %if22.i.i526 - -if22.i.i526: ; preds = %else.i.i524 - %tmp27.i.i525 = add i8 %tmp6.i.i518, -39 ; [#uses=1] - br label %endif.i.i537 - -else24.i.i529: ; preds = %else.i.i524 - %tmp6.off.i.i527 = add i8 %tmp6.i.i518, -65 ; [#uses=1] - %or.cond82.i.i528 = icmp ugt i8 %tmp6.off.i.i527, 25 ; [#uses=1] - br i1 %or.cond82.i.i528, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548, label %if39.i.i531 - -if39.i.i531: ; preds = %else24.i.i529 - %tmp44.i29.i530 = add i8 %tmp6.i.i518, -7 ; [#uses=1] - br label %endif.i.i537 - -endif.i.i537: ; preds = %if39.i.i531, %if22.i.i526, %foreachbody.i.i521 - %c.0.i30.i532 = phi i8 [ %tmp27.i.i525, %if22.i.i526 ], [ %tmp44.i29.i530, %if39.i.i531 ], [ %tmp6.i.i518, %foreachbody.i.i521 ] ; [#uses=1] - %tmp48.i31.i533 = zext i8 %c.0.i30.i532 to i32 ; [#uses=1] - %tmp49.i.i534 = add i32 %tmp48.i31.i533, 208 ; [#uses=1] - %tmp52.i.i535 = and i32 %tmp49.i.i534, 255 ; [#uses=2] - %tmp54.i.i536 = icmp ult i32 %tmp52.i.i535, %radix.0.i504 ; [#uses=1] - br i1 %tmp54.i.i536, label %if55.i.i544, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 - -if55.i.i544: ; preds = %endif.i.i537 - %tmp59.i.i538 = zext i32 %radix.0.i504 to i64 ; [#uses=1] - %tmp61.i.i539 = mul i64 %value.0.i.i511, %tmp59.i.i538 ; [#uses=1] - %tmp64.i.i540 = zext i32 %tmp52.i.i535 to i64 ; [#uses=1] - %tmp65.i.i541 = add i64 %tmp61.i.i539, %tmp64.i.i540 ; [#uses=1] - %tmp70.i.i543 = add i32 %foreachkey.0.i.i513, 1 ; [#uses=1] - br label %foreachcond.i.i515 - -_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548: ; preds = %endif.i.i537, %else24.i.i529, %foreachcond.i.i515 - %negval.i546 = sub i64 0, %value.0.i.i511 ; [#uses=1] - %condtmp.0.i547 = select i1 %sign.2.i503, i64 %negval.i546, i64 %value.0.i.i511 ; [#uses=1] - %tmp269 = trunc i64 %condtmp.0.i547 to i32 ; [#uses=1] - %tmp270 = shl i32 %tmp269, 8 ; [#uses=1] - %tmp273 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl274" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp273, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match276 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl274", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp277 = call fastcc %"byte[]" %r.match276(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 7) ; <%"byte[]"> [#uses=1] - %.len278 = extractvalue %"byte[]" %tmp277, 0 ; [#uses=1] - %tmp279 = icmp eq i32 %.len278, 0 ; [#uses=1] - br i1 %tmp279, label %condend, label %condtrue - -condtrue: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 - %tmp282 = load %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"** %vtbl.i640 ; <%"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"*> [#uses=1] - %"r.match at vtbl283" = getelementptr %"tango.text.Regex.RegExpT!(char).RegExpT.__vtbl"* %tmp282, i32 0, i32 9 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)**> [#uses=1] - %r.match285 = load %"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)** %"r.match at vtbl283", align 4 ; <%"byte[]" (%"tango.text.Regex.RegExpT!(char).RegExpT"*, i32)*> [#uses=1] - %tmp286 = call fastcc %"byte[]" %r.match285(%"tango.text.Regex.RegExpT!(char).RegExpT"* %.newclass_gc.i639, i32 7) ; <%"byte[]"> [#uses=2] - %digits_arg26.i375 = extractvalue %"byte[]" %tmp286, 0 ; [#uses=3] - %digits_arg27.i376 = extractvalue %"byte[]" %tmp286, 1 ; [#uses=5] - %tmp4.i.i377 = icmp eq i32 %digits_arg26.i375, 0 ; [#uses=1] - br i1 %tmp4.i.i377, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421, label %forcond.i.i384 - -forcond.i.i384: ; preds = %forinc.i.i391, %condtrue - %sign.1.i378 = phi i1 [ false, %condtrue ], [ %sign.0.i388, %forinc.i.i391 ] ; [#uses=4] - %len.0.i.i379 = phi i32 [ %tmp33.i.i390, %forinc.i.i391 ], [ %digits_arg26.i375, %condtrue ] ; [#uses=3] - %p.0.i.i380 = phi i8* [ %tmp30.i.i389, %forinc.i.i391 ], [ %digits_arg27.i376, %condtrue ] ; [#uses=6] - %c.0.in.i.i381 = phi i8* [ %tmp30.i.i389, %forinc.i.i391 ], [ %digits_arg27.i376, %condtrue ] ; [#uses=1] - %c.0.i.i382 = load i8* %c.0.in.i.i381 ; [#uses=2] - %tmp8.i.i383 = icmp eq i32 %len.0.i.i379, 0 ; [#uses=1] - br i1 %tmp8.i.i383, label %endfor.i.i395, label %forbody.i.i385 - -forbody.i.i385: ; preds = %forcond.i.i384 - switch i8 %c.0.i.i382, label %endfor.i.i395 [ - i8 32, label %forinc.i.i391 - i8 9, label %forinc.i.i391 - i8 45, label %if20.i.i386 - i8 43, label %if26.i.i387 - ] - -if20.i.i386: ; preds = %forbody.i.i385 - br label %forinc.i.i391 - -if26.i.i387: ; preds = %forbody.i.i385 - br label %forinc.i.i391 - -forinc.i.i391: ; preds = %if26.i.i387, %if20.i.i386, %forbody.i.i385, %forbody.i.i385 - %sign.0.i388 = phi i1 [ false, %if26.i.i387 ], [ true, %if20.i.i386 ], [ %sign.1.i378, %forbody.i.i385 ], [ %sign.1.i378, %forbody.i.i385 ] ; [#uses=1] - %tmp30.i.i389 = getelementptr i8* %p.0.i.i380, i32 1 ; [#uses=2] - %tmp33.i.i390 = add i32 %len.0.i.i379, -1 ; [#uses=1] - br label %forcond.i.i384 - -endfor.i.i395: ; preds = %forbody.i.i385, %forcond.i.i384 - %tmp37.i.i392 = icmp eq i8 %c.0.i.i382, 48 ; [#uses=1] - %tmp39.i.i393 = icmp sgt i32 %len.0.i.i379, 1 ; [#uses=1] - %or.cond.i.i394 = and i1 %tmp37.i.i392, %tmp39.i.i393 ; [#uses=1] - br i1 %or.cond.i.i394, label %if40.i.i399, label %endif41.i.i409 - -if40.i.i399: ; preds = %endfor.i.i395 - %tmp43.i.i396 = getelementptr i8* %p.0.i.i380, i32 1 ; [#uses=2] - %tmp44.i.i397 = load i8* %tmp43.i.i396 ; [#uses=1] - %tmp45.i.i398 = zext i8 %tmp44.i.i397 to i32 ; [#uses=1] - switch i32 %tmp45.i.i398, label %endif41.i.i409 [ - i32 120, label %case46.i.i401 - i32 88, label %case46.i.i401 - i32 98, label %case51.i.i403 - i32 66, label %case51.i.i403 - i32 111, label %case56.i.i405 - i32 79, label %case56.i.i405 - ] - -case46.i.i401: ; preds = %if40.i.i399, %if40.i.i399 - %tmp48.i.i400 = getelementptr i8* %p.0.i.i380, i32 2 ; [#uses=1] - br label %endif41.i.i409 - -case51.i.i403: ; preds = %if40.i.i399, %if40.i.i399 - %tmp53.i.i402 = getelementptr i8* %p.0.i.i380, i32 2 ; [#uses=1] - br label %endif41.i.i409 - -case56.i.i405: ; preds = %if40.i.i399, %if40.i.i399 - %tmp58.i.i404 = getelementptr i8* %p.0.i.i380, i32 2 ; [#uses=1] - br label %endif41.i.i409 - -endif41.i.i409: ; preds = %case56.i.i405, %case51.i.i403, %case46.i.i401, %if40.i.i399, %endfor.i.i395 - %r.0.i.i406 = phi i32 [ 0, %if40.i.i399 ], [ 8, %case56.i.i405 ], [ 2, %case51.i.i403 ], [ 16, %case46.i.i401 ], [ 0, %endfor.i.i395 ] ; [#uses=2] - %p.2.i.i407 = phi i8* [ %tmp43.i.i396, %if40.i.i399 ], [ %tmp58.i.i404, %case56.i.i405 ], [ %tmp53.i.i402, %case51.i.i403 ], [ %tmp48.i.i400, %case46.i.i401 ], [ %p.0.i.i380, %endfor.i.i395 ] ; [#uses=2] - %tmp63.i.i408 = icmp eq i32 %r.0.i.i406, 0 ; [#uses=1] - br i1 %tmp63.i.i408, label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421, label %if70.i.i413 - -if70.i.i413: ; preds = %endif41.i.i409 - br label %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 - -_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421: ; preds = %if70.i.i413, %endif41.i.i409, %condtrue - %sign.2.i414 = phi i1 [ false, %condtrue ], [ %sign.1.i378, %if70.i.i413 ], [ %sign.1.i378, %endif41.i.i409 ] ; [#uses=1] - %radix.0.i415 = phi i32 [ 0, %condtrue ], [ %r.0.i.i406, %if70.i.i413 ], [ 10, %endif41.i.i409 ] ; [#uses=2] - %p.1.i.i416 = phi i8* [ %p.2.i.i407, %if70.i.i413 ], [ %digits_arg27.i376, %condtrue ], [ %p.2.i.i407, %endif41.i.i409 ] ; [#uses=1] - %tmp84.i.i417 = ptrtoint i8* %p.1.i.i416 to i32 ; [#uses=1] - %tmp85.i.i418 = ptrtoint i8* %digits_arg27.i376 to i32 ; [#uses=1] - %tmp86.i.i419 = sub i32 %tmp84.i.i417, %tmp85.i.i418 ; [#uses=2] - %tmp6.i420 = sub i32 %digits_arg26.i375, %tmp86.i.i419 ; [#uses=1] - br label %foreachcond.i.i426 - -foreachcond.i.i426: ; preds = %if55.i.i455, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 - %value.0.i.i422 = phi i64 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 ], [ %tmp65.i.i452, %if55.i.i455 ] ; [#uses=3] - %foreachkey.0.i.i424 = phi i32 [ 0, %_D5tango4text7convert7Integer11__T4trimTaZ4trimFAaKbKkZk.exit.i421 ], [ %tmp70.i.i454, %if55.i.i455 ] ; [#uses=3] - %tmp3.i.i425 = icmp ult i32 %foreachkey.0.i.i424, %tmp6.i420 ; [#uses=1] - br i1 %tmp3.i.i425, label %foreachbody.i.i432, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458 - -foreachbody.i.i432: ; preds = %foreachcond.i.i426 - %tmp5.sum.i427 = add i32 %tmp86.i.i419, %foreachkey.0.i.i424 ; [#uses=1] - %tmp5.i.i428 = getelementptr i8* %digits_arg27.i376, i32 %tmp5.sum.i427 ; [#uses=1] - %tmp6.i.i429 = load i8* %tmp5.i.i428 ; [#uses=6] - %tmp6.off84.i.i430 = add i8 %tmp6.i.i429, -48 ; [#uses=1] - %or.cond.i28.i431 = icmp ugt i8 %tmp6.off84.i.i430, 9 ; [#uses=1] - br i1 %or.cond.i28.i431, label %else.i.i435, label %endif.i.i448 - -else.i.i435: ; preds = %foreachbody.i.i432 - %tmp6.off83.i.i433 = add i8 %tmp6.i.i429, -97 ; [#uses=1] - %or.cond81.i.i434 = icmp ugt i8 %tmp6.off83.i.i433, 25 ; [#uses=1] - br i1 %or.cond81.i.i434, label %else24.i.i440, label %if22.i.i437 - -if22.i.i437: ; preds = %else.i.i435 - %tmp27.i.i436 = add i8 %tmp6.i.i429, -39 ; [#uses=1] - br label %endif.i.i448 - -else24.i.i440: ; preds = %else.i.i435 - %tmp6.off.i.i438 = add i8 %tmp6.i.i429, -65 ; [#uses=1] - %or.cond82.i.i439 = icmp ugt i8 %tmp6.off.i.i438, 25 ; [#uses=1] - br i1 %or.cond82.i.i439, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458, label %if39.i.i442 - -if39.i.i442: ; preds = %else24.i.i440 - %tmp44.i29.i441 = add i8 %tmp6.i.i429, -7 ; [#uses=1] - br label %endif.i.i448 - -endif.i.i448: ; preds = %if39.i.i442, %if22.i.i437, %foreachbody.i.i432 - %c.0.i30.i443 = phi i8 [ %tmp27.i.i436, %if22.i.i437 ], [ %tmp44.i29.i441, %if39.i.i442 ], [ %tmp6.i.i429, %foreachbody.i.i432 ] ; [#uses=1] - %tmp48.i31.i444 = zext i8 %c.0.i30.i443 to i32 ; [#uses=1] - %tmp49.i.i445 = add i32 %tmp48.i31.i444, 208 ; [#uses=1] - %tmp52.i.i446 = and i32 %tmp49.i.i445, 255 ; [#uses=2] - %tmp54.i.i447 = icmp ult i32 %tmp52.i.i446, %radix.0.i415 ; [#uses=1] - br i1 %tmp54.i.i447, label %if55.i.i455, label %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458 - -if55.i.i455: ; preds = %endif.i.i448 - %tmp59.i.i449 = zext i32 %radix.0.i415 to i64 ; [#uses=1] - %tmp61.i.i450 = mul i64 %value.0.i.i422, %tmp59.i.i449 ; [#uses=1] - %tmp64.i.i451 = zext i32 %tmp52.i.i446 to i64 ; [#uses=1] - %tmp65.i.i452 = add i64 %tmp61.i.i450, %tmp64.i.i451 ; [#uses=1] - %tmp70.i.i454 = add i32 %foreachkey.0.i.i424, 1 ; [#uses=1] - br label %foreachcond.i.i426 - -_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458: ; preds = %endif.i.i448, %else24.i.i440, %foreachcond.i.i426 - %negval.i456 = sub i64 0, %value.0.i.i422 ; [#uses=1] - %condtmp.0.i457 = select i1 %sign.2.i414, i64 %negval.i456, i64 %value.0.i.i422 ; [#uses=1] - %tmp288 = trunc i64 %condtmp.0.i457 to i32 ; [#uses=1] - br label %condend - -condend: ; preds = %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 - %condtmp.0 = phi i32 [ %tmp288, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit458 ], [ 0, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit548 ] ; [#uses=1] - %tmp290 = add i32 %tmp270, %condtmp.0 ; [#uses=1] - %.newclass_gc_alloc291 = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket11IPv4Address7__ClassZ) ; [#uses=4] - %.newclass_gc292 = bitcast i8* %.newclass_gc_alloc291 to %tango.net.Socket.IPv4Address* ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %vtbl293 = bitcast i8* %.newclass_gc_alloc291 to %tango.net.Socket.IPv4Address.__vtbl** ; <%tango.net.Socket.IPv4Address.__vtbl**> [#uses=1] - store %tango.net.Socket.IPv4Address.__vtbl* @_D5tango3net6Socket11IPv4Address6__vtblZ, %tango.net.Socket.IPv4Address.__vtbl** %vtbl293 - %monitor294 = getelementptr i8* %.newclass_gc_alloc291, i32 4 ; [#uses=1] - %10 = bitcast i8* %monitor294 to i8** ; [#uses=1] - store i8* null, i8** %10 - %tmp295 = getelementptr i8* %.newclass_gc_alloc291, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp295, i8* getelementptr (%tango.net.Socket.IPv4Address* bitcast (%22* @_D5tango3net6Socket11IPv4Address6__initZ to %tango.net.Socket.IPv4Address*), i32 0, i32 2, i32 0), i32 24, i32 1) - %insert = insertvalue %"byte[]" undef, i32 %tmp252, 0 ; <%"byte[]"> [#uses=1] - %insert327 = insertvalue %"byte[]" %insert, i8* %.gc_mem253, 1 ; <%"byte[]"> [#uses=1] - %tmp301 = call fastcc %tango.net.Socket.IPv4Address* @_D5tango3net6Socket11IPv4Address5_ctorMFAaiZC5tango3net6Socket11IPv4Address(%tango.net.Socket.IPv4Address* %.newclass_gc292, %"byte[]" %insert327, i32 %tmp290) ; <%tango.net.Socket.IPv4Address*> [#uses=1] - %tmp302 = bitcast %tango.net.Socket.IPv4Address* %tmp301 to %tango.net.Socket.Address* ; <%tango.net.Socket.Address*> [#uses=1] - br label %try - -try: ; preds = %condend, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit - %connect_to.0 = phi %tango.net.Socket.Address* [ %tmp46, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit ], [ %tmp147, %_D5tango4text7convert7Integer12__T5parseTaZ5parseFAakPkZl.exit635 ], [ %tmp302, %condend ] ; <%tango.net.Socket.Address*> [#uses=3] - %.newclass_gc_alloc304 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net13SocketConduit13SocketConduit7__ClassZ) - to label %postinvoke unwind label %landingpad ; [#uses=5] - -postinvoke: ; preds = %try - %.newclass_gc305 = bitcast i8* %.newclass_gc_alloc304 to %tango.net.SocketConduit.SocketConduit* ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %vtbl306 = bitcast i8* %.newclass_gc_alloc304 to %tango.net.SocketConduit.SocketConduit.__vtbl** ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=2] - store %tango.net.SocketConduit.SocketConduit.__vtbl* @_D5tango3net13SocketConduit13SocketConduit6__vtblZ, %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl306 - %monitor307 = getelementptr i8* %.newclass_gc_alloc304, i32 4 ; [#uses=1] - %11 = bitcast i8* %monitor307 to i8** ; [#uses=1] - store i8* null, i8** %11 - %tmp308 = getelementptr i8* %.newclass_gc_alloc304, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp308, i8* bitcast (%15** getelementptr (%tango.net.SocketConduit.SocketConduit* bitcast (%23* @_D5tango3net13SocketConduit13SocketConduit6__initZ to %tango.net.SocketConduit.SocketConduit*), i32 0, i32 2) to i8*), i32 40, i32 1) - %tmp1.i.i.i = getelementptr i8* %.newclass_gc_alloc304, i32 28 ; [#uses=1] - %12 = bitcast i8* %tmp1.i.i.i to %tango.net.Socket.Socket** ; <%tango.net.Socket.Socket**> [#uses=1] - %.newclass_gc_alloc.i.i.i374 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket6Socket7__ClassZ) - to label %.newclass_gc_alloc.i.i.i.noexc unwind label %landingpad ; [#uses=7] - -.newclass_gc_alloc.i.i.i.noexc: ; preds = %postinvoke - %.newclass_gc.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i374 to %tango.net.Socket.Socket* ; <%tango.net.Socket.Socket*> [#uses=2] - %vtbl.i.i.i = bitcast i8* %.newclass_gc_alloc.i.i.i374 to %tango.net.Socket.Socket.__vtbl** ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - store %tango.net.Socket.Socket.__vtbl* @_D5tango3net6Socket6Socket6__vtblZ, %tango.net.Socket.Socket.__vtbl** %vtbl.i.i.i - %monitor.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 4 ; [#uses=1] - %13 = bitcast i8* %monitor.i.i.i to i8** ; [#uses=1] - store i8* null, i8** %13 - %tmp2.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2.i.i.i, i8* bitcast (i32* getelementptr (%tango.net.Socket.Socket* bitcast (%25* @_D5tango3net6Socket6Socket6__initZ to %tango.net.Socket.Socket*), i32 0, i32 2) to i8*), i32 16, i32 1) - %tmp1.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 12 ; [#uses=1] - %14 = bitcast i8* %tmp1.i.i.i.i to i32* ; [#uses=1] - store i32 1, i32* %14 - %tmp4.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 16 ; [#uses=1] - %15 = bitcast i8* %tmp4.i.i.i.i to i32* ; [#uses=1] - store i32 2, i32* %15 - %tmp7.i.i.i.i = getelementptr i8* %.newclass_gc_alloc.i.i.i374, i32 20 ; [#uses=1] - %16 = bitcast i8* %tmp7.i.i.i.i to i32* ; [#uses=1] - store i32 6, i32* %16 - invoke fastcc void @_D5tango3net6Socket6Socket10initializeMFT5tango3net6Socket8socket_tZv(%tango.net.Socket.Socket* %.newclass_gc.i.i.i, i32 -1) - to label %_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit unwind label %landingpad - -_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit: ; preds = %.newclass_gc_alloc.i.i.i.noexc - store %tango.net.Socket.Socket* %.newclass_gc.i.i.i, %tango.net.Socket.Socket** %12 - %tmp316 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %vtbl306 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"sock.connect at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp316, i32 0, i32 18 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)**> [#uses=1] - %sock.connect = load %tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)** %"sock.connect at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.SocketConduit.SocketConduit*, %tango.net.Socket.Address*)*> [#uses=1] - %tmp320 = invoke fastcc %tango.net.SocketConduit.SocketConduit* %sock.connect(%tango.net.SocketConduit.SocketConduit* %.newclass_gc305, %tango.net.Socket.Address* %connect_to.0) - to label %postinvoke319 unwind label %landingpad ; <%tango.net.SocketConduit.SocketConduit*> [#uses=0] - -postinvoke319: ; preds = %_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit - %.tmp323 = bitcast %tango.net.Socket.Address* %connect_to.0 to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_delclass(%object.Object* %.tmp323) - ret %tango.net.SocketConduit.SocketConduit* %.newclass_gc305 - -landingpad: ; preds = %_D5tango3net13SocketConduit13SocketConduit5_ctorMFZC5tango3net13SocketConduit13SocketConduit.exit, %.newclass_gc_alloc.i.i.i.noexc, %postinvoke, %try - %17 = call i8* @llvm.eh.exception() ; [#uses=2] - %18 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %17, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] - %.tmp = bitcast %tango.net.Socket.Address* %connect_to.0 to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_delclass(%object.Object* %.tmp) - call void @_d_eh_resume_unwind(i8* %17) - unreachable -} - -define fastcc i1 @_D5tango3net3ftp9FtpClient13FTPConnection11isSupportedMFAaZb(%tango.net.ftp.FtpClient.FTPConnection* nocapture %.this_arg, %"byte[]" %command_arg) { -entry: - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] - %.len = load i32* %tmp2 ; [#uses=2] - %tmp3 = icmp eq i32 %.len, 0 ; [#uses=1] - br i1 %tmp3, label %if, label %endif - -if: ; preds = %entry - ret i1 true - -endif: ; preds = %entry - %tmp8 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 1 ; <%tango.net.ftp.FtpClient.FtpFeature**> [#uses=1] - %.ptr = load %tango.net.ftp.FtpClient.FtpFeature** %tmp8 ; <%tango.net.ftp.FtpClient.FtpFeature*> [#uses=2] - br label %foreachcond - -foreachcond: ; preds = %foreachnext, %endif - %foreachkey.0 = phi i32 [ 0, %endif ], [ %tmp24, %foreachnext ] ; [#uses=4] - %tmp10 = icmp ult i32 %foreachkey.0, %.len ; [#uses=1] - br i1 %tmp10, label %foreachbody, label %foreachend - -foreachbody: ; preds = %foreachcond - %tmp1231.0 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr, i32 %foreachkey.0, i32 0, i32 0 ; [#uses=1] - %tmp32 = load i32* %tmp1231.0 ; [#uses=3] - %tmp1231.1 = getelementptr %tango.net.ftp.FtpClient.FtpFeature* %.ptr, i32 %foreachkey.0, i32 0, i32 1 ; [#uses=1] - %tmp33 = load i8** %tmp1231.1, align 4 ; [#uses=1] - %s2_arg22.i = extractvalue %"byte[]" %command_arg, 0 ; [#uses=3] - %s2_arg23.i = extractvalue %"byte[]" %command_arg, 1 ; [#uses=1] - %tmp4.i = icmp ult i32 %s2_arg22.i, %tmp32 ; [#uses=1] - %len.0.i = select i1 %tmp4.i, i32 %s2_arg22.i, i32 %tmp32 ; [#uses=1] - %tmp11.i = tail call i32 @strncasecmp(i8* %tmp33, i8* %s2_arg23.i, i32 %len.0.i) ; [#uses=2] - %tmp20.i = sub i32 %tmp32, %s2_arg22.i ; [#uses=1] - %tmp13.i = icmp eq i32 %tmp11.i, 0 ; [#uses=1] - %tmp20.tmp11.i = select i1 %tmp13.i, i32 %tmp20.i, i32 %tmp11.i ; [#uses=1] - %tmp19 = icmp eq i32 %tmp20.tmp11.i, 0 ; [#uses=1] - br i1 %tmp19, label %if20, label %foreachnext - -if20: ; preds = %foreachbody - ret i1 true - -foreachnext: ; preds = %foreachbody - %tmp24 = add i32 %foreachkey.0, 1 ; [#uses=1] - br label %foreachcond - -foreachend: ; preds = %foreachcond - ret i1 false -} - -define fastcc i1 @_D5tango3net3ftp9FtpClient13FTPConnection12is_supportedMFAaZb(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg) { -entry: - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 5, i32 0 ; [#uses=1] - %.len = load i32* %tmp2 ; [#uses=1] - %tmp3 = icmp eq i32 %.len, 0 ; [#uses=1] - br i1 %tmp3, label %if, label %endif - -if: ; preds = %entry - ret i1 false - -endif: ; preds = %entry - %tmp5 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp6 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp5 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.isSupported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp6, i32 0, i32 41 ; [#uses=1] - %this.isSupported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.isSupported at vtbl", align 4 ; [#uses=1] - %tmp9 = tail call fastcc i1 %this.isSupported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg) ; [#uses=1] - ret i1 %tmp9 -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection17prepareDataSocketMFKC5tango3net13SocketConduit13SocketConduitZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit** nocapture %data_arg) { -entry: - %tv.i = alloca %tango.net.Socket.timeval, align 8 ; <%tango.net.Socket.timeval*> [#uses=2] - %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp20 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp25 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp53 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %tmp2 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 6, i32 0 ; [#uses=1] - %tmp3 = load i32* %tmp2 ; [#uses=1] - switch i32 %tmp3, label %default4 [ - i32 0, label %case - i32 1, label %switchend - ] - -default4: ; preds = %entry - %tmp6 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=1] - %tmp7 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp6 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp7, i32 0, i32 5 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] - call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 23, i8* getelementptr ([24 x i8]* @.str146, i32 0, i32 0) }) - br label %case - -case: ; preds = %default4, %entry - %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket9SocketSet7__ClassZ) ; [#uses=8] - %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet* ; <%tango.net.Socket.SocketSet*> [#uses=3] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet.__vtbl** ; <%tango.net.Socket.SocketSet.__vtbl**> [#uses=3] - store %tango.net.Socket.SocketSet.__vtbl* @_D5tango3net6Socket9SocketSet6__vtblZ, %tango.net.Socket.SocketSet.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp9 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp9, i8* bitcast (i32* getelementptr (%tango.net.Socket.SocketSet* bitcast (%24* @_D5tango3net6Socket9SocketSet6__initZ to %tango.net.Socket.SocketSet*), i32 0, i32 2) to i8*), i32 16, i32 1) - %1 = bitcast i8* %tmp9 to i32* ; [#uses=2] - store i32 128, i32* %1 - %tmp9.i.i = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] - %2 = bitcast i8* %tmp9.i.i to i8** ; [#uses=1] - %.gc_mem.i.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ag6__initZ, i32 128) ; [#uses=1] - store i8* %.gc_mem.i.i, i8** %2 - %tmp14.i.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] - %3 = bitcast i8* %tmp14.i.i to i32* ; [#uses=1] - %tmp17.i.i = load i32* %1 ; [#uses=1] - %tmp18.i.i = shl i32 %tmp17.i.i, 3 ; [#uses=1] - store i32 %tmp18.i.i, i32* %3 - invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) - to label %postinvoke unwind label %landingpad - -postinvoke: ; preds = %case - %tmp17 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp18 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp17 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.timeout at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp18, i32 0, i32 10 ; [#uses=1] - %this.timeout = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.timeout(%tango.time.Time.Time* noalias nocapture sret %.rettmp20, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - to label %postinvoke21 unwind label %landingpad - -postinvoke21: ; preds = %postinvoke - %.rettmp20.0 = getelementptr %tango.time.Time.Time* %.rettmp20, i32 0, i32 0 ; [#uses=1] - %tmp = load i64* %.rettmp20.0, align 8 ; [#uses=1] - %tmp1.i = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] - %tmp3.i = load i64* %tmp1.i, align 8 ; [#uses=1] - invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp25) - to label %postinvoke26 unwind label %landingpad - -whilebody: ; preds = %postinvoke26 - %tmp32 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] - %"set.reset at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp32, i32 0, i32 10 ; [#uses=1] - %set.reset = load void (%tango.net.Socket.SocketSet*)** %"set.reset at vtbl", align 4 ; [#uses=1] - invoke fastcc void %set.reset(%tango.net.Socket.SocketSet* %.newclass_gc) - to label %postinvoke34 unwind label %landingpad - -postinvoke26: ; preds = %postinvoke21 - %tmp5.i = add i64 %tmp3.i, %tmp ; [#uses=1] - %tmp1.i133 = getelementptr %tango.time.Time.Time* %.rettmp25, i32 0, i32 0 ; [#uses=1] - %tmp3.i135 = load i64* %tmp1.i133, align 8 ; [#uses=1] - %tmp5.i137 = icmp slt i64 %tmp3.i135, %tmp5.i ; [#uses=1] - br i1 %tmp5.i137, label %whilebody, label %endwhile - -postinvoke34: ; preds = %whilebody - %tmp37 = load %tango.net.Socket.SocketSet.__vtbl** %vtbl ; <%tango.net.Socket.SocketSet.__vtbl*> [#uses=1] - %"set.add at vtbl" = getelementptr %tango.net.Socket.SocketSet.__vtbl* %tmp37, i32 0, i32 12 ; [#uses=1] - %set.add = load void (%tango.net.Socket.SocketSet*, %tango.net.Socket.Socket*)** %"set.add at vtbl", align 4 ; [#uses=1] - %tmp39 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp40 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp39, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp41 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp40 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"data.socket at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp41, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %data.socket = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp44 = invoke fastcc %tango.net.Socket.Socket* %data.socket(%tango.net.SocketConduit.SocketConduit* %tmp39) - to label %postinvoke43 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] - -postinvoke43: ; preds = %postinvoke34 - invoke fastcc void %set.add(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.Socket* %tmp44) - to label %postinvoke45 unwind label %landingpad - -postinvoke45: ; preds = %postinvoke43 - %tmp49 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp17 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.timeout at vtbl50" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp49, i32 0, i32 10 ; [#uses=1] - %this.timeout52 = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl50", align 4 ; [#uses=1] - invoke fastcc void %this.timeout52(%tango.time.Time.Time* noalias nocapture sret %.rettmp53, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - to label %postinvoke54 unwind label %landingpad - -postinvoke54: ; preds = %postinvoke45 - %.rettmp53.0 = getelementptr %tango.time.Time.Time* %.rettmp53, i32 0, i32 0 ; [#uses=1] - %tmp150 = load i64* %.rettmp53.0, align 8 ; [#uses=2] - %tmp3.i.i.i = sdiv i64 %tmp150, 10000000 ; [#uses=1] - %tmp3.i14.i.i = sdiv i64 %tmp150, 10 ; [#uses=1] - %tmp6.i.i = trunc i64 %tmp3.i14.i.i to i32 ; [#uses=1] - %tmp7.i.i = urem i32 %tmp6.i.i, 1000000 ; [#uses=1] - %tmp7.i = bitcast %tango.net.Socket.timeval* %tv.i to i64* ; [#uses=1] - %4 = shl i64 %tmp3.i.i.i, 32 ; [#uses=1] - %5 = zext i32 %tmp7.i.i to i64 ; [#uses=1] - %6 = or i64 %5, %4 ; [#uses=1] - store i64 %6, i64* %tmp7.i, align 8 - %tmp5.i141142 = invoke fastcc i32 @_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetPS5tango3net6Socket7timevalZi(%tango.net.Socket.SocketSet* %.newclass_gc, %tango.net.Socket.SocketSet* null, %tango.net.Socket.SocketSet* null, %tango.net.Socket.timeval* %tv.i) - to label %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit unwind label %landingpad ; [#uses=1] - -_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit: ; preds = %postinvoke54 - switch i32 %tmp5.i141142, label %endif [ - i32 -1, label %endwhile - i32 0, label %endwhile - ] - -endif: ; preds = %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit - %tmp61 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp62 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp61, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp63 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp62 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"data.socket at vtbl64" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp63, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %data.socket66 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl64", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp68 = invoke fastcc %tango.net.Socket.Socket* %data.socket66(%tango.net.SocketConduit.SocketConduit* %tmp61) - to label %postinvoke67 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=2] - -postinvoke67: ; preds = %endif - %tmp69 = getelementptr %tango.net.Socket.Socket* %tmp68, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - %tmp70 = load %tango.net.Socket.Socket.__vtbl** %tmp69 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] - %"data.socket().accept at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp70, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*)**> [#uses=1] - %"data.socket().accept" = load %tango.net.Socket.Socket* (%tango.net.Socket.Socket*)** %"data.socket().accept at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*)*> [#uses=1] - %tmp73 = invoke fastcc %tango.net.Socket.Socket* %"data.socket().accept"(%tango.net.Socket.Socket* %tmp68) - to label %endwhile unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] - -endwhile: ; preds = %postinvoke67, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit, %postinvoke26 - %new_data.0 = phi %tango.net.Socket.Socket* [ null, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit ], [ null, %postinvoke26 ], [ null, %_D5tango3net6Socket6Socket6selectFC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetC5tango3net6Socket9SocketSetS5tango4time4Time8TimeSpanZi.exit ], [ %tmp73, %postinvoke67 ] ; <%tango.net.Socket.Socket*> [#uses=2] - %tmp76 = icmp eq %tango.net.Socket.Socket* %new_data.0, null ; [#uses=1] - br i1 %tmp76, label %if77, label %endif78 - -if77: ; preds = %endwhile - %.newclass_gc_alloc80 = invoke noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) - to label %postinvoke79 unwind label %landingpad ; [#uses=6] - -postinvoke79: ; preds = %if77 - %vtbl82 = bitcast i8* %.newclass_gc_alloc80 to %tango.net.ftp.FtpClient.FtpException.__vtbl** ; <%tango.net.ftp.FtpClient.FtpException.__vtbl**> [#uses=1] - store %tango.net.ftp.FtpClient.FtpException.__vtbl* @_D5tango3net3ftp9FtpClient12FtpException6__vtblZ, %tango.net.ftp.FtpClient.FtpException.__vtbl** %vtbl82 - %monitor83 = getelementptr i8* %.newclass_gc_alloc80, i32 4 ; [#uses=1] - %7 = bitcast i8* %monitor83 to i8** ; [#uses=1] - store i8* null, i8** %7 - %tmp84 = getelementptr i8* %.newclass_gc_alloc80, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp84, i8* bitcast (%"byte[]"* getelementptr (%tango.net.ftp.FtpClient.FtpException* @_D5tango3net3ftp9FtpClient12FtpException6__initZ, i32 0, i32 2) to i8*), i32 31, i32 1) - %tmp2.i143 = getelementptr i8* %.newclass_gc_alloc80, i32 36 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp2.i143, i8* getelementptr ([4 x i8]* @.str148, i32 0, i32 0), i32 3, i32 1) - %tmp5.i144 = bitcast i8* %.newclass_gc_alloc80 to %object.Exception* ; <%object.Exception*> [#uses=1] - %tmp7.i145146 = invoke fastcc %object.Exception* @_D6object9Exception5_ctorMFAaC9ExceptionZC9Exception(%object.Exception* %tmp5.i144, %"byte[]" { i32 33, i8* getelementptr ([34 x i8]* @.str147, i32 0, i32 0) }, %object.Exception* null) - to label %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit unwind label %landingpad ; <%object.Exception*> [#uses=0] - -_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit: ; preds = %postinvoke79 - %tmp90 = bitcast i8* %.newclass_gc_alloc80 to %object.Object* ; <%object.Object*> [#uses=1] - invoke void @_d_throw_exception(%object.Object* %tmp90) - to label %postinvoke91 unwind label %landingpad - -postinvoke91: ; preds = %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit - unreachable - -endif78: ; preds = %endwhile - %tmp92 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp93 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp92, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp94 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp93 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"data.socket at vtbl95" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp94, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %data.socket97 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl95", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp99 = invoke fastcc %tango.net.Socket.Socket* %data.socket97(%tango.net.SocketConduit.SocketConduit* %tmp92) - to label %postinvoke98 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=2] - -postinvoke98: ; preds = %endif78 - %tmp100 = getelementptr %tango.net.Socket.Socket* %tmp99, i32 0, i32 0 ; <%tango.net.Socket.Socket.__vtbl**> [#uses=1] - %tmp101 = load %tango.net.Socket.Socket.__vtbl** %tmp100 ; <%tango.net.Socket.Socket.__vtbl*> [#uses=1] - %"data.socket().shutdown at vtbl" = getelementptr %tango.net.Socket.Socket.__vtbl* %tmp101, i32 0, i32 16 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)**> [#uses=1] - %"data.socket().shutdown" = load %tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)** %"data.socket().shutdown at vtbl", align 4 ; <%tango.net.Socket.Socket* (%tango.net.Socket.Socket*, i32)*> [#uses=1] - %tmp104 = invoke fastcc %tango.net.Socket.Socket* %"data.socket().shutdown"(%tango.net.Socket.Socket* %tmp99, i32 2) - to label %postinvoke103 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=0] - -postinvoke103: ; preds = %postinvoke98 - %tmp105 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp106 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp105, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp107 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp106 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"data.detach at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp107, i32 0, i32 8 ; [#uses=1] - %data.detach = load void (%tango.net.SocketConduit.SocketConduit*)** %"data.detach at vtbl", align 4 ; [#uses=1] - invoke fastcc void %data.detach(%tango.net.SocketConduit.SocketConduit* %tmp105) - to label %postinvoke109 unwind label %landingpad - -postinvoke109: ; preds = %postinvoke103 - %tmp110 = load %tango.net.SocketConduit.SocketConduit** %data_arg ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp111 = getelementptr %tango.net.SocketConduit.SocketConduit* %tmp110, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp112 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp111 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"data.socket at vtbl113" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp112, i32 0, i32 14 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)**> [#uses=1] - %data.socket115 = load %tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)** %"data.socket at vtbl113", align 4 ; <%tango.net.Socket.Socket* (%tango.net.SocketConduit.SocketConduit*)*> [#uses=1] - %tmp117 = invoke fastcc %tango.net.Socket.Socket* %data.socket115(%tango.net.SocketConduit.SocketConduit* %tmp110) - to label %postinvoke116 unwind label %landingpad ; <%tango.net.Socket.Socket*> [#uses=1] - -postinvoke116: ; preds = %postinvoke109 - %tmp118 = getelementptr %tango.net.Socket.Socket* %tmp117, i32 0, i32 2 ; [#uses=1] - %tmp120 = getelementptr %tango.net.Socket.Socket* %new_data.0, i32 0, i32 2 ; [#uses=1] - %tmp121 = load i32* %tmp120 ; [#uses=1] - store i32 %tmp121, i32* %tmp118 - %.tmp123 = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_delclass(%object.Object* %.tmp123) - ret void - -landingpad: ; preds = %postinvoke109, %postinvoke103, %postinvoke98, %endif78, %_D5tango3net3ftp9FtpClient12FtpException5_ctorMFAaG3aZC5tango3net3ftp9FtpClient12FtpException.exit, %postinvoke79, %if77, %postinvoke67, %endif, %postinvoke54, %postinvoke45, %postinvoke43, %postinvoke34, %whilebody, %postinvoke21, %postinvoke, %case - %8 = call i8* @llvm.eh.exception() ; [#uses=2] - %9 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %8, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] - %.tmp = bitcast i8* %.newclass_gc_alloc to %object.Object* ; <%object.Object*> [#uses=1] - call void @_d_delclass(%object.Object* %.tmp) - call void @_d_eh_resume_unwind(i8* %8) - unreachable - -switchend: ; preds = %entry - ret void -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection17finishDataCommandMFC5tango3net13SocketConduit13SocketConduitZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data_arg) { -entry: - %r = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = bitcast %tango.net.SocketConduit.SocketConduit* %data_arg to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] - %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %data_arg to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] - %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] - %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] - %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] - call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp1) - %tmp3 = getelementptr %tango.net.SocketConduit.SocketConduit* %data_arg, i32 0, i32 0 ; <%tango.net.SocketConduit.SocketConduit.__vtbl**> [#uses=1] - %tmp4 = load %tango.net.SocketConduit.SocketConduit.__vtbl** %tmp3 ; <%tango.net.SocketConduit.SocketConduit.__vtbl*> [#uses=1] - %"data.detach at vtbl" = getelementptr %tango.net.SocketConduit.SocketConduit.__vtbl* %tmp4, i32 0, i32 8 ; [#uses=1] - %data.detach = load void (%tango.net.SocketConduit.SocketConduit*)** %"data.detach at vtbl", align 4 ; [#uses=1] - call fastcc void %data.detach(%tango.net.SocketConduit.SocketConduit* %data_arg) - %tmp7 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=2] - %tmp8 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp7 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp8, i32 0, i32 37 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] - call fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - %tmp10 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %r, i32 0, i32 0, i32 0 ; [#uses=3] - %tmp11 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp10, i8* %tmp11, i32 12, i32 4) - %tmp14 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp10, 1 ; <%"byte[]"> [#uses=1] - %tmp15 = call i32 @_adEq(%"byte[]" %tmp14, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str149, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp16 = icmp eq i32 %tmp15, 0 ; [#uses=1] - br i1 %tmp16, label %oror, label %endif - -oror: ; preds = %entry - %tmp19 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp10, 1 ; <%"byte[]"> [#uses=1] - %tmp20 = call i32 @_adEq(%"byte[]" %tmp19, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str150, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly ; [#uses=1] - %tmp21 = icmp eq i32 %tmp20, 0 ; [#uses=1] - br i1 %tmp21, label %if, label %endif - -if: ; preds = %oror - %tmp24 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp7 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp24, i32 0, i32 5 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.exception at vtbl", align 4 ; [#uses=1] - call fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 10, i8* getelementptr ([11 x i8]* @.str151, i32 0, i32 0) }) - ret void - -endif: ; preds = %oror, %entry - ret void -} - -define fastcc %tango.net.SocketConduit.SocketConduit* @_D5tango3net3ftp9FtpClient13FTPConnection18processDataCommandMFAaAAaXC5tango3net13SocketConduit13SocketConduit(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg, %"char[][]" %parameters_arg) { -entry: - %data = alloca %tango.net.SocketConduit.SocketConduit*, align 4 ; <%tango.net.SocketConduit.SocketConduit**> [#uses=4] - %response = alloca %tango.net.ftp.FtpClient.FtpResponse, align 4 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpResponse, align 8 ; <%tango.net.ftp.FtpClient.FtpResponse*> [#uses=2] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=5] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.getDataSocket at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 39 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)**> [#uses=1] - %this.getDataSocket = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)** %"this.getDataSocket at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*)*> [#uses=1] - %tmp4 = call fastcc %tango.net.SocketConduit.SocketConduit* %this.getDataSocket(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg) ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - store %tango.net.SocketConduit.SocketConduit* %tmp4, %tango.net.SocketConduit.SocketConduit** %data - %tmp10 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp10, i32 0, i32 35 ; [#uses=1] - %this.sendCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.sendCommand at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.sendCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %command_arg, %"char[][]" %parameters_arg) - to label %postinvoke unwind label %landingpad - -postinvoke: ; preds = %entry - %tmp16 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readResponse at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp16, i32 0, i32 37 ; [#uses=1] - %this.readResponse = load void (%tango.net.ftp.FtpClient.FtpResponse*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.readResponse at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.readResponse(%tango.net.ftp.FtpClient.FtpResponse* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - to label %postinvoke18 unwind label %landingpad - -postinvoke18: ; preds = %postinvoke - %tmp19 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %response, i32 0, i32 0, i32 0 ; [#uses=3] - %tmp20 = getelementptr %tango.net.ftp.FtpClient.FtpResponse* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp19, i8* %tmp20, i32 12, i32 4) - %tmp23 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp19, 1 ; <%"byte[]"> [#uses=1] - %tmp25 = invoke i32 @_adEq(%"byte[]" %tmp23, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str152, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly - to label %postinvoke24 unwind label %landingpad ; [#uses=1] - -postinvoke24: ; preds = %postinvoke18 - %tmp26 = icmp eq i32 %tmp25, 0 ; [#uses=1] - br i1 %tmp26, label %andand, label %endif - -andand: ; preds = %postinvoke24 - %tmp30 = insertvalue %"byte[]" { i32 3, i8* undef }, i8* %tmp19, 1 ; <%"byte[]"> [#uses=1] - %tmp32 = invoke i32 @_adEq(%"byte[]" %tmp30, %"byte[]" { i32 3, i8* getelementptr ([4 x i8]* @.str153, i32 0, i32 0) }, %object.TypeInfo* @_D11TypeInfo_Aa6__initZ) readonly - to label %postinvoke31 unwind label %landingpad ; [#uses=1] - -postinvoke31: ; preds = %andand - %tmp33 = icmp eq i32 %tmp32, 0 ; [#uses=1] - br i1 %tmp33, label %if, label %endif - -if: ; preds = %postinvoke31 - %tmp37 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.exception at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp37, i32 0, i32 14 ; [#uses=1] - %this.exception = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.ftp.FtpClient.FtpResponse*)** %"this.exception at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.exception(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.ftp.FtpClient.FtpResponse* byval %response) - to label %endif unwind label %landingpad - -endif: ; preds = %if, %postinvoke31, %postinvoke24 - %tmp42 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.prepareDataSocket at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp42, i32 0, i32 43 ; [#uses=1] - %this.prepareDataSocket = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit**)** %"this.prepareDataSocket at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.prepareDataSocket(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit** %data) - to label %postinvoke44 unwind label %landingpad - -postinvoke44: ; preds = %endif - %tmp45 = load %tango.net.SocketConduit.SocketConduit** %data ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - ret %tango.net.SocketConduit.SocketConduit* %tmp45 - -landingpad: ; preds = %endif, %if, %andand, %postinvoke18, %postinvoke, %entry - %0 = call i8* @llvm.eh.exception() ; [#uses=3] - %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D6Object7__ClassZ) ; [#uses=1] - %cond = icmp eq i32 %1, 1 ; [#uses=1] - br i1 %cond, label %catch, label %switchdefault - -catch: ; preds = %landingpad - %2 = bitcast i8* %0 to %object.Object* ; <%object.Object*> [#uses=1] - %tmp5 = load %tango.net.SocketConduit.SocketConduit** %data ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %tmp6 = bitcast %tango.net.SocketConduit.SocketConduit* %tmp5 to %tango.io.device.Conduit.Conduit* ; <%tango.io.device.Conduit.Conduit*> [#uses=1] - %tmp1.i = bitcast %tango.net.SocketConduit.SocketConduit* %tmp5 to %tango.io.device.Conduit.Conduit.__vtbl** ; <%tango.io.device.Conduit.Conduit.__vtbl**> [#uses=1] - %tmp2.i = load %tango.io.device.Conduit.Conduit.__vtbl** %tmp1.i ; <%tango.io.device.Conduit.Conduit.__vtbl*> [#uses=1] - %"this.detach at vtbl.i" = getelementptr %tango.io.device.Conduit.Conduit.__vtbl* %tmp2.i, i32 0, i32 8 ; [#uses=1] - %this.detach.i = load void (%tango.io.device.Conduit.Conduit*)** %"this.detach at vtbl.i", align 4 ; [#uses=1] - call fastcc void %this.detach.i(%tango.io.device.Conduit.Conduit* %tmp6) - call void @_d_throw_exception(%object.Object* %2) - unreachable - -switchdefault: ; preds = %landingpad - call void @_d_eh_resume_unwind(i8* %0) - unreachable -} - -define fastcc %"FtpFileInfo[]" @_D5tango3net3ftp9FtpClient13FTPConnection2lsMFAaZAS5tango3net3ftp9FtpClient11FtpFileInfo(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %path_arg) { -entry: - %.frame.i = alloca %nest.splitLines, align 8 ; <%nest.splitLines*> [#uses=5] - %.rettmp.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] - %.rettmp8.i = alloca %"tango.text.Util.LineFruct!(char).LineFruct", align 8 ; <%"tango.text.Util.LineFruct!(char).LineFruct"*> [#uses=3] - %__arrayArg146 = alloca [1 x %"byte[]"], align 8 ; <[1 x %"byte[]"]*> [#uses=1] - %.rettmp = alloca %tango.net.ftp.FtpClient.FtpFileInfo, align 8 ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] - %path_arg207 = extractvalue %"byte[]" %path_arg, 0 ; [#uses=4] - %path_arg208 = extractvalue %"byte[]" %path_arg, 1 ; [#uses=3] - %tmp1 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=7] - %tmp2 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.isSupported at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp2, i32 0, i32 41 ; [#uses=1] - %this.isSupported = load i1 (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.isSupported at vtbl", align 4 ; [#uses=1] - %tmp4 = call fastcc i1 %this.isSupported(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str154, i32 0, i32 0) }) ; [#uses=1] - br i1 %tmp4, label %if, label %endif - -if: ; preds = %entry - %tmp6 = icmp eq i32 %path_arg207, 0 ; [#uses=1] - %tmp11 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.processDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp11, i32 0, i32 45 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")**> [#uses=1] - %this.processDataCommand = load %tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")** %"this.processDataCommand at vtbl", align 4 ; <%tango.net.SocketConduit.SocketConduit* (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]", %"char[][]")*> [#uses=2] - br i1 %tmp6, label %else, label %if7 - -if7: ; preds = %if - %tmp13 = getelementptr [1 x %"byte[]"]* %__arrayArg146, i32 0, i32 0 ; <%"byte[]"*> [#uses=2] - %insert204 = insertvalue %"byte[]" undef, i32 %path_arg207, 0 ; <%"byte[]"> [#uses=1] - %insert206 = insertvalue %"byte[]" %insert204, i8* %path_arg208, 1 ; <%"byte[]"> [#uses=1] - store %"byte[]" %insert206, %"byte[]"* %tmp13, align 8 - %tmp16 = insertvalue %"char[][]" { i32 1, %"byte[]"* undef }, %"byte[]"* %tmp13, 1 ; <%"char[][]"> [#uses=1] - %tmp17 = invoke fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str155, i32 0, i32 0) }, %"char[][]" %tmp16) - to label %endif unwind label %landingpad ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - -else: ; preds = %if - %tmp25 = invoke fastcc %tango.net.SocketConduit.SocketConduit* %this.processDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" { i32 4, i8* getelementptr ([5 x i8]* @.str156, i32 0, i32 0) }, %"char[][]" zeroinitializer) - to label %endif unwind label %landingpad ; <%tango.net.SocketConduit.SocketConduit*> [#uses=1] - -landingpad: ; preds = %else, %if7 - %0 = call i8* @llvm.eh.exception() ; [#uses=2] - %1 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %0, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ) ; [#uses=1] - %cond149 = icmp eq i32 %1, 1 ; [#uses=1] - br i1 %cond149, label %endif, label %switchdefault - -switchdefault: ; preds = %landingpad - call void @_d_eh_resume_unwind(i8* %0) - unreachable - -endif: ; preds = %landingpad, %else, %if7, %entry - %data.0 = phi %tango.net.SocketConduit.SocketConduit* [ null, %entry ], [ %tmp17, %if7 ], [ %tmp25, %else ], [ null, %landingpad ] ; <%tango.net.SocketConduit.SocketConduit*> [#uses=2] - %mlsd_success.0 = phi i1 [ false, %entry ], [ true, %if7 ], [ true, %else ], [ false, %landingpad ] ; [#uses=1] - br i1 %mlsd_success.0, label %if27, label %else29 - -if27: ; preds = %endif - %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango2io6device5Array5Array7__ClassZ) ; [#uses=9] - %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Array.Array* ; <%tango.io.device.Array.Array*> [#uses=1] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.io.device.Array.Array.__vtbl** ; <%tango.io.device.Array.Array.__vtbl**> [#uses=2] - store %tango.io.device.Array.Array.__vtbl* @_D5tango2io6device5Array5Array6__vtblZ, %tango.io.device.Array.Array.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %2 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %2 - %tmp30 = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=1] - call void @llvm.memcpy.i32(i8* %tmp30, i8* bitcast (%4** getelementptr (%tango.io.device.Array.Array* bitcast (%26* @_D5tango2io6device5Array5Array6__initZ to %tango.io.device.Array.Array*), i32 0, i32 2) to i8*), i32 44, i32 1) - %tmp2.i = load %tango.io.device.Array.Array.__vtbl** %vtbl ; <%tango.io.device.Array.Array.__vtbl*> [#uses=1] - %"this.assign at vtbl.i" = getelementptr %tango.io.device.Array.Array.__vtbl* %tmp2.i, i32 0, i32 15 ; <%tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)**> [#uses=1] - %this.assign.i = load %tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)** %"this.assign at vtbl.i", align 4 ; <%tango.io.device.Array.Array* (%tango.io.device.Array.Array*, %"byte[]", i32)*> [#uses=1] - %.gc_mem.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ah6__initZ, i32 256) ; [#uses=1] - %tmp5.i = insertvalue %"byte[]" undef, i32 256, 0 ; <%"byte[]"> [#uses=1] - %tmp6.i = insertvalue %"byte[]" %tmp5.i, i8* %.gc_mem.i, 1 ; <%"byte[]"> [#uses=1] - %tmp7.i = call fastcc %tango.io.device.Array.Array* %this.assign.i(%tango.io.device.Array.Array* %.newclass_gc, %"byte[]" %tmp6.i, i32 0) ; <%tango.io.device.Array.Array*> [#uses=0] - %tmp9.i = getelementptr i8* %.newclass_gc_alloc, i32 36 ; [#uses=1] - %3 = bitcast i8* %tmp9.i to i32* ; [#uses=1] - store i32 65536, i32* %3 - %tmp37 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.readStream at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp37, i32 0, i32 47 ; [#uses=1] - %this.readStream = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*, %tango.io.model.IConduit.OutputStream*, %"void delegate(uint pos)")** %"this.readStream at vtbl", align 4 ; [#uses=1] - %tmp41 = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] - %tmp42 = bitcast i8* %tmp41 to %tango.io.model.IConduit.OutputStream* ; <%tango.io.model.IConduit.OutputStream*> [#uses=1] - call fastcc void %this.readStream(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data.0, %tango.io.model.IConduit.OutputStream* %tmp42, %"void delegate(uint pos)" zeroinitializer) - %tmp45 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.finishDataCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp45, i32 0, i32 44 ; [#uses=1] - %this.finishDataCommand = load void (%tango.net.ftp.FtpClient.FTPConnection*, %tango.net.SocketConduit.SocketConduit*)** %"this.finishDataCommand at vtbl", align 4 ; [#uses=1] - call fastcc void %this.finishDataCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data.0) - %tmp2.i209 = getelementptr i8* %.newclass_gc_alloc, i32 20 ; [#uses=1] - %4 = bitcast i8* %tmp2.i209 to i8** ; [#uses=1] - %.ptr.i = load i8** %4 ; [#uses=1] - %tmp4.i = getelementptr i8* %.newclass_gc_alloc, i32 24 ; [#uses=1] - %5 = bitcast i8* %tmp4.i to i32* ; [#uses=1] - %tmp6.i210 = getelementptr i8* %.newclass_gc_alloc, i32 28 ; [#uses=1] - %6 = bitcast i8* %tmp6.i210 to i32* ; [#uses=1] - %tmp7.i211 = load i32* %5 ; [#uses=2] - %tmp8.i = load i32* %6 ; [#uses=1] - %tmp9.i212 = getelementptr i8* %.ptr.i, i32 %tmp7.i211 ; [#uses=2] - %tmp10.i = sub i32 %tmp8.i, %tmp7.i211 ; [#uses=2] - %count.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 0 ; [#uses=3] - %result.i = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1 ; <%"char[][]"*> [#uses=1] - store i32 0, i32* %count.i, align 8 - %7 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 0 ; [#uses=1] - store i32 %tmp10.i, i32* %7, align 8 - %.sret_arg10.1.i.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, i32 0, i32 0, i32 1 ; [#uses=1] - store i8* %tmp9.i212, i8** %.sret_arg10.1.i.i, align 4 - %tmp1.i213 = bitcast %nest.splitLines* %.frame.i to i8* ; [#uses=2] - %tmp2.i214 = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i213, 0 ; <%"int delegate(ref char[])"> [#uses=1] - %.func.i = insertvalue %"int delegate(ref char[])" %tmp2.i214, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody41MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] - %tmp3.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp.i, %"int delegate(ref char[])" %.func.i) ; [#uses=0] - %tmp4.i215 = load i32* %count.i, align 8 ; [#uses=2] - %.gc_mem.i216 = call noalias i8* @_d_newarrayT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D12TypeInfo_AAa6__initZ to %object.TypeInfo*), i32 %tmp4.i215) ; [#uses=1] - %.gc_mem5.i = bitcast i8* %.gc_mem.i216 to %"byte[]"* ; <%"byte[]"*> [#uses=1] - %tmp6.i217 = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 0 ; [#uses=1] - store i32 %tmp4.i215, i32* %tmp6.i217 - %tmp7.i218 = getelementptr %nest.splitLines* %.frame.i, i32 0, i32 1, i32 1 ; <%"byte[]"**> [#uses=1] - store %"byte[]"* %.gc_mem5.i, %"byte[]"** %tmp7.i218 - store i32 0, i32* %count.i, align 8 - %8 = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 0 ; [#uses=1] - store i32 %tmp10.i, i32* %8, align 8 - %.sret_arg10.1.i17.i = getelementptr %"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, i32 0, i32 0, i32 1 ; [#uses=1] - store i8* %tmp9.i212, i8** %.sret_arg10.1.i17.i, align 4 - %tmp11.i219 = insertvalue %"int delegate(ref char[])" undef, i8* %tmp1.i213, 0 ; <%"int delegate(ref char[])"> [#uses=1] - %.func12.i = insertvalue %"int delegate(ref char[])" %tmp11.i219, i32 (i8*, %"byte[]"*)* @_D5tango4text4Util18__T10splitLinesTaZ10splitLinesFAaZAAa15__foreachbody42MFKAaZi, 1 ; <%"int delegate(ref char[])"> [#uses=1] - %tmp13.i = call fastcc i32 @_D5tango4text4Util16__T9LineFructTaZ9LineFruct7opApplyMFDFKAaZiZi(%"tango.text.Util.LineFruct!(char).LineFruct"* %.rettmp8.i, %"int delegate(ref char[])" %.func12.i) ; [#uses=0] - %tmp14.i = load %"char[][]"* %result.i ; <%"char[][]"> [#uses=2] - %tmp53189 = extractvalue %"char[][]" %tmp14.i, 0 ; [#uses=5] - %tmp53190 = extractvalue %"char[][]" %tmp14.i, 1 ; <%"byte[]"*> [#uses=5] - br label %foreachcond - -foreachcond: ; preds = %foreachnext, %if27 - %dir.1.1 = phi %tango.net.ftp.FtpClient.FtpFileInfo* [ null, %if27 ], [ %dir.1.0, %foreachnext ] ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=4] - %dir.0.1 = phi i32 [ 0, %if27 ], [ %dir.0.0, %foreachnext ] ; [#uses=14] - %foreachkey.0 = phi i32 [ 0, %if27 ], [ %tmp127, %foreachnext ] ; [#uses=3] - %tmp65 = icmp ult i32 %foreachkey.0, %tmp53189 ; [#uses=1] - br i1 %tmp65, label %foreachbody, label %foreachend - -foreachbody: ; preds = %foreachcond - %tmp67 = getelementptr %"byte[]"* %tmp53190, i32 %foreachkey.0 ; <%"byte[]"*> [#uses=1] - %tmp68 = load %"byte[]"* %tmp67 ; <%"byte[]"> [#uses=2] - %tmp68187 = extractvalue %"byte[]" %tmp68, 0 ; [#uses=2] - %tmp71 = icmp eq i32 %tmp68187, 0 ; [#uses=1] - br i1 %tmp71, label %foreachnext, label %try74 - -try74: ; preds = %foreachbody - %tmp68188 = extractvalue %"byte[]" %tmp68, 1 ; [#uses=1] - %tmp99 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.parseMlstLine at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp99, i32 0, i32 51 ; [#uses=1] - %this.parseMlstLine = load void (%tango.net.ftp.FtpClient.FtpFileInfo*, %tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.parseMlstLine at vtbl", align 4 ; [#uses=1] - %insert = insertvalue %"byte[]" undef, i32 %tmp68187, 0 ; <%"byte[]"> [#uses=1] - %insert186 = insertvalue %"byte[]" %insert, i8* %tmp68188, 1 ; <%"byte[]"> [#uses=1] - invoke fastcc void %this.parseMlstLine(%tango.net.ftp.FtpClient.FtpFileInfo* noalias nocapture sret %.rettmp, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert186) - to label %postinvoke102 unwind label %landingpad75 - -postinvoke102: ; preds = %try74 - %.rettmp179.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 0, i32 0 ; [#uses=1] - %tmp180 = load i32* %.rettmp179.0, align 8 ; [#uses=2] - %.rettmp179.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 0, i32 1 ; [#uses=1] - %tmp181 = load i8** %.rettmp179.1, align 4 ; [#uses=1] - %.rettmp.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 1 ; [#uses=1] - %tmp162 = load i32* %.rettmp.1, align 8 ; [#uses=1] - %.rettmp.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 2 ; [#uses=1] - %tmp163 = load i64* %.rettmp.2, align 4 ; [#uses=1] - %.rettmp.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 3, i32 0 ; [#uses=1] - %tmp177 = load i64* %.rettmp.3.0, align 4 ; [#uses=1] - %.rettmp.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 4, i32 0 ; [#uses=1] - %tmp175 = load i64* %.rettmp.4.0, align 4 ; [#uses=1] - %.rettmp.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 5, i32 0 ; [#uses=1] - %tmp171 = load i32* %.rettmp.5.0, align 4 ; [#uses=1] - %.rettmp.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 5, i32 1 ; [#uses=1] - %tmp172 = load i8** %.rettmp.5.1, align 4 ; [#uses=1] - %.rettmp.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.rettmp, i32 0, i32 6 ; [#uses=1] - %tmp170 = load i8** %.rettmp.6, align 4 ; [#uses=1] - %tmp108 = icmp eq i32 %tmp180, 0 ; [#uses=1] - br i1 %tmp108, label %foreachnext, label %if109 - -if109: ; preds = %postinvoke102 - %tmp113 = add i32 %dir.0.1, 1 ; [#uses=2] - %tmp118 = bitcast %tango.net.ftp.FtpClient.FtpFileInfo* %dir.1.1 to i8* ; [#uses=1] - %.gc_mem = invoke i8* @_d_arraysetlengthiT(%object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D48TypeInfo_AS5tango3net3ftp9FtpClient11FtpFileInfo6__initZ to %object.TypeInfo*), i32 %tmp113, i32 %dir.0.1, i8* %tmp118) - to label %postinvoke119 unwind label %landingpad75 ; [#uses=1] - -postinvoke119: ; preds = %if109 - %.gc_mem120 = bitcast i8* %.gc_mem to %tango.net.ftp.FtpClient.FtpFileInfo* ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=10] - %9 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 0, i32 0 ; [#uses=1] - store i32 %tmp180, i32* %9 - %tmp121182.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 0, i32 1 ; [#uses=1] - store i8* %tmp181, i8** %tmp121182.1, align 4 - %tmp121.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 1 ; [#uses=1] - store i32 %tmp162, i32* %tmp121.1, align 8 - %tmp121.2 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 2 ; [#uses=1] - store i64 %tmp163, i64* %tmp121.2, align 4 - %tmp121.3.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 3, i32 0 ; [#uses=1] - store i64 %tmp177, i64* %tmp121.3.0, align 4 - %tmp121.4.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 4, i32 0 ; [#uses=1] - store i64 %tmp175, i64* %tmp121.4.0, align 4 - %tmp121.5.0 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 5, i32 0 ; [#uses=1] - store i32 %tmp171, i32* %tmp121.5.0, align 4 - %tmp121.5.1 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 5, i32 1 ; [#uses=1] - store i8* %tmp172, i8** %tmp121.5.1, align 4 - %tmp121.6 = getelementptr %tango.net.ftp.FtpClient.FtpFileInfo* %.gc_mem120, i32 %dir.0.1, i32 6 ; [#uses=1] - store i8* %tmp170, i8** %tmp121.6, align 4 - br label %foreachnext - -landingpad75: ; preds = %if109, %try74 - %10 = call i8* @llvm.eh.exception() ; [#uses=2] - %11 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %10, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), %object.ClassInfo* @_D5tango3net3ftp9FtpClient12FtpException7__ClassZ, i32 0) ; [#uses=1] - %cond = icmp eq i32 %11, 1 ; [#uses=1] - br i1 %cond, label %catch77, label %switchdefault90 - -catch77: ; preds = %landingpad75 - %tmp80 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendListCommand at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp80, i32 0, i32 49 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")**> [#uses=1] - %this.sendListCommand = load %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.sendListCommand at vtbl", align 4 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*> [#uses=1] - %insert200 = insertvalue %"byte[]" undef, i32 %path_arg207, 0 ; <%"byte[]"> [#uses=1] - %insert202 = insertvalue %"byte[]" %insert200, i8* %path_arg208, 1 ; <%"byte[]"> [#uses=1] - %tmp84 = invoke fastcc %"FtpFileInfo[]" %this.sendListCommand(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert202) - to label %postinvoke83 unwind label %catch77.landingpad55_crit_edge ; <%"FtpFileInfo[]"> [#uses=1] - -catch77.landingpad55_crit_edge: ; preds = %catch77 - %.tmp.pre = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=1] - br label %landingpad55 - -postinvoke83: ; preds = %catch77 - %.tmp89 = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=1] - call void @_d_delarray(i32 %tmp53189, i8* %.tmp89) - ret %"FtpFileInfo[]" %tmp84 - -switchdefault90: ; preds = %landingpad75 - %.tmp95 = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=2] - invoke void @_d_delarray(i32 %tmp53189, i8* %.tmp95) - to label %postinvoke96 unwind label %landingpad55 - -postinvoke96: ; preds = %switchdefault90 - call void @_d_eh_resume_unwind(i8* %10) - unreachable - -foreachnext: ; preds = %postinvoke119, %postinvoke102, %foreachbody - %dir.1.0 = phi %tango.net.ftp.FtpClient.FtpFileInfo* [ %dir.1.1, %foreachbody ], [ %.gc_mem120, %postinvoke119 ], [ %dir.1.1, %postinvoke102 ] ; <%tango.net.ftp.FtpClient.FtpFileInfo*> [#uses=1] - %dir.0.0 = phi i32 [ %dir.0.1, %foreachbody ], [ %tmp113, %postinvoke119 ], [ %dir.0.1, %postinvoke102 ] ; [#uses=1] - %tmp127 = add i32 %foreachkey.0, 1 ; [#uses=1] - br label %foreachcond - -foreachend: ; preds = %foreachcond - %insert192 = insertvalue %"FtpFileInfo[]" undef, i32 %dir.0.1, 0 ; <%"FtpFileInfo[]"> [#uses=1] - %insert194 = insertvalue %"FtpFileInfo[]" %insert192, %tango.net.ftp.FtpClient.FtpFileInfo* %dir.1.1, 1 ; <%"FtpFileInfo[]"> [#uses=1] - %.tmp133 = bitcast %"byte[]"* %tmp53190 to i8* ; [#uses=1] - call void @_d_delarray(i32 %tmp53189, i8* %.tmp133) - ret %"FtpFileInfo[]" %insert194 - -landingpad55: ; preds = %switchdefault90, %catch77.landingpad55_crit_edge - %.tmp.pre-phi = phi i8* [ %.tmp.pre, %catch77.landingpad55_crit_edge ], [ %.tmp95, %switchdefault90 ] ; [#uses=1] - %12 = call i8* @llvm.eh.exception() ; [#uses=2] - %13 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %12, i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @_d_eh_personality to i8*), i32 0) ; [#uses=0] - call void @_d_delarray(i32 %tmp53189, i8* %.tmp.pre-phi) - call void @_d_eh_resume_unwind(i8* %12) - unreachable - -else29: ; preds = %endif - %tmp142 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp1 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.sendListCommand at vtbl143" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp142, i32 0, i32 49 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")**> [#uses=1] - %this.sendListCommand145 = load %"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")** %"this.sendListCommand at vtbl143", align 4 ; <%"FtpFileInfo[]" (%tango.net.ftp.FtpClient.FTPConnection*, %"byte[]")*> [#uses=1] - %insert196 = insertvalue %"byte[]" undef, i32 %path_arg207, 0 ; <%"byte[]"> [#uses=1] - %insert198 = insertvalue %"byte[]" %insert196, i8* %path_arg208, 1 ; <%"byte[]"> [#uses=1] - %tmp147 = call fastcc %"FtpFileInfo[]" %this.sendListCommand145(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %"byte[]" %insert198) ; <%"FtpFileInfo[]"> [#uses=1] - ret %"FtpFileInfo[]" %tmp147 -} - -define fastcc void @_D5tango3net3ftp9FtpClient13FTPConnection10readStreamMFC5tango3net13SocketConduit13SocketConduitC5tango2io5model8IConduit12OutputStreamDFkZvZv(%tango.net.ftp.FtpClient.FTPConnection* %.this_arg, %tango.net.SocketConduit.SocketConduit* %data_arg, %tango.io.model.IConduit.OutputStream* %stream_arg, %"void delegate(uint pos)" %progress_arg) { -entry: - %tv.i = alloca %tango.net.Socket.timeval, align 8 ; <%tango.net.Socket.timeval*> [#uses=2] - %.rettmp = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp11 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %buf = alloca [8192 x i8], align 1 ; <[8192 x i8]*> [#uses=1] - %.rettmp17 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp45 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp110 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %.rettmp119 = alloca %tango.time.Time.Time, align 8 ; <%tango.time.Time.Time*> [#uses=2] - %progress_arg144 = extractvalue %"void delegate(uint pos)" %progress_arg, 0 ; [#uses=2] - %progress_arg145 = extractvalue %"void delegate(uint pos)" %progress_arg, 1 ; [#uses=2] - %.newclass_gc_alloc = call noalias i8* @_d_allocclass(%object.ClassInfo* @_D5tango3net6Socket9SocketSet7__ClassZ) ; [#uses=8] - %.newclass_gc = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet* ; <%tango.net.Socket.SocketSet*> [#uses=3] - %vtbl = bitcast i8* %.newclass_gc_alloc to %tango.net.Socket.SocketSet.__vtbl** ; <%tango.net.Socket.SocketSet.__vtbl**> [#uses=3] - store %tango.net.Socket.SocketSet.__vtbl* @_D5tango3net6Socket9SocketSet6__vtblZ, %tango.net.Socket.SocketSet.__vtbl** %vtbl - %monitor = getelementptr i8* %.newclass_gc_alloc, i32 4 ; [#uses=1] - %0 = bitcast i8* %monitor to i8** ; [#uses=1] - store i8* null, i8** %0 - %tmp = getelementptr i8* %.newclass_gc_alloc, i32 8 ; [#uses=2] - call void @llvm.memcpy.i32(i8* %tmp, i8* bitcast (i32* getelementptr (%tango.net.Socket.SocketSet* bitcast (%24* @_D5tango3net6Socket9SocketSet6__initZ to %tango.net.Socket.SocketSet*), i32 0, i32 2) to i8*), i32 16, i32 1) - %1 = bitcast i8* %tmp to i32* ; [#uses=2] - store i32 128, i32* %1 - %tmp9.i.i = getelementptr i8* %.newclass_gc_alloc, i32 12 ; [#uses=1] - %2 = bitcast i8* %tmp9.i.i to i8** ; [#uses=1] - %.gc_mem.i.i = call noalias i8* @_d_newarrayT(%object.TypeInfo* @_D11TypeInfo_Ag6__initZ, i32 128) ; [#uses=1] - store i8* %.gc_mem.i.i, i8** %2 - %tmp14.i.i = getelementptr i8* %.newclass_gc_alloc, i32 16 ; [#uses=1] - %3 = bitcast i8* %tmp14.i.i to i32* ; [#uses=1] - %tmp17.i.i = load i32* %1 ; [#uses=1] - %tmp18.i.i = shl i32 %tmp17.i.i, 3 ; [#uses=1] - store i32 %tmp18.i.i, i32* %3 - invoke fastcc void @_D5tango4time5Clock5Clock3nowFZS5tango4time4Time4Time(%tango.time.Time.Time* noalias nocapture sret %.rettmp) - to label %postinvoke unwind label %landingpad - -postinvoke: ; preds = %entry - %tmp8 = getelementptr %tango.net.ftp.FtpClient.FTPConnection* %.this_arg, i32 0, i32 0 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl**> [#uses=3] - %tmp9 = load %tango.net.ftp.FtpClient.FTPConnection.__vtbl** %tmp8 ; <%tango.net.ftp.FtpClient.FTPConnection.__vtbl*> [#uses=1] - %"this.timeout at vtbl" = getelementptr %tango.net.ftp.FtpClient.FTPConnection.__vtbl* %tmp9, i32 0, i32 10 ; [#uses=1] - %this.timeout = load void (%tango.time.Time.Time*, %tango.net.ftp.FtpClient.FTPConnection*)** %"this.timeout at vtbl", align 4 ; [#uses=1] - invoke fastcc void %this.timeout(%tango.time.Time.Time* noalias nocapture sret %.rettmp11, %tango.net.ftp.FtpClient.FTPConnection* %.this_arg) - to label %postinvoke12 unwind label %landingpad - -postinvoke12: ; preds = %postinvoke - %.rettmp11.0 = getelementptr %tango.time.Time.Time* %.rettmp11, i32 0, i32 0 ; [#uses=1] - %tmp183 = load i64* %.rettmp11.0, align 8 ; [#uses=1] - %tmp1.i162 = getelementptr %tango.time.Time.Time* %.rettmp, i32 0, i32 0 ; [#uses=1] - %tmp3.i164 = load i64* %tmp1.i162, align 8 ; [#uses=1] - %tmp16 = getelementptr [8192 x i8]* %buf, i32 0, i32 0 ; [#uses=3] - call void @llvm.memset.i32(i8* %tmp16, i8 0, i32 8192, i32 1) - br label %whilecond - -whilecond: ; preds = %postinvoke120, %postinvoke12 - %tmp3.i164.pn = phi i64 [ %tmp3.i164, %postinvoke12 ], [ %tmp3.i, %postinvoke120 ] ; [#uses=1] - %.pn = phi i64 [ %tmp183, %postinvoke12 ], [ %tmp181, %postinvoke120 ] ; [#uses=1] - %pos.0 = phi i32 [ 0, %postinvoke12 ], [ %tmp96, %postinvoke120 ] ;