Skip to content

Instantly share code, notes, and snippets.

@llllllllll
Last active July 23, 2021 05:41
Show Gist options
  • Save llllllllll/b3ccc744e88c5bf0ee4e2c16c6fcdebf to your computer and use it in GitHub Desktop.
Save llllllllll/b3ccc744e88c5bf0ee4e2c16c6fcdebf to your computer and use it in GitHub Desktop.
msgspec notes

Initial Observations

The provided benchmark script is using Python's timeit module for benchmarking. I noticed that I was getting very different results between runs even with the same compiler, so I first switched to pyperf to attempt to get more stable results.

I am not sure if there is a Python API for pyperf, so I started by writing a small bash wrapper for benchmark:

#!/usr/bin/bash

benchmark="twitter"
do_setup=0
perf=
asan=

while getopts "spab:" o;do
    case "$o" in
        b)
            benchmark="$OPTARG"
            ;;
        s)
            do_setup=1
            ;;
        p)
            perf="perf record --call-graph dwarf -e cycles,cycle_activity.stalls_total"
            ;;
        a)
            asan="env LD_PRELOAD=/usr/lib/libasan.so"
    esac
done

path="$benchmark.json"

if [[ do_setup -ne 0 ]];then
    echo "Downloading $path..."
    curl -L "https://github.com/ijl/orjson/raw/master/data/$path.xz" | \
        xz --decompress > $path
fi

echo "Benchmark: $path"
$perf pyperf timeit -s \
       "import json; d = json.load(open('$path')); import msgspec; f = msgspec.JSONEncoder().encode" \
       'f(d)'

Constant Environment

(venv) [joe@jevnik msgspec]$ python --version
Python 3.9.6
(venv) [joe@jevnik msgspec]$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         39 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  8
  On-line CPU(s) list:   0-7
Vendor ID:               GenuineIntel
  Model name:            Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
    CPU family:          6
    Model:               94
    Thread(s) per core:  2
    Core(s) per socket:  4
    Socket(s):           1
    Stepping:            3
    CPU max MHz:         4200.0000
    CPU min MHz:         800.0000
    BogoMIPS:            8003.30
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fx
                         sr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts re
                         p_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est
                         tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdr
                         and lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority e
                         pt vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap
                          clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_
                         act_window hwp_epp
Virtualization features:
  Virtualization:        VT-x
Caches (sum of all):
  L1d:                   128 KiB (4 instances)
  L1i:                   128 KiB (4 instances)
  L2:                    1 MiB (4 instances)
  L3:                    8 MiB (1 instance)
NUMA:
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-7
Vulnerabilities:
  Itlb multihit:         KVM: Mitigation: VMX disabled
  L1tf:                  Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable
  Mds:                   Vulnerable: Clear CPU buffers attempted, no microcode; SMT vulnerable
  Meltdown:              Mitigation; PTI
  Spec store bypass:     Vulnerable
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Full generic retpoline, STIBP disabled, RSB filling
  Srbds:                 Vulnerable: No microcode
  Tsx async abort:       Vulnerable: Clear CPU buffers attempted, no microcode; SMT vulnerable
(venv) [joe@jevnik msgspec]$ sudo cpupower frequency-set -g performance
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
Setting cpu: 4
Setting cpu: 5
Setting cpu: 6
Setting cpu: 7

First runs

Even with a more reliable benchmark, I wanted to run each sequence 5 times to start to prove to myself that I had a stable result.

gcc-11.1.0

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fPIC -I/home/joe/projects/python/msgspec/venv/include -I/usr/include/python3.9 -c msgspec/core.c -o build/temp.linux-x86_64-3.9/msgspec/core.o

Note

My system gcc is gcc-11.1.0

$ for n in `seq 5`;do ./benchmark -b twitter;done
Benchmark: twitter.json
.....................
Mean +- std dev: 489 us +- 6 us
Benchmark: twitter.json
.....................
Mean +- std dev: 489 us +- 5 us
Benchmark: twitter.json
.....................
Mean +- std dev: 487 us +- 3 us
Benchmark: twitter.json
.....................
Mean +- std dev: 490 us +- 5 us
Benchmark: twitter.json
.....................
Mean +- std dev: 488 us +- 5 us

$ for n in `seq 5`;do ./benchmark -b canada;done
Benchmark: canada.json
.....................
Mean +- std dev: 4.56 ms +- 0.03 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.57 ms +- 0.03 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.57 ms +- 0.05 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.57 ms +- 0.05 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.58 ms +- 0.04 ms

gcc-10.2.0

gcc-10 -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fPIC -I/home/joe/projects/python/msgspec/venv/include -I/usr/include/python3.9 -c msgspec/core.c -o build/temp.linux-x86_64-3.9/msgspec/core.o
$ for n in `seq 5`;do ./benchmark -b twitter;done
Benchmark: twitter.json
.....................
Mean +- std dev: 489 us +- 7 us
Benchmark: twitter.json
.....................
Mean +- std dev: 485 us +- 4 us
Benchmark: twitter.json
.....................
Mean +- std dev: 488 us +- 4 us
Benchmark: twitter.json
.....................
Mean +- std dev: 487 us +- 13 us
Benchmark: twitter.json
.....................
Mean +- std dev: 487 us +- 6 us

$ for n in `seq 5`;do ./benchmark -b canada;done
Benchmark: canada.json
.....................
Mean +- std dev: 4.55 ms +- 0.02 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.56 ms +- 0.04 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.56 ms +- 0.02 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.56 ms +- 0.03 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.57 ms +- 0.05 ms

clang-12.0.1

clang -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fPIC -I/home/joe/projects/python/msgspec/venv/include -I/usr/include/python3.9 -c msgspec/core.c -o build/temp.linux-x86_64-3.9/msgspec/core.o
$ for n in `seq 5`;do ./benchmark -b twitter;done
Benchmark: twitter.json
.....................
Mean +- std dev: 476 us +- 4 us
Benchmark: twitter.json
.....................
Mean +- std dev: 474 us +- 3 us
Benchmark: twitter.json
.....................
Mean +- std dev: 475 us +- 5 us
Benchmark: twitter.json
.....................
Mean +- std dev: 476 us +- 12 us
Benchmark: twitter.json
.....................
Mean +- std dev: 475 us +- 4 us

$ for n in `seq 5`;do ./benchmark -b canada;done
Benchmark: canada.json
.....................
Mean +- std dev: 4.26 ms +- 0.07 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.24 ms +- 0.02 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.25 ms +- 0.06 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.27 ms +- 0.06 ms
Benchmark: canada.json
.....................
Mean +- std dev: 4.26 ms +- 0.05 ms

Next Steps

Before I investigated the code further, I wanted to make sure that the existing code was not using any undefined behavior (UB), so I did a gcc build with address sanitizer (asan) and undefined-behavior sanitizer (ubsan) to ensure that the code was not relying on any UB that the compilers were handling differently.

I changed the compiler flags to:

diff --git a/setup.py b/setup.py
index 844c53c..b0de70f 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,14 @@ import versioneer
 from setuptools import setup
 from setuptools.extension import Extension

-ext_modules = [Extension("msgspec.core", [os.path.join("msgspec", "core.c")])]
+ext_modules = [
+    Extension(
+        "msgspec.core",
+        [os.path.join("msgspec", "core.c")],
+        extra_compile_args=['-fsanitize=address', '-fsanitize=undefined'],
+        extra_link_args=['-lasan', '-lubsan'],
+    )
+]

 setup(
     name="msgspec",

I did an instrumented run with:

$ PYTHONMALLOC=malloc LD_PRELOAD=/usr/lib/libasan.so python -c "import json; d = json.load(open('twitter.json')); import msgspec; f = msgspec.JSONEncoder().encode; f(d)"

There were a few leaks detected, but this is standard in Python and I don't believe it was anything more than odds and ends global structures that Python uses. I did not see any ubsan violations with gcc, so I tried clang and got the same results.

Warnings

I noticed that there were a few warnings that gcc was providing, and also noticed that I was not compiling with -Wextra, so I decided to turn on -Wextra and then disable a few warnings that are annoying when writing CPython extensions:

extra_compile_args=[
    '-Wextra',
    '-Wno-unused-parameter',
    '-Wno-missing-field-initializers',
]

Here is a sample of some warnings that seemed harmless but maybe indicate the code isn't doing what is expected:

msgspec/core.c: In function ‘mp_decode_any’:
msgspec/core.c:3525:25: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 3525 |     if (-32 <= op && op <= 127) {
      |                         ^~
msgspec/core.c:3534:21: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 3534 |     else if ('\x80' <= op && op <= '\x8f') {
      |                     ^~
msgspec/core.c: In function ‘mp_skip’:
msgspec/core.c:3647:25: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 3647 |     if (-32 <= op && op <= 127) {
      |                         ^~
msgspec/core.c:3656:21: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 3656 |     else if ('\x80' <= op && op <= '\x8f') {
      |                     ^~
msgspec/core.c: In function ‘mp_validation_error’:
msgspec/core.c:3761:25: warning: comparison is always true due to limited range of data type [-Wtype-limits]
 3761 |     if (-32 <= op && op <= 127) {

There are also some warnings about possible uninitialized values; however, these seems top be false positives:

msgspec/core.c: In function ‘mp_decode_any’:
msgspec/core.c:3292:12: warning: ‘s’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3292 |     return PyFloat_FromDouble(_PyFloat_Unpack8((unsigned char *)s, 0));
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
msgspec/core.c:3290:11: note: ‘s’ was declared here
 3290 |     char *s;
      |           ^

perf

With stable benchmarks, ubsan passing, and code checked, I decided to dig into the hotspots to see what the major differences were.

I started with the twitter example because I thought I would have the most to offer in the more Python object heavy workload and because ryu already seems pretty well optimized.

I ran the benchmark under perf and recorded the cycles (the default) but also the stalls to see places where we the CPU was not able to make progress because it was waiting for something. You can open the result of perf with perf report; however, I like an open source tool called hotspot to look through perf results. The biggest hotspot by far was json_encode_str, which by itself consumed almost 50% of the total cycles in the run and almost 25% of the stalls.

Now we can focus our search to a single function and see where we might make improvements

Code Analysis

I started by just reading the source for this function. My first impression was that this function has an incredibly "branchy" inner loop for what should be "mostly memcpy". Next I wanted to look through the generated code for this function, which I extracted with:

$ objdump --no-addresses --source --disassemble=json_encode_str msgspec/core.cpython-39-x86_64-linux-gnu.so  > gcc11-json_encode_str

The generated code has lots of jumps inside this hot loop, which is not good. All these jumps will prevent the CPU from doing things as fast as can, because it will end up bottlenecked reading data from main memory, which is slow.

To get some more insight into how the compiler is understanding this function, I needed to dump some of the gcc internal state. gcc can emit information about the code after every pass that it does, and one of the output formats is a graphviz formatted .dot file. The only pass I cared about was the final, fully optimized and inlined pass, so I selected that I wanted this pass with -fdump-rtl-final, which means dump the rtl (register transfer language, the lowest level gcc intermediate representation) pass named "final", which is the last pass unless you have plugins running. I also wanted a graph, not just raw rtl, so I also passed -fdump-tree-optimized-graph=graph which says to dump the optimized passes in a graph format and write the data to a file named graph.dot.

The full command line used was:

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fPIC -I/home/joe/projects/python/msgspec/venv/include -I/usr/include/python3.9 -c msgspec/core.c -o build/temp.linux-x86_64-3.9/msgspec/core.o -fdump-rtl-final -fdump-tree-optimized-graph=graph

Unfortunately, this writes out all of the functions, so we need to find the cluster for the function we care about. I wrote a little Python to do this:

def isolate_function(in_, out, func):
    start = 'subgraph "cluster_%s" {\n' % func
    end = '}\n'
    with open(in_) as f:
        lines = [
          'digraph "small.graph" {\n',
          'overlap=false;\n',
        ]
        for line in f:
            if line == start:
                lines.append(line)
                break
        for line in f:
            lines.append(line)
            if line == end:
                break
        lines.append(end)
        content = ''.join(lines)
        with open(out, 'w') as f: f.write(content)

The results are shown in original.svg.

This representation breaks down the code into basic blocks and shows the control flow edges between them. Each edge is annotated with a predicted likelihood, where blue edges are unconditional. With a little squinting, we can match this form up with our original source code if we consider what the result of inlining will be.

Optimizations

First Attempt

The first thing to notice is just how many branches we have in this loop, the control flow is not simple! Having a small loop (in terms of generated code size) that fits in cache is very important for optimal performance

The first thing I wanted to do was help the compiler generate better code around mp_write in our loop, so I told gcc to always inline the function to potentially unlock optimizations based on earlier passes before the decision to inline would be made.

To do this, we can annotate mp_write with __attribute__((always_inline)) which is respected by both gcc and clang.

This alone gives us a pretty decent change with gcc11:

Benchmark: twitter.json
.....................
Mean +- std dev: 477 us +- 5 us

A 2.5% speedup from just a one line change!

Looking at the graph from the original code, another thing I noticed was that the compiler was assuming that the required > self->max_output_len condition was being weighed equally, which we know is definitely not true.

To tell the compiler what we know, I used __builtin_expect, a gcc compiler intrinsic. This intrinsic is usually wrapped with LIKELY and UNLIKELY macros, like:

#define MP_LIKELY(pred) __builtin_expect(!!(pred), 1)
#define MP_UNLIKELY(pred) __builtin_expect(!!(pred), 0)

This small change gives another small performance improvement:

Benchmark: twitter.json
.....................
Mean +- std dev: 473 us +- 5 us

The full diff at this point is:

diff --git a/msgspec/core.c b/msgspec/core.c
index 90017f0..f084f4f 100644
--- a/msgspec/core.c
+++ b/msgspec/core.c
@@ -8,6 +8,11 @@

 #include "ryu.h"

+#define MP_LIKELY(pred) __builtin_expect(!!(pred), 1)
+#define MP_UNLIKELY(pred) __builtin_expect(!!(pred), 0)
+
+#define MP_INLINE __attribute__((always_inline))
+
 #if PY_VERSION_HEX < 0x03090000
 #define IS_TRACKED _PyObject_GC_IS_TRACKED
 #define CALL_ONE_ARG(fn, arg) PyObject_CallFunctionObjArgs((fn), (arg), NULL)
@@ -2137,11 +2142,11 @@ mp_ensure_space(EncoderState *self, Py_ssize_t size) {
     return 0;
 }

-static inline int
+MP_INLINE static inline int
 mp_write(EncoderState *self, const char *s, Py_ssize_t n)
 {
     Py_ssize_t required = self->output_len + n;
-    if (required > self->max_output_len) {
+    if (MP_UNLIKELY(required > self->max_output_len)) {
         if (mp_resize(self, required) < 0) return -1;
     }
     memcpy(self->output_buffer_raw + self->output_len, s, n);

These changes yield a noticeably different graph in the dot files, so we know that the compiler does see these as different functions. The graph at this stage is shown in opt-1.svg This at least makes me believe that my understanding of what is going on is correct because we are making progress.

Second Attempt

The next bit of branching that I see in our loop is the type check in the resize code. I am talking about the is_bytes checks in mp_resize. Resizing is unexpected, but it does happen in the loop with a sufficiently large file, so I decided to think about how to remove these conditions.

My thought was that we don't need to branch at all here, instead we just need to remember what kind of buffer we have when we set it. To do this, I added a function pointer in the EncoderState struct which points to a function which either resizes bytes objects or bytearray objects. This function pointer can be used to avoid all the extra branching we have, and further get the resizing code out of the way to make the loop smaller.

The diff to do this was:

diff --git a/msgspec/core.c b/msgspec/core.c
index f084f4f..4ee348c 100644
--- a/msgspec/core.c
+++ b/msgspec/core.c
@@ -1990,6 +1990,8 @@ typedef struct EncoderState {
     char *output_buffer_raw;    /* raw pointer to output_buffer internal buffer */
     Py_ssize_t output_len;      /* Length of output_buffer */
     Py_ssize_t max_output_len;  /* Allocation size of output_buffer */
+
+    char* (*resize_output_buffer)(PyObject**, Py_ssize_t);
 } EncoderState;


@@ -2113,24 +2115,32 @@ enum mp_code {
     MP_EXT32 = '\xc9',
 };

+static char*
+mp_resize_bytes(PyObject** output_buffer, Py_ssize_t size)
+{
+    int status = _PyBytes_Resize(output_buffer, size);
+    if (status < 0) return NULL;
+    return PyBytes_AS_STRING(*output_buffer);
+}
+
+static char*
+mp_resize_bytearray(PyObject** output_buffer, Py_ssize_t size)
+{
+    int status = PyByteArray_Resize(*output_buffer, size);
+    if (status < 0) return NULL;
+    return PyByteArray_AS_STRING(*output_buffer);
+}
+
+
 static int
-mp_resize(EncoderState *self, Py_ssize_t size)
+mp_resize(EncoderState *self, Py_ssize_t size)
 {
-    int status;
-    bool is_bytes = PyBytes_CheckExact(self->output_buffer);
     self->max_output_len = Py_MAX(8, 2 * size);
-    status = (
-        is_bytes ? _PyBytes_Resize(&self->output_buffer, self->max_output_len)
-                 : PyByteArray_Resize(self->output_buffer, self->max_output_len)
-    );
-    if (status < 0) return -1;
-    if (is_bytes) {
-        self->output_buffer_raw = PyBytes_AS_STRING(self->output_buffer);
-    }
-    else {
-        self->output_buffer_raw = PyByteArray_AS_STRING(self->output_buffer);
-    }
-    return status;
+    char* new_buf = self->resize_output_buffer(&self->output_buffer,
+                                               self->max_output_len);
+    if (new_buf == NULL) return -1;
+    self->output_buffer_raw = new_buf;
+    return 0;
 }

 static inline int
@@ -2834,6 +2844,7 @@ Encoder_encode_into(Encoder *self, PyObject *const *args, Py_ssize_t nargs)
     self->state.output_buffer_raw = PyByteArray_AS_STRING(buf);
     self->state.output_len = offset;
     self->state.max_output_len = buf_size;
+    self->state.resize_output_buffer = mp_resize_bytearray;

     status = mp_encode(&(self->state), obj);

@@ -2871,6 +2882,7 @@ encode_common(
         state->output_buffer = PyBytes_FromStringAndSize(NULL, state->max_output_len);
         if (state->output_buffer == NULL) return NULL;
         state->output_buffer_raw = PyBytes_AS_STRING(state->output_buffer);
+        state->resize_output_buffer = mp_resize_bytes;
     }

     status = encode(state, args[0]);
@@ -3022,6 +3034,7 @@ msgspec_encode(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
     state.output_buffer = PyBytes_FromStringAndSize(NULL, state.max_output_len);
     if (state.output_buffer == NULL) return NULL;
     state.output_buffer_raw = PyBytes_AS_STRING(state.output_buffer);
+    state.resize_output_buffer = mp_resize_bytes;

     status = mp_encode(&state, args[0]);

This change gives a pretty good improvement over our last effort:

Benchmark: twitter.json
.....................
Mean +- std dev: 465 us +- 5 us

The thing that still bothers me about this is I feel like resizing is a rare enough event that we don't even need any of the mp_resize code in our loop, we can just do a call when this uncommon thing happens. We can get the compiler to never inline our function when this happens with a small edit:

diff --git a/msgspec/core.c b/msgspec/core.c
index 4ee348c..78b1917 100644
--- a/msgspec/core.c
+++ b/msgspec/core.c
@@ -12,6 +12,7 @@
 #define MP_UNLIKELY(pred) __builtin_expect(!!(pred), 0)

 #define MP_INLINE __attribute__((always_inline))
+#define MP_NOINLINE __attribute__((noinline))

 #if PY_VERSION_HEX < 0x03090000
 #define IS_TRACKED _PyObject_GC_IS_TRACKED
@@ -2143,6 +2144,12 @@ mp_resize(EncoderState *self, Py_ssize_t size)
     return 0;
 }

+MP_NOINLINE static int
+mp_resize_cold(EncoderState *self, Py_ssize_t size)
+{
+    return mp_resize(self, size);
+}
+
 static inline int
 mp_ensure_space(EncoderState *self, Py_ssize_t size) {
     Py_ssize_t required = self->output_len + size;
@@ -2157,7 +2164,7 @@ mp_write(EncoderState *self, const char *s, Py_ssize_t n)
 {
     Py_ssize_t required = self->output_len + n;
     if (MP_UNLIKELY(required > self->max_output_len)) {
-        if (mp_resize(self, required) < 0) return -1;
+        if (mp_resize_cold(self, required) < 0) return -1;
     }
     memcpy(self->output_buffer_raw + self->output_len, s, n);
     self->output_len += n;

Now, our generated code will push the resizing out of line entirely, which is great!

Benchmark: twitter.json
.....................
Mean +- std dev: 463 us +- 3 us

This isn't a great improvement; however, it is something and it adds up. I also thought it was funny to show a case where disabling inlining is actually a performance improvement.

I also confirmed that the effect we saw earlier was not just dominated by this noinline change, and having both of these is actually still an improvement over just having one by itself.

At this point, we have gotten gcc generating 5.3% faster code, which is faster than our initial clang measurements, so let's make sure we didn't make clang slower:

Benchmark: twitter.json
.....................
Mean +- std dev: 429 us +- 4 us

Clang seems to have done even better with these optimizations! I don't know what the equivalent tree visualizations are for clang, so I am not sure how to look into the clang internal state here.

Third Attempt

Looking at the graph on opt-2.svg, I still see a lot of duplication between the two branches of the two kinds of escaped characters. The two blocks leaving bb 17 are bb 18, the hex-encoded version, and bb 22, the \\ encoded version.

We can actually share a ton of code here by pre-initializing the escaped array with a common prefix: {'\\', escape, '0', '0'}, which also happens to be a single word which can be stored in an immediate (when escape == 'u') which appears right with the instructions.

I did a little shuffling here:

diff --git a/msgspec/core.c b/msgspec/core.c
index 78b1917..3b59be4 100644
--- a/msgspec/core.c
+++ b/msgspec/core.c
@@ -4984,15 +4984,14 @@ json_encode_str(EncoderState *self, PyObject *obj) {
         }

         /* Write the escaped character */
+        size_t size = escape == 'u' ? 6 : 2;
+        char escaped[6] = {'\\', escape, '0', '0'};
         if (escape == 'u') {
-            const char* hex = "0123456789abcdef";
-            char escaped[6] = {'\\', 'u', '0', '0', hex[c >> 4], hex[c & 0xF]};
-            if (mp_write(self, escaped, 6) < 0) return -1;
-        }
-        else {
-            char escaped[2] = {'\\', escape};
-            if (mp_write(self, escaped, 2) < 0) return -1;
+            static const char* const hex = "0123456789abcdef";
+            escaped[4] = hex[c >> 4];
+            escaped[5] = hex[c & 0xF];
         }
+        if (mp_write(self, escaped, size) < 0) return -1;
         start = i + 1;
     }
     /* Write the last unescaped fragment (if any) */

Which let's us share a single mp_write call, and efficiently load the prefix on the escaped array. There is now one bit of dead work, which is the that we will write {'0', '0'} into the buffer for the non-u case; however, this is implemented with a 2-byte store of 0x3030, which will never be read, so it is quite fast.

This is actually a pretty big improvement for gcc, but a pessimization for clang (over the previous best), so I think clang is not doing the same sharing here.

# gcc 11.1.0
Benchmark: twitter.json
.....................
Mean +- std dev: 455 us +- 4 us

# clang-12.0.1
Benchmark: twitter.json
.....................
Mean +- std dev: 449 us +- 4 us

But, now the there isn't much of a difference between the two compilers!

Closing

I didn't exactly help you figure out what the difference between gcc and clang was, but hopefully this helps you think about optimizing C code. This can be continued to keep trying to squeeze performance out of the existing code. Also, the graph visualization then compare generated code can be used to compare what different versions of gcc do with the same code, which is a good way to get a real understanding of how the compilers are treating the code differently.

digraph "small.graph" {
overlap=false;
subgraph "cluster_json_encode_str" {
style="dashed";
color="black";
label="json_encode_str ()";
subgraph cluster_220_1 {
style="filled";
color="darkgreen";
fillcolor="grey88";
label="loop 1";
labeljust=l;
penwidth=2;
fn_220_basic_block_16 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1044213921\<bb\ 16\>:\l\
|#\ start_370\ =\ PHI\ \<start_22(52),\ 0(15)\>\l\
|#\ prephitmp_256\ =\ PHI\ \<prephitmp_346(52),\ _58(15)\>\l\
|#\ prephitmp_253\ =\ PHI\ \<prephitmp_349(52),\ len.49_64(15)\>\l\
|#\ ivtmp.1187_391\ =\ PHI\ \<ivtmp.1187_390(52),\ 0(15)\>\l\
|i_358\ =\ (Py_ssize_t)\ ivtmp.1187_391;\l\
|#\ DEBUG\ start\ =\>\ start_370\l\
|#\ DEBUG\ i\ =\>\ i_358\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c_36\ =\ MEM[(const\ char\ *)_395\ +\ ivtmp.1187_391\ *\ 1];\l\
|#\ DEBUG\ c\ =\>\ c_36\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c.47_4\ =\ (unsigned\ char)\ c_36;\l\
|_5\ =\ (int)\ c.47_4;\l\
|escape_37\ =\ escape_table[_5];\l\
|#\ DEBUG\ escape\ =\>\ escape_37\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_338\ =\ self_35(D)-\>max_output_len;\l\
|if\ (escape_37\ ==\ 0)\l\
\ \ goto\ \<bb\ 17\>;\ [33.00%]\l\
else\l\
\ \ goto\ \<bb\ 18\>;\ [67.00%]\l\
}"];
fn_220_basic_block_17 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:344590592\<bb\ 17\>:\l\
|_386\ =\ ivtmp.1187_391\ +\ 1;\l\
|_385\ =\ (long\ int)\ _386;\l\
goto\ \<bb\ 52\>;\ [100.00%]\l\
}"];
fn_220_basic_block_18 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:699623329\<bb\ 18\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (i_358\ \>\ start_370)\l\
\ \ goto\ \<bb\ 19\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 29\>;\ [50.00%]\l\
}"];
fn_220_basic_block_52 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1043448021\<bb\ 52\>:\l\
|#\ start_22\ =\ PHI\ \<start_370(17),\ _387(51)\>\l\
|#\ prephitmp_349\ =\ PHI\ \<prephitmp_253(17),\ pretmp_312(51)\>\l\
|#\ prephitmp_347\ =\ PHI\ \<_385(17),\ _387(51)\>\l\
|#\ prephitmp_346\ =\ PHI\ \<prephitmp_256(17),\ prephitmp_350(51)\>\l\
|#\ DEBUG\ start\ =\>\ start_22\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ start_22\l\
|#\ DEBUG\ i\ =\>\ i_358\ +\ 1\l\
|#\ DEBUG\ BEGIN_STMT\l\
|ivtmp.1187_390\ =\ ivtmp.1187_391\ +\ 1;\l\
|if\ (prephitmp_347\ \<\ prephitmp_349)\l\
\ \ goto\ \<bb\ 16\>;\ [97.25%]\l\
else\l\
\ \ goto\ \<bb\ 53\>;\ [2.75%]\l\
}"];
fn_220_basic_block_19 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:349811664\<bb\ 19\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_6\ =\ i_358\ -\ start_370;\l\
|start.48_7\ =\ (sizetype)\ start_370;\l\
|_8\ =\ _395\ +\ start.48_7;\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ _8\l\
|#\ DEBUG\ n\ =\>\ _6\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_60\ =\ _6\ +\ prephitmp_256;\l\
|#\ DEBUG\ required\ =\>\ required_60\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_60\ \>\ pretmp_338)\l\
\ \ goto\ \<bb\ 21\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 20\>;\ [90.00%]\l\
}"];
fn_220_basic_block_29 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:699367967\<bb\ 29\>:\l\
|#\ prephitmp_208\ =\ PHI\ \<prephitmp_256(18),\ _72(28)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_306\ =\ self_35(D)-\>max_output_len;\l\
|if\ (escape_37\ ==\ 117)\l\
\ \ goto\ \<bb\ 30\>;\ [34.00%]\l\
else\l\
\ \ goto\ \<bb\ 40\>;\ [66.00%]\l\
}"];
fn_220_basic_block_21 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34981167\<bb\ 21\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ size\ =\>\ required_60\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_179\ =\ self_35(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _179\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_180\ =\ MEM[(const\ struct\ PyObject\ *)_179].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _180\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_181\ =\ required_60\ *\ 2;\l\
|_182\ =\ MAX_EXPR\ \<_181,\ 8\>;\l\
|self_35(D)-\>max_output_len\ =\ _182;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_180\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 22\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 23\>;\ [70.00%]\l\
}"];
fn_220_basic_block_20 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:314830497\<bb\ 20\>:\l\
|pretmp_246\ =\ self_35(D)-\>output_buffer_raw;\l\
goto\ \<bb\ 28\>;\ [100.00%]\l\
}"];
fn_220_basic_block_30 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:237785111\<bb\ 30\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ hex\ =\>\ \"0123456789abcdef\"\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ escaped$0\ =\>\ 92\l\
|#\ DEBUG\ escaped$1\ =\>\ 117\l\
|#\ DEBUG\ escaped$2\ =\>\ 48\l\
|#\ DEBUG\ escaped$3\ =\>\ 48\l\
|_9\ =\ c_36\ \>\>\ 4;\l\
|_10\ =\ (sizetype)\ _9;\l\
|_11\ =\ \"0123456789abcdef\"\ +\ _10;\l\
|_12\ =\ *_11;\l\
|#\ DEBUG\ escaped$4\ =\>\ _12\l\
|_31\ =\ c_36\ &\ 15;\l\
|_13\ =\ (sizetype)\ _31;\l\
|_14\ =\ \"0123456789abcdef\"\ +\ _13;\l\
|_15\ =\ *_14;\l\
|#\ DEBUG\ escaped$5\ =\>\ _15\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ 6\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_74\ =\ prephitmp_208\ +\ 6;\l\
|#\ DEBUG\ required\ =\>\ required_74\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_74\ \>\ pretmp_306)\l\
\ \ goto\ \<bb\ 32\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 31\>;\ [90.00%]\l\
}"];
fn_220_basic_block_40 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:461582855\<bb\ 40\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped[0]\ =\ 92;\l\
|escaped[1]\ =\ escape_37;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ 2\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_87\ =\ prephitmp_208\ +\ 2;\l\
|#\ DEBUG\ required\ =\>\ required_87\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_87\ \>\ pretmp_306)\l\
\ \ goto\ \<bb\ 42\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 41\>;\ [90.00%]\l\
}"];
fn_220_basic_block_22 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10494350\<bb\ 22\>:\l\
|_183\ =\ &self_35(D)-\>output_buffer;\l\
|iftmp.10_184\ =\ _PyBytes_Resize\ (_183,\ _182);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_184\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_184\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 24\>;\ [99.27%]\l\
}"];
fn_220_basic_block_23 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:24486817\<bb\ 23\>:\l\
|iftmp.10_185\ =\ PyByteArray_Resize\ (_179,\ _182);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_185\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_185\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 25\>;\ [99.27%]\l\
}"];
fn_220_basic_block_28 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:349556302\<bb\ 28\>:\l\
|#\ prephitmp_238\ =\ PHI\ \<pretmp_246(20),\ iftmp.11_192(27),\ _188(24)\>\l\
|#\ prephitmp_216\ =\ PHI\ \<prephitmp_256(20),\ pretmp_231(27),\ pretmp_223(24)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_66\ =\ (long\ unsigned\ int)\ _6;\l\
|_69\ =\ (sizetype)\ prephitmp_216;\l\
|_70\ =\ prephitmp_238\ +\ _69;\l\
|memcpy\ (_70,\ _8,\ n.9_66);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_71\ =\ self_35(D)-\>output_len;\l\
|_72\ =\ _6\ +\ _71;\l\
|self_35(D)-\>output_len\ =\ _72;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
}"];
fn_220_basic_block_32 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:23778511\<bb\ 32\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ size\ =\>\ required_74\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_194\ =\ self_35(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _194\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_195\ =\ MEM[(const\ struct\ PyObject\ *)_194].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _195\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_196\ =\ required_74\ *\ 2;\l\
|_197\ =\ MAX_EXPR\ \<_196,\ 8\>;\l\
|self_35(D)-\>max_output_len\ =\ _197;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_195\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 33\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 34\>;\ [70.00%]\l\
}"];
fn_220_basic_block_31 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:214006600\<bb\ 31\>:\l\
|pretmp_352\ =\ self_35(D)-\>output_buffer_raw;\l\
goto\ \<bb\ 39\>;\ [100.00%]\l\
}"];
fn_220_basic_block_42 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:46158286\<bb\ 42\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ size\ =\>\ required_87\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_209\ =\ self_35(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _209\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_210\ =\ MEM[(const\ struct\ PyObject\ *)_209].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _210\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_211\ =\ required_87\ *\ 2;\l\
|_212\ =\ MAX_EXPR\ \<_211,\ 8\>;\l\
|self_35(D)-\>max_output_len\ =\ _212;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_210\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 43\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 45\>;\ [70.00%]\l\
}"];
fn_220_basic_block_41 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:415424569\<bb\ 41\>:\l\
|pretmp_171\ =\ self_35(D)-\>output_buffer_raw;\l\
goto\ \<bb\ 50\>;\ [100.00%]\l\
}"];
fn_220_basic_block_24 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10417741\<bb\ 24\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_187\ =\ self_35(D)-\>output_buffer;\l\
|_188\ =\ &MEM[(struct\ PyBytesObject\ *)_187].ob_sval;\l\
|self_35(D)-\>output_buffer_raw\ =\ _188;\l\
|pretmp_223\ =\ self_35(D)-\>output_len;\l\
goto\ \<bb\ 28\>;\ [100.00%]\l\
}"];
fn_220_basic_block_25 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:24308063\<bb\ 25\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_189\ =\ self_35(D)-\>output_buffer;\l\
|_190\ =\ MEM[(struct\ PyVarObject\ *)_189].ob_size;\l\
|if\ (_190\ !=\ 0)\l\
\ \ goto\ \<bb\ 26\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 27\>;\ [50.00%]\l\
}"];
fn_220_basic_block_33 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:7133553\<bb\ 33\>:\l\
|_198\ =\ &self_35(D)-\>output_buffer;\l\
|iftmp.10_199\ =\ _PyBytes_Resize\ (_198,\ _197);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_199\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_199\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 35\>;\ [99.27%]\l\
}"];
fn_220_basic_block_34 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:16644958\<bb\ 34\>:\l\
|iftmp.10_200\ =\ PyByteArray_Resize\ (_194,\ _197);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_200\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_200\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 36\>;\ [99.27%]\l\
}"];
fn_220_basic_block_39 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:237611528\<bb\ 39\>:\l\
|#\ prephitmp_351\ =\ PHI\ \<pretmp_352(31),\ iftmp.11_207(38),\ _203(35)\>\l\
|#\ prephitmp_313\ =\ PHI\ \<prephitmp_208(31),\ pretmp_314(38),\ pretmp_324(35)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_82\ =\ (sizetype)\ prephitmp_313;\l\
|_83\ =\ prephitmp_351\ +\ _82;\l\
|MEM\ \<unsigned\ int\>\ [(char\ *\ \{ref-all\})_83]\ =\ 808482140;\l\
|MEM[(char\ *\ \{ref-all\})_83\ +\ 4B]\ =\ _12;\l\
|MEM[(char\ *\ \{ref-all\})_83\ +\ 5B]\ =\ _15;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_84\ =\ self_35(D)-\>output_len;\l\
|_85\ =\ _84\ +\ 6;\l\
|self_35(D)-\>output_len\ =\ _85;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ escaped$0\ =\>\ NULL\l\
|#\ DEBUG\ escaped$1\ =\>\ NULL\l\
|#\ DEBUG\ escaped$2\ =\>\ NULL\l\
|#\ DEBUG\ escaped$3\ =\>\ NULL\l\
|#\ DEBUG\ escaped$4\ =\>\ NULL\l\
|#\ DEBUG\ escaped$5\ =\>\ NULL\l\
goto\ \<bb\ 51\>;\ [100.00%]\l\
}"];
fn_220_basic_block_43 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:13847486\<bb\ 43\>:\l\
|_213\ =\ &self_35(D)-\>output_buffer;\l\
|iftmp.10_214\ =\ _PyBytes_Resize\ (_213,\ _212);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_214\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_214\ \<\ 0)\l\
\ \ goto\ \<bb\ 44\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 46\>;\ [99.27%]\l\
}"];
fn_220_basic_block_45 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:32310800\<bb\ 45\>:\l\
|iftmp.10_215\ =\ PyByteArray_Resize\ (_209,\ _212);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_215\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_215\ \<\ 0)\l\
\ \ goto\ \<bb\ 44\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 47\>;\ [99.27%]\l\
}"];
fn_220_basic_block_50 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:461245900\<bb\ 50\>:\l\
|#\ prephitmp_355\ =\ PHI\ \<pretmp_171(41),\ iftmp.11_222(49),\ _218(46)\>\l\
|#\ prephitmp_353\ =\ PHI\ \<prephitmp_208(41),\ pretmp_315(49),\ pretmp_354(46)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_95\ =\ (sizetype)\ prephitmp_353;\l\
|_96\ =\ prephitmp_355\ +\ _95;\l\
|_34\ =\ MEM\ \<short\ unsigned\ int\>\ [(char\ *\ \{ref-all\})&escaped];\l\
|MEM\ \<short\ unsigned\ int\>\ [(char\ *\ \{ref-all\})_96]\ =\ _34;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_97\ =\ self_35(D)-\>output_len;\l\
|_98\ =\ _97\ +\ 2;\l\
|self_35(D)-\>output_len\ =\ _98;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
}"];
fn_220_basic_block_26 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:12154032\<bb\ 26\>:\l\
|iftmp.11_191\ =\ MEM[(struct\ PyByteArrayObject\ *)_189].ob_start;\l\
}"];
fn_220_basic_block_27 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:24308063\<bb\ 27\>:\l\
|#\ iftmp.11_192\ =\ PHI\ \<&_PyByteArray_empty_string(25),\ iftmp.11_191(26)\>\l\
|self_35(D)-\>output_buffer_raw\ =\ iftmp.11_192;\l\
|pretmp_231\ =\ self_35(D)-\>output_len;\l\
}"];
fn_220_basic_block_35 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:7081478\<bb\ 35\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_202\ =\ self_35(D)-\>output_buffer;\l\
|_203\ =\ &MEM[(struct\ PyBytesObject\ *)_202].ob_sval;\l\
|self_35(D)-\>output_buffer_raw\ =\ _203;\l\
|pretmp_324\ =\ self_35(D)-\>output_len;\l\
goto\ \<bb\ 39\>;\ [100.00%]\l\
}"];
fn_220_basic_block_36 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:16523450\<bb\ 36\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_204\ =\ self_35(D)-\>output_buffer;\l\
|_205\ =\ MEM[(struct\ PyVarObject\ *)_204].ob_size;\l\
|if\ (_205\ !=\ 0)\l\
\ \ goto\ \<bb\ 37\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 38\>;\ [50.00%]\l\
}"];
fn_220_basic_block_51 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:698857428\<bb\ 51\>:\l\
|#\ prephitmp_350\ =\ PHI\ \<_85(39),\ _98(50)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_389\ =\ ivtmp.1187_391\ +\ 1;\l\
|_387\ =\ (long\ int)\ _389;\l\
|#\ DEBUG\ start\ =\>\ _387\l\
|pretmp_312\ =\ len;\l\
}"];
fn_220_basic_block_46 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:13746399\<bb\ 46\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_217\ =\ self_35(D)-\>output_buffer;\l\
|_218\ =\ &MEM[(struct\ PyBytesObject\ *)_217].ob_sval;\l\
|self_35(D)-\>output_buffer_raw\ =\ _218;\l\
|pretmp_354\ =\ self_35(D)-\>output_len;\l\
goto\ \<bb\ 50\>;\ [100.00%]\l\
}"];
fn_220_basic_block_47 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:32074932\<bb\ 47\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_219\ =\ self_35(D)-\>output_buffer;\l\
|_220\ =\ MEM[(struct\ PyVarObject\ *)_219].ob_size;\l\
|if\ (_220\ !=\ 0)\l\
\ \ goto\ \<bb\ 48\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 49\>;\ [50.00%]\l\
}"];
fn_220_basic_block_37 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:8261725\<bb\ 37\>:\l\
|iftmp.11_206\ =\ MEM[(struct\ PyByteArrayObject\ *)_204].ob_start;\l\
}"];
fn_220_basic_block_38 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:16523450\<bb\ 38\>:\l\
|#\ iftmp.11_207\ =\ PHI\ \<&_PyByteArray_empty_string(36),\ iftmp.11_206(37)\>\l\
|self_35(D)-\>output_buffer_raw\ =\ iftmp.11_207;\l\
|pretmp_314\ =\ self_35(D)-\>output_len;\l\
}"];
fn_220_basic_block_48 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:16037466\<bb\ 48\>:\l\
|iftmp.11_221\ =\ MEM[(struct\ PyByteArrayObject\ *)_219].ob_start;\l\
}"];
fn_220_basic_block_49 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:32074932\<bb\ 49\>:\l\
|#\ iftmp.11_222\ =\ PHI\ \<&_PyByteArray_empty_string(47),\ iftmp.11_221(48)\>\l\
|self_35(D)-\>output_buffer_raw\ =\ iftmp.11_222;\l\
|pretmp_315\ =\ self_35(D)-\>output_len;\l\
}"];
}
fn_220_basic_block_0 [shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];
fn_220_basic_block_1 [shape=Mdiamond,style=filled,fillcolor=white,label="EXIT"];
fn_220_basic_block_2 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30452973\<bb\ 2\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ str\ =\>\ obj_33(D)\l\
|#\ DEBUG\ size\ =\>\ &len\l\
|#\ DEBUG\ INLINE_ENTRY\ unicode_str_and_size\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_126\ =\ BIT_FIELD_REF\ \<MEM[(struct\ PyASCIIObject\ *)obj_33(D)],\ 8,\ 256\>;\l\
|_127\ =\ _126\ &\ 96;\l\
|if\ (_127\ ==\ 96)\l\
\ \ goto\ \<bb\ 3\>;\ [35.01%]\l\
else\l\
\ \ goto\ \<bb\ 4\>;\ [64.99%]\l\
}"];
fn_220_basic_block_3 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10661586\<bb\ 3\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_128\ =\ MEM[(struct\ PyASCIIObject\ *)obj_33(D)].length;\l\
|len\ =\ _128;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_129\ =\ obj_33(D)\ +\ 48;\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _129\l\
|#\ DEBUG\ BEGIN_STMT\l\
goto\ \<bb\ 6\>;\ [100.00%]\l\
}"];
fn_220_basic_block_4 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19791387\<bb\ 4\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_130\ =\ PyUnicode_AsUTF8AndSize\ (obj_33(D),\ &len);\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _130\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_130\ ==\ 0B)\l\
\ \ goto\ \<bb\ 5\>;\ [0.69%]\l\
else\l\
\ \ goto\ \<bb\ 6\>;\ [99.31%]\l\
}"];
fn_220_basic_block_5 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:623883\<bb\ 5\>:\l\
goto\ \<bb\ 74\>;\ [100.00%]\l\
}"];
fn_220_basic_block_6 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30315935\<bb\ 6\>:\l\
|#\ _395\ =\ PHI\ \<_130(4),\ _129(3)\>\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _395\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_46\ =\ self_35(D)-\>output_len;\l\
|required_47\ =\ _46\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_47\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_48\ =\ self_35(D)-\>max_output_len;\l\
|if\ (required_47\ \>\ _48)\l\
\ \ goto\ \<bb\ 8\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 7\>;\ [90.00%]\l\
}"];
fn_220_basic_block_7 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:27284341\<bb\ 7\>:\l\
|pretmp_262\ =\ self_35(D)-\>output_buffer_raw;\l\
goto\ \<bb\ 15\>;\ [100.00%]\l\
}"];
fn_220_basic_block_8 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3031594\<bb\ 8\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ size\ =\>\ required_47\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_164\ =\ self_35(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _164\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_165\ =\ MEM[(const\ struct\ PyObject\ *)_164].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _165\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_166\ =\ required_47\ *\ 2;\l\
|_167\ =\ MAX_EXPR\ \<_166,\ 8\>;\l\
|self_35(D)-\>max_output_len\ =\ _167;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_165\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 9\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 10\>;\ [70.00%]\l\
}"];
fn_220_basic_block_9 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:909478\<bb\ 9\>:\l\
|_168\ =\ &self_35(D)-\>output_buffer;\l\
|iftmp.10_169\ =\ _PyBytes_Resize\ (_168,\ _167);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_169\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_169\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 11\>;\ [99.27%]\l\
}"];
fn_220_basic_block_10 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2122115\<bb\ 10\>:\l\
|iftmp.10_170\ =\ PyByteArray_Resize\ (_164,\ _167);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_170\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_170\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 12\>;\ [99.27%]\l\
}"];
fn_220_basic_block_11 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:902839\<bb\ 11\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_172\ =\ self_35(D)-\>output_buffer;\l\
|_173\ =\ &MEM[(struct\ PyBytesObject\ *)_172].ob_sval;\l\
|self_35(D)-\>output_buffer_raw\ =\ _173;\l\
|pretmp_259\ =\ self_35(D)-\>output_len;\l\
goto\ \<bb\ 15\>;\ [100.00%]\l\
}"];
fn_220_basic_block_12 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2106624\<bb\ 12\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_174\ =\ self_35(D)-\>output_buffer;\l\
|_175\ =\ MEM[(struct\ PyVarObject\ *)_174].ob_size;\l\
|if\ (_175\ !=\ 0)\l\
\ \ goto\ \<bb\ 13\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 14\>;\ [50.00%]\l\
}"];
fn_220_basic_block_13 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1053312\<bb\ 13\>:\l\
|iftmp.11_176\ =\ MEM[(struct\ PyByteArrayObject\ *)_174].ob_start;\l\
}"];
fn_220_basic_block_14 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2106624\<bb\ 14\>:\l\
|#\ iftmp.11_177\ =\ PHI\ \<&_PyByteArray_empty_string(12),\ iftmp.11_176(13)\>\l\
|self_35(D)-\>output_buffer_raw\ =\ iftmp.11_177;\l\
|pretmp_260\ =\ self_35(D)-\>output_len;\l\
}"];
fn_220_basic_block_15 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30293804\<bb\ 15\>:\l\
|#\ prephitmp_261\ =\ PHI\ \<pretmp_262(7),\ iftmp.11_177(14),\ _173(11)\>\l\
|#\ prephitmp_258\ =\ PHI\ \<_46(7),\ pretmp_260(14),\ pretmp_259(11)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_55\ =\ (sizetype)\ prephitmp_258;\l\
|_56\ =\ prephitmp_261\ +\ _55;\l\
|memcpy\ (_56,\ \"\\\"\",\ 1);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_57\ =\ self_35(D)-\>output_len;\l\
|_58\ =\ _57\ +\ 1;\l\
|self_35(D)-\>output_len\ =\ _58;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ i\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|len.49_64\ =\ len;\l\
|if\ (len.49_64\ \>\ 0)\l\
\ \ goto\ \<bb\ 16\>;\ [97.25%]\l\
else\l\
\ \ goto\ \<bb\ 53\>;\ [2.75%]\l\
}"];
fn_220_basic_block_44 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:336955\<bb\ 44\>:\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 74\>;\ [100.00%]\l\
}"];
fn_220_basic_block_53 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29527904\<bb\ 53\>:\l\
|#\ len.49_104\ =\ PHI\ \<prephitmp_349(52),\ len.49_64(15)\>\l\
|#\ i_364\ =\ PHI\ \<prephitmp_347(52),\ 0(15)\>\l\
|#\ start_376\ =\ PHI\ \<start_22(52),\ 0(15)\>\l\
|#\ prephitmp_356\ =\ PHI\ \<prephitmp_346(52),\ _58(15)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_340\ =\ self_35(D)-\>max_output_len;\l\
|if\ (len.49_104\ !=\ start_376)\l\
\ \ goto\ \<bb\ 54\>;\ [66.00%]\l\
else\l\
\ \ goto\ \<bb\ 64\>;\ [34.00%]\l\
}"];
fn_220_basic_block_54 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19488417\<bb\ 54\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_18\ =\ i_364\ -\ start_376;\l\
|start.51_19\ =\ (sizetype)\ start_376;\l\
|_20\ =\ _395\ +\ start.51_19;\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ _20\l\
|#\ DEBUG\ n\ =\>\ _18\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_100\ =\ _18\ +\ prephitmp_356;\l\
|#\ DEBUG\ required\ =\>\ required_100\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_100\ \>\ pretmp_340)\l\
\ \ goto\ \<bb\ 56\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 55\>;\ [90.00%]\l\
}"];
fn_220_basic_block_55 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:17539575\<bb\ 55\>:\l\
|pretmp_79\ =\ self_35(D)-\>output_buffer_raw;\l\
goto\ \<bb\ 63\>;\ [100.00%]\l\
}"];
fn_220_basic_block_56 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1948842\<bb\ 56\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ size\ =\>\ required_100\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_224\ =\ self_35(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _224\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_225\ =\ MEM[(const\ struct\ PyObject\ *)_224].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _225\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_226\ =\ required_100\ *\ 2;\l\
|_227\ =\ MAX_EXPR\ \<_226,\ 8\>;\l\
|self_35(D)-\>max_output_len\ =\ _227;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_225\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 57\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 58\>;\ [70.00%]\l\
}"];
fn_220_basic_block_57 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:584652\<bb\ 57\>:\l\
|_228\ =\ &self_35(D)-\>output_buffer;\l\
|iftmp.10_229\ =\ _PyBytes_Resize\ (_228,\ _227);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_229\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_229\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 59\>;\ [99.27%]\l\
}"];
fn_220_basic_block_58 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1364189\<bb\ 58\>:\l\
|iftmp.10_230\ =\ PyByteArray_Resize\ (_224,\ _227);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_230\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_230\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 60\>;\ [99.27%]\l\
}"];
fn_220_basic_block_59 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:580385\<bb\ 59\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_232\ =\ self_35(D)-\>output_buffer;\l\
|_233\ =\ &MEM[(struct\ PyBytesObject\ *)_232].ob_sval;\l\
|self_35(D)-\>output_buffer_raw\ =\ _233;\l\
|pretmp_309\ =\ self_35(D)-\>output_len;\l\
goto\ \<bb\ 63\>;\ [100.00%]\l\
}"];
fn_220_basic_block_60 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1354231\<bb\ 60\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_234\ =\ self_35(D)-\>output_buffer;\l\
|_235\ =\ MEM[(struct\ PyVarObject\ *)_234].ob_size;\l\
|if\ (_235\ !=\ 0)\l\
\ \ goto\ \<bb\ 61\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 62\>;\ [50.00%]\l\
}"];
fn_220_basic_block_61 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:677115\<bb\ 61\>:\l\
|iftmp.11_236\ =\ MEM[(struct\ PyByteArrayObject\ *)_234].ob_start;\l\
}"];
fn_220_basic_block_62 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1354231\<bb\ 62\>:\l\
|#\ iftmp.11_237\ =\ PHI\ \<&_PyByteArray_empty_string(60),\ iftmp.11_236(61)\>\l\
|self_35(D)-\>output_buffer_raw\ =\ iftmp.11_237;\l\
|pretmp_345\ =\ self_35(D)-\>output_len;\l\
}"];
fn_220_basic_block_63 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19474190\<bb\ 63\>:\l\
|#\ prephitmp_65\ =\ PHI\ \<pretmp_79(55),\ iftmp.11_237(62),\ _233(59)\>\l\
|#\ prephitmp_344\ =\ PHI\ \<prephitmp_356(55),\ pretmp_345(62),\ pretmp_309(59)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_106\ =\ (long\ unsigned\ int)\ _18;\l\
|_109\ =\ (sizetype)\ prephitmp_344;\l\
|_110\ =\ prephitmp_65\ +\ _109;\l\
|memcpy\ (_110,\ _20,\ n.9_106);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_111\ =\ self_35(D)-\>output_len;\l\
|_112\ =\ _18\ +\ _111;\l\
|self_35(D)-\>output_len\ =\ _112;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
}"];
fn_220_basic_block_64 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29513677\<bb\ 64\>:\l\
|#\ prephitmp_343\ =\ PHI\ \<prephitmp_356(53),\ _112(63)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_114\ =\ prephitmp_343\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_114\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_115\ =\ self_35(D)-\>max_output_len;\l\
|if\ (required_114\ \>\ _115)\l\
\ \ goto\ \<bb\ 66\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 65\>;\ [90.00%]\l\
}"];
fn_220_basic_block_65 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:26562309\<bb\ 65\>:\l\
|pretmp_308\ =\ self_35(D)-\>output_buffer_raw;\l\
goto\ \<bb\ 73\>;\ [100.00%]\l\
}"];
fn_220_basic_block_66 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2951368\<bb\ 66\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ size\ =\>\ required_114\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_239\ =\ self_35(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _239\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_240\ =\ MEM[(const\ struct\ PyObject\ *)_239].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _240\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_241\ =\ required_114\ *\ 2;\l\
|_242\ =\ MAX_EXPR\ \<_241,\ 8\>;\l\
|self_35(D)-\>max_output_len\ =\ _242;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_240\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 67\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 68\>;\ [70.00%]\l\
}"];
fn_220_basic_block_67 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:885410\<bb\ 67\>:\l\
|_243\ =\ &self_35(D)-\>output_buffer;\l\
|iftmp.10_244\ =\ _PyBytes_Resize\ (_243,\ _242);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_244\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_244\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 69\>;\ [99.27%]\l\
}"];
fn_220_basic_block_68 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2065957\<bb\ 68\>:\l\
|iftmp.10_245\ =\ PyByteArray_Resize\ (_239,\ _242);\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_245\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_245\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 70\>;\ [99.27%]\l\
}"];
fn_220_basic_block_69 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:878947\<bb\ 69\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_247\ =\ self_35(D)-\>output_buffer;\l\
|_248\ =\ &MEM[(struct\ PyBytesObject\ *)_247].ob_sval;\l\
|self_35(D)-\>output_buffer_raw\ =\ _248;\l\
|pretmp_317\ =\ self_35(D)-\>output_len;\l\
goto\ \<bb\ 73\>;\ [100.00%]\l\
}"];
fn_220_basic_block_70 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2050876\<bb\ 70\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_249\ =\ self_35(D)-\>output_buffer;\l\
|_250\ =\ MEM[(struct\ PyVarObject\ *)_249].ob_size;\l\
|if\ (_250\ !=\ 0)\l\
\ \ goto\ \<bb\ 71\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 72\>;\ [50.00%]\l\
}"];
fn_220_basic_block_71 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1025438\<bb\ 71\>:\l\
|iftmp.11_251\ =\ MEM[(struct\ PyByteArrayObject\ *)_249].ob_start;\l\
}"];
fn_220_basic_block_72 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2050876\<bb\ 72\>:\l\
|#\ iftmp.11_252\ =\ PHI\ \<&_PyByteArray_empty_string(70),\ iftmp.11_251(71)\>\l\
|self_35(D)-\>output_buffer_raw\ =\ iftmp.11_252;\l\
|pretmp_307\ =\ self_35(D)-\>output_len;\l\
}"];
fn_220_basic_block_73 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29492133\<bb\ 73\>:\l\
|#\ prephitmp_322\ =\ PHI\ \<pretmp_308(65),\ iftmp.11_252(72),\ _248(69)\>\l\
|#\ prephitmp_321\ =\ PHI\ \<prephitmp_343(65),\ pretmp_307(72),\ pretmp_317(69)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_122\ =\ (sizetype)\ prephitmp_321;\l\
|_123\ =\ prephitmp_322\ +\ _122;\l\
|memcpy\ (_123,\ \"\\\"\",\ 1);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_124\ =\ self_35(D)-\>output_len;\l\
|_125\ =\ _124\ +\ 1;\l\
|self_35(D)-\>output_len\ =\ _125;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_74 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30452974\<bb\ 74\>:\l\
|#\ _24\ =\ PHI\ \<-1(5),\ -1(44),\ 0(73)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ escaped$0\ =\>\ NULL\l\
|#\ DEBUG\ escaped$1\ =\>\ NULL\l\
|#\ DEBUG\ escaped$2\ =\>\ NULL\l\
|#\ DEBUG\ escaped$3\ =\>\ NULL\l\
|#\ DEBUG\ escaped$4\ =\>\ NULL\l\
|#\ DEBUG\ escaped$5\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|len\ =\{v\}\ \{CLOBBER\};\l\
|return\ _24;\l\
}"];
fn_220_basic_block_0:s -> fn_220_basic_block_2:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_2:s -> fn_220_basic_block_3:n [style="solid,bold",color=black,weight=10,constraint=true,label="[35%]"];
fn_220_basic_block_2:s -> fn_220_basic_block_4:n [style="solid,bold",color=black,weight=10,constraint=true,label="[64%]"];
fn_220_basic_block_3:s -> fn_220_basic_block_6:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_4:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_4:s -> fn_220_basic_block_6:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_5:s -> fn_220_basic_block_74:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_6:s -> fn_220_basic_block_8:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_220_basic_block_6:s -> fn_220_basic_block_7:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_220_basic_block_7:s -> fn_220_basic_block_15:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_8:s -> fn_220_basic_block_9:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_8:s -> fn_220_basic_block_10:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_9:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_9:s -> fn_220_basic_block_11:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_10:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_10:s -> fn_220_basic_block_12:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_11:s -> fn_220_basic_block_15:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_12:s -> fn_220_basic_block_13:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_12:s -> fn_220_basic_block_14:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_13:s -> fn_220_basic_block_14:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_14:s -> fn_220_basic_block_15:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_15:s -> fn_220_basic_block_16:n [style="solid,bold",color=black,weight=10,constraint=true,label="[97%]"];
fn_220_basic_block_15:s -> fn_220_basic_block_53:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_220_basic_block_16:s -> fn_220_basic_block_17:n [style="solid,bold",color=black,weight=10,constraint=true,label="[33%]"];
fn_220_basic_block_16:s -> fn_220_basic_block_18:n [style="solid,bold",color=black,weight=10,constraint=true,label="[67%]"];
fn_220_basic_block_17:s -> fn_220_basic_block_52:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_18:s -> fn_220_basic_block_19:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_18:s -> fn_220_basic_block_29:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_19:s -> fn_220_basic_block_21:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_220_basic_block_19:s -> fn_220_basic_block_20:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_220_basic_block_20:s -> fn_220_basic_block_28:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_21:s -> fn_220_basic_block_22:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_21:s -> fn_220_basic_block_23:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_22:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_22:s -> fn_220_basic_block_24:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_23:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_23:s -> fn_220_basic_block_25:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_24:s -> fn_220_basic_block_28:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_25:s -> fn_220_basic_block_26:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_25:s -> fn_220_basic_block_27:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_26:s -> fn_220_basic_block_27:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_27:s -> fn_220_basic_block_28:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_28:s -> fn_220_basic_block_29:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_29:s -> fn_220_basic_block_30:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_220_basic_block_29:s -> fn_220_basic_block_40:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_220_basic_block_30:s -> fn_220_basic_block_32:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_220_basic_block_30:s -> fn_220_basic_block_31:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_220_basic_block_31:s -> fn_220_basic_block_39:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_32:s -> fn_220_basic_block_33:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_32:s -> fn_220_basic_block_34:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_33:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_33:s -> fn_220_basic_block_35:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_34:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_34:s -> fn_220_basic_block_36:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_35:s -> fn_220_basic_block_39:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_36:s -> fn_220_basic_block_37:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_36:s -> fn_220_basic_block_38:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_37:s -> fn_220_basic_block_38:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_38:s -> fn_220_basic_block_39:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_39:s -> fn_220_basic_block_51:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_40:s -> fn_220_basic_block_42:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_220_basic_block_40:s -> fn_220_basic_block_41:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_220_basic_block_41:s -> fn_220_basic_block_50:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_42:s -> fn_220_basic_block_43:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_42:s -> fn_220_basic_block_45:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_43:s -> fn_220_basic_block_44:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_43:s -> fn_220_basic_block_46:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_44:s -> fn_220_basic_block_74:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_45:s -> fn_220_basic_block_44:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_45:s -> fn_220_basic_block_47:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_46:s -> fn_220_basic_block_50:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_47:s -> fn_220_basic_block_48:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_47:s -> fn_220_basic_block_49:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_48:s -> fn_220_basic_block_49:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_49:s -> fn_220_basic_block_50:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_50:s -> fn_220_basic_block_51:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_51:s -> fn_220_basic_block_52:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_52:s -> fn_220_basic_block_16:n [style="dotted,bold",color=blue,weight=10,constraint=false,label="[97%]"];
fn_220_basic_block_52:s -> fn_220_basic_block_53:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_220_basic_block_53:s -> fn_220_basic_block_54:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_220_basic_block_53:s -> fn_220_basic_block_64:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_220_basic_block_54:s -> fn_220_basic_block_56:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_220_basic_block_54:s -> fn_220_basic_block_55:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_220_basic_block_55:s -> fn_220_basic_block_63:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_56:s -> fn_220_basic_block_57:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_56:s -> fn_220_basic_block_58:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_57:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_57:s -> fn_220_basic_block_59:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_58:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_58:s -> fn_220_basic_block_60:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_59:s -> fn_220_basic_block_63:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_60:s -> fn_220_basic_block_61:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_60:s -> fn_220_basic_block_62:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_61:s -> fn_220_basic_block_62:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_62:s -> fn_220_basic_block_63:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_63:s -> fn_220_basic_block_64:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_64:s -> fn_220_basic_block_66:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_220_basic_block_64:s -> fn_220_basic_block_65:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_220_basic_block_65:s -> fn_220_basic_block_73:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_66:s -> fn_220_basic_block_67:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_66:s -> fn_220_basic_block_68:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_67:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_67:s -> fn_220_basic_block_69:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_68:s -> fn_220_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_68:s -> fn_220_basic_block_70:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_69:s -> fn_220_basic_block_73:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_70:s -> fn_220_basic_block_71:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_70:s -> fn_220_basic_block_72:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_71:s -> fn_220_basic_block_72:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_72:s -> fn_220_basic_block_73:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_73:s -> fn_220_basic_block_74:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_74:s -> fn_220_basic_block_1:n [style="solid,bold",color=black,weight=10,constraint=true,label="[100%]"];
fn_220_basic_block_0:s -> fn_220_basic_block_1:n [style="invis",constraint=true];
}
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
digraph "small.graph" {
overlap=false;
subgraph "cluster_json_encode_str" {
style="dashed";
color="black";
label="json_encode_str ()";
subgraph cluster_223_1 {
style="filled";
color="darkgreen";
fillcolor="grey88";
label="loop 1";
labeljust=l;
penwidth=2;
fn_223_basic_block_10 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1044213921\<bb\ 10\>:\l\
|#\ start_102\ =\ PHI\ \<start_22(28),\ 0(9)\>\l\
|#\ prephitmp_196\ =\ PHI\ \<prephitmp_212(28),\ _58(9)\>\l\
|#\ prephitmp_199\ =\ PHI\ \<prephitmp_209(28),\ len.47_49(9)\>\l\
|#\ ivtmp.754_197\ =\ PHI\ \<ivtmp.754_192(28),\ 0(9)\>\l\
|i_116\ =\ (Py_ssize_t)\ ivtmp.754_197;\l\
|#\ DEBUG\ start\ =\>\ start_102\l\
|#\ DEBUG\ i\ =\>\ i_116\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c_36\ =\ MEM[(const\ char\ *)_184\ +\ ivtmp.754_197\ *\ 1];\l\
|#\ DEBUG\ c\ =\>\ c_36\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c.45_4\ =\ (unsigned\ char)\ c_36;\l\
|_5\ =\ (int)\ c.45_4;\l\
|escape_37\ =\ escape_table[_5];\l\
|#\ DEBUG\ escape\ =\>\ escape_37\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_225\ =\ self_35(D)-\>max_output_len;\l\
|if\ (escape_37\ ==\ 0)\l\
\ \ goto\ \<bb\ 11\>;\ [33.00%]\l\
else\l\
\ \ goto\ \<bb\ 12\>;\ [67.00%]\l\
}"];
fn_223_basic_block_11 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:344590592\<bb\ 11\>:\l\
|_189\ =\ ivtmp.754_197\ +\ 1;\l\
|_188\ =\ (long\ int)\ _189;\l\
goto\ \<bb\ 28\>;\ [100.00%]\l\
}"];
fn_223_basic_block_12 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:699623329\<bb\ 12\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (start_102\ \<\ i_116)\l\
\ \ goto\ \<bb\ 13\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 17\>;\ [50.00%]\l\
}"];
fn_223_basic_block_28 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1043448021\<bb\ 28\>:\l\
|#\ start_22\ =\ PHI\ \<start_102(11),\ _190(27)\>\l\
|#\ prephitmp_209\ =\ PHI\ \<prephitmp_199(11),\ pretmp_208(27)\>\l\
|#\ prephitmp_211\ =\ PHI\ \<_188(11),\ _190(27)\>\l\
|#\ prephitmp_212\ =\ PHI\ \<prephitmp_196(11),\ prephitmp_207(27)\>\l\
|#\ DEBUG\ start\ =\>\ start_22\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ start_22\l\
|#\ DEBUG\ i\ =\>\ i_116\ +\ 1\l\
|#\ DEBUG\ BEGIN_STMT\l\
|ivtmp.754_192\ =\ ivtmp.754_197\ +\ 1;\l\
|if\ (prephitmp_209\ \>\ prephitmp_211)\l\
\ \ goto\ \<bb\ 10\>;\ [97.25%]\l\
else\l\
\ \ goto\ \<bb\ 29\>;\ [2.75%]\l\
}"];
fn_223_basic_block_13 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:349811664\<bb\ 13\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_6\ =\ i_116\ -\ start_102;\l\
|start.46_7\ =\ (sizetype)\ start_102;\l\
|_8\ =\ _184\ +\ start.46_7;\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ _8\l\
|#\ DEBUG\ n\ =\>\ _6\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_60\ =\ _6\ +\ prephitmp_196;\l\
|#\ DEBUG\ required\ =\>\ required_60\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_60\ \>\ pretmp_225)\l\
\ \ goto\ \<bb\ 14\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 16\>;\ [90.00%]\l\
}"];
fn_223_basic_block_17 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:699367967\<bb\ 17\>:\l\
|#\ prephitmp_202\ =\ PHI\ \<prephitmp_196(12),\ _72(16)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_223\ =\ self_35(D)-\>max_output_len;\l\
|if\ (escape_37\ ==\ 117)\l\
\ \ goto\ \<bb\ 18\>;\ [34.00%]\l\
else\l\
\ \ goto\ \<bb\ 22\>;\ [66.00%]\l\
}"];
fn_223_basic_block_14 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34981167\<bb\ 14\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_65\ =\ mp_resize_cold\ (self_35(D),\ required_60);\l\
|if\ (_65\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 15\>;\ [99.27%]\l\
}"];
fn_223_basic_block_16 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:349556302\<bb\ 16\>:\l\
|#\ prephitmp_201\ =\ PHI\ \<prephitmp_196(13),\ pretmp_200(15)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_66\ =\ (long\ unsigned\ int)\ _6;\l\
|_67\ =\ self_35(D)-\>output_buffer_raw;\l\
|_69\ =\ (sizetype)\ prephitmp_201;\l\
|_70\ =\ _67\ +\ _69;\l\
|memcpy\ (_70,\ _8,\ n.9_66);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_71\ =\ self_35(D)-\>output_len;\l\
|_72\ =\ _6\ +\ _71;\l\
|self_35(D)-\>output_len\ =\ _72;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
}"];
fn_223_basic_block_18 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:237785111\<bb\ 18\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ hex\ =\>\ \"0123456789abcdef\"\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ escaped$0\ =\>\ 92\l\
|#\ DEBUG\ escaped$1\ =\>\ 117\l\
|#\ DEBUG\ escaped$2\ =\>\ 48\l\
|#\ DEBUG\ escaped$3\ =\>\ 48\l\
|_9\ =\ c_36\ \>\>\ 4;\l\
|_10\ =\ (sizetype)\ _9;\l\
|_11\ =\ \"0123456789abcdef\"\ +\ _10;\l\
|_12\ =\ *_11;\l\
|#\ DEBUG\ escaped$4\ =\>\ _12\l\
|_31\ =\ c_36\ &\ 15;\l\
|_13\ =\ (sizetype)\ _31;\l\
|_14\ =\ \"0123456789abcdef\"\ +\ _13;\l\
|_15\ =\ *_14;\l\
|#\ DEBUG\ escaped$5\ =\>\ _15\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ 6\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_74\ =\ prephitmp_202\ +\ 6;\l\
|#\ DEBUG\ required\ =\>\ required_74\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_74\ \>\ pretmp_223)\l\
\ \ goto\ \<bb\ 19\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 21\>;\ [90.00%]\l\
}"];
fn_223_basic_block_22 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:461582855\<bb\ 22\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped[0]\ =\ 92;\l\
|escaped[1]\ =\ escape_37;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ 2\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_87\ =\ prephitmp_202\ +\ 2;\l\
|#\ DEBUG\ required\ =\>\ required_87\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_87\ \>\ pretmp_223)\l\
\ \ goto\ \<bb\ 23\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 25\>;\ [90.00%]\l\
}"];
fn_223_basic_block_15 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34725805\<bb\ 15\>:\l\
|pretmp_200\ =\ self_35(D)-\>output_len;\l\
}"];
fn_223_basic_block_19 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:23778511\<bb\ 19\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_79\ =\ mp_resize_cold\ (self_35(D),\ required_74);\l\
|if\ (_79\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 20\>;\ [99.27%]\l\
}"];
fn_223_basic_block_21 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:237611528\<bb\ 21\>:\l\
|#\ prephitmp_206\ =\ PHI\ \<prephitmp_202(18),\ pretmp_205(20)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_80\ =\ self_35(D)-\>output_buffer_raw;\l\
|_82\ =\ (sizetype)\ prephitmp_206;\l\
|_83\ =\ _80\ +\ _82;\l\
|MEM\ \<unsigned\ int\>\ [(char\ *\ \{ref-all\})_83]\ =\ 808482140;\l\
|MEM[(char\ *\ \{ref-all\})_83\ +\ 4B]\ =\ _12;\l\
|MEM[(char\ *\ \{ref-all\})_83\ +\ 5B]\ =\ _15;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_84\ =\ self_35(D)-\>output_len;\l\
|_85\ =\ _84\ +\ 6;\l\
|self_35(D)-\>output_len\ =\ _85;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ escaped$0\ =\>\ NULL\l\
|#\ DEBUG\ escaped$1\ =\>\ NULL\l\
|#\ DEBUG\ escaped$2\ =\>\ NULL\l\
|#\ DEBUG\ escaped$3\ =\>\ NULL\l\
|#\ DEBUG\ escaped$4\ =\>\ NULL\l\
|#\ DEBUG\ escaped$5\ =\>\ NULL\l\
goto\ \<bb\ 27\>;\ [100.00%]\l\
}"];
fn_223_basic_block_23 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:46158286\<bb\ 23\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_92\ =\ mp_resize_cold\ (self_35(D),\ required_87);\l\
|if\ (_92\ \<\ 0)\l\
\ \ goto\ \<bb\ 26\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 24\>;\ [99.27%]\l\
}"];
fn_223_basic_block_25 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:461245900\<bb\ 25\>:\l\
|#\ prephitmp_204\ =\ PHI\ \<prephitmp_202(22),\ pretmp_203(24)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_93\ =\ self_35(D)-\>output_buffer_raw;\l\
|_95\ =\ (sizetype)\ prephitmp_204;\l\
|_96\ =\ _93\ +\ _95;\l\
|_34\ =\ MEM\ \<short\ unsigned\ int\>\ [(char\ *\ \{ref-all\})&escaped];\l\
|MEM\ \<short\ unsigned\ int\>\ [(char\ *\ \{ref-all\})_96]\ =\ _34;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_97\ =\ self_35(D)-\>output_len;\l\
|_98\ =\ _97\ +\ 2;\l\
|self_35(D)-\>output_len\ =\ _98;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 27\>;\ [100.00%]\l\
}"];
fn_223_basic_block_20 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:23604928\<bb\ 20\>:\l\
|pretmp_205\ =\ self_35(D)-\>output_len;\l\
}"];
fn_223_basic_block_27 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:698857428\<bb\ 27\>:\l\
|#\ prephitmp_207\ =\ PHI\ \<_85(21),\ _98(25)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_191\ =\ ivtmp.754_197\ +\ 1;\l\
|_190\ =\ (long\ int)\ _191;\l\
|#\ DEBUG\ start\ =\>\ _190\l\
|pretmp_208\ =\ len;\l\
}"];
fn_223_basic_block_24 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:45821331\<bb\ 24\>:\l\
|pretmp_203\ =\ self_35(D)-\>output_len;\l\
}"];
}
fn_223_basic_block_0 [shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];
fn_223_basic_block_1 [shape=Mdiamond,style=filled,fillcolor=white,label="EXIT"];
fn_223_basic_block_2 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30452973\<bb\ 2\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ str\ =\>\ obj_33(D)\l\
|#\ DEBUG\ size\ =\>\ &len\l\
|#\ DEBUG\ INLINE_ENTRY\ unicode_str_and_size\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_126\ =\ BIT_FIELD_REF\ \<MEM[(struct\ PyASCIIObject\ *)obj_33(D)],\ 8,\ 256\>;\l\
|_127\ =\ _126\ &\ 96;\l\
|if\ (_127\ ==\ 96)\l\
\ \ goto\ \<bb\ 3\>;\ [35.01%]\l\
else\l\
\ \ goto\ \<bb\ 4\>;\ [64.99%]\l\
}"];
fn_223_basic_block_3 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10661586\<bb\ 3\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_128\ =\ MEM[(struct\ PyASCIIObject\ *)obj_33(D)].length;\l\
|len\ =\ _128;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_129\ =\ obj_33(D)\ +\ 48;\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _129\l\
|#\ DEBUG\ BEGIN_STMT\l\
goto\ \<bb\ 6\>;\ [100.00%]\l\
}"];
fn_223_basic_block_4 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19791387\<bb\ 4\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_130\ =\ PyUnicode_AsUTF8AndSize\ (obj_33(D),\ &len);\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _130\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_130\ ==\ 0B)\l\
\ \ goto\ \<bb\ 5\>;\ [0.69%]\l\
else\l\
\ \ goto\ \<bb\ 6\>;\ [99.31%]\l\
}"];
fn_223_basic_block_5 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:623886\<bb\ 5\>:\l\
goto\ \<bb\ 38\>;\ [100.00%]\l\
}"];
fn_223_basic_block_6 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30315935\<bb\ 6\>:\l\
|#\ _184\ =\ PHI\ \<_130(4),\ _129(3)\>\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _184\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_46\ =\ self_35(D)-\>output_len;\l\
|required_47\ =\ _46\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_47\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_48\ =\ self_35(D)-\>max_output_len;\l\
|if\ (required_47\ \>\ _48)\l\
\ \ goto\ \<bb\ 7\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 9\>;\ [90.00%]\l\
}"];
fn_223_basic_block_7 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3031594\<bb\ 7\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_52\ =\ mp_resize_cold\ (self_35(D),\ required_47);\l\
|if\ (_52\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 8\>;\ [99.27%]\l\
}"];
fn_223_basic_block_8 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3009463\<bb\ 8\>:\l\
|pretmp_193\ =\ self_35(D)-\>output_len;\l\
}"];
fn_223_basic_block_9 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30293804\<bb\ 9\>:\l\
|#\ prephitmp_194\ =\ PHI\ \<_46(6),\ pretmp_193(8)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_53\ =\ self_35(D)-\>output_buffer_raw;\l\
|_55\ =\ (sizetype)\ prephitmp_194;\l\
|_56\ =\ _53\ +\ _55;\l\
|memcpy\ (_56,\ \"\\\"\",\ 1);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_57\ =\ self_35(D)-\>output_len;\l\
|_58\ =\ _57\ +\ 1;\l\
|self_35(D)-\>output_len\ =\ _58;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ i\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|len.47_49\ =\ len;\l\
|if\ (len.47_49\ \>\ 0)\l\
\ \ goto\ \<bb\ 10\>;\ [97.25%]\l\
else\l\
\ \ goto\ \<bb\ 29\>;\ [2.75%]\l\
}"];
fn_223_basic_block_26 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:336955\<bb\ 26\>:\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 38\>;\ [100.00%]\l\
}"];
fn_223_basic_block_29 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29527904\<bb\ 29\>:\l\
|#\ len.47_50\ =\ PHI\ \<prephitmp_209(28),\ len.47_49(9)\>\l\
|#\ i_117\ =\ PHI\ \<prephitmp_211(28),\ 0(9)\>\l\
|#\ start_103\ =\ PHI\ \<start_22(28),\ 0(9)\>\l\
|#\ prephitmp_216\ =\ PHI\ \<prephitmp_212(28),\ _58(9)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_222\ =\ self_35(D)-\>max_output_len;\l\
|if\ (len.47_50\ !=\ start_103)\l\
\ \ goto\ \<bb\ 30\>;\ [66.00%]\l\
else\l\
\ \ goto\ \<bb\ 34\>;\ [34.00%]\l\
}"];
fn_223_basic_block_30 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19488417\<bb\ 30\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_18\ =\ i_117\ -\ start_103;\l\
|start.49_19\ =\ (sizetype)\ start_103;\l\
|_20\ =\ _184\ +\ start.49_19;\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ _20\l\
|#\ DEBUG\ n\ =\>\ _18\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_100\ =\ _18\ +\ prephitmp_216;\l\
|#\ DEBUG\ required\ =\>\ required_100\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_100\ \>\ pretmp_222)\l\
\ \ goto\ \<bb\ 31\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 33\>;\ [90.00%]\l\
}"];
fn_223_basic_block_31 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1948842\<bb\ 31\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_105\ =\ mp_resize_cold\ (self_35(D),\ required_100);\l\
|if\ (_105\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 32\>;\ [99.27%]\l\
}"];
fn_223_basic_block_32 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1934615\<bb\ 32\>:\l\
|pretmp_217\ =\ self_35(D)-\>output_len;\l\
}"];
fn_223_basic_block_33 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19474190\<bb\ 33\>:\l\
|#\ prephitmp_218\ =\ PHI\ \<prephitmp_216(30),\ pretmp_217(32)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_106\ =\ (long\ unsigned\ int)\ _18;\l\
|_107\ =\ self_35(D)-\>output_buffer_raw;\l\
|_109\ =\ (sizetype)\ prephitmp_218;\l\
|_110\ =\ _107\ +\ _109;\l\
|memcpy\ (_110,\ _20,\ n.9_106);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_111\ =\ self_35(D)-\>output_len;\l\
|_112\ =\ _18\ +\ _111;\l\
|self_35(D)-\>output_len\ =\ _112;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
}"];
fn_223_basic_block_34 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29513677\<bb\ 34\>:\l\
|#\ prephitmp_219\ =\ PHI\ \<prephitmp_216(29),\ _112(33)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_35(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_114\ =\ prephitmp_219\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_114\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_115\ =\ self_35(D)-\>max_output_len;\l\
|if\ (required_114\ \>\ _115)\l\
\ \ goto\ \<bb\ 35\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 37\>;\ [90.00%]\l\
}"];
fn_223_basic_block_35 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2951368\<bb\ 35\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_119\ =\ mp_resize_cold\ (self_35(D),\ required_114);\l\
|if\ (_119\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 36\>;\ [99.27%]\l\
}"];
fn_223_basic_block_36 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2929823\<bb\ 36\>:\l\
|pretmp_220\ =\ self_35(D)-\>output_len;\l\
}"];
fn_223_basic_block_37 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29492133\<bb\ 37\>:\l\
|#\ prephitmp_221\ =\ PHI\ \<prephitmp_219(34),\ pretmp_220(36)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_120\ =\ self_35(D)-\>output_buffer_raw;\l\
|_122\ =\ (sizetype)\ prephitmp_221;\l\
|_123\ =\ _120\ +\ _122;\l\
|memcpy\ (_123,\ \"\\\"\",\ 1);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_124\ =\ self_35(D)-\>output_len;\l\
|_125\ =\ _124\ +\ 1;\l\
|self_35(D)-\>output_len\ =\ _125;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_223_basic_block_38 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:30452974\<bb\ 38\>:\l\
|#\ _24\ =\ PHI\ \<-1(5),\ -1(26),\ 0(37)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ escaped$0\ =\>\ NULL\l\
|#\ DEBUG\ escaped$1\ =\>\ NULL\l\
|#\ DEBUG\ escaped$2\ =\>\ NULL\l\
|#\ DEBUG\ escaped$3\ =\>\ NULL\l\
|#\ DEBUG\ escaped$4\ =\>\ NULL\l\
|#\ DEBUG\ escaped$5\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|len\ =\{v\}\ \{CLOBBER\};\l\
|return\ _24;\l\
}"];
fn_223_basic_block_0:s -> fn_223_basic_block_2:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_2:s -> fn_223_basic_block_3:n [style="solid,bold",color=black,weight=10,constraint=true,label="[35%]"];
fn_223_basic_block_2:s -> fn_223_basic_block_4:n [style="solid,bold",color=black,weight=10,constraint=true,label="[64%]"];
fn_223_basic_block_3:s -> fn_223_basic_block_6:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_4:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_4:s -> fn_223_basic_block_6:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_5:s -> fn_223_basic_block_38:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_6:s -> fn_223_basic_block_7:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_6:s -> fn_223_basic_block_9:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_7:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_7:s -> fn_223_basic_block_8:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_8:s -> fn_223_basic_block_9:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_9:s -> fn_223_basic_block_10:n [style="solid,bold",color=black,weight=10,constraint=true,label="[97%]"];
fn_223_basic_block_9:s -> fn_223_basic_block_29:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_223_basic_block_10:s -> fn_223_basic_block_11:n [style="solid,bold",color=black,weight=10,constraint=true,label="[33%]"];
fn_223_basic_block_10:s -> fn_223_basic_block_12:n [style="solid,bold",color=black,weight=10,constraint=true,label="[67%]"];
fn_223_basic_block_11:s -> fn_223_basic_block_28:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_12:s -> fn_223_basic_block_13:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_223_basic_block_12:s -> fn_223_basic_block_17:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_223_basic_block_13:s -> fn_223_basic_block_14:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_13:s -> fn_223_basic_block_16:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_14:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_14:s -> fn_223_basic_block_15:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_15:s -> fn_223_basic_block_16:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_16:s -> fn_223_basic_block_17:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_17:s -> fn_223_basic_block_18:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_223_basic_block_17:s -> fn_223_basic_block_22:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_223_basic_block_18:s -> fn_223_basic_block_19:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_18:s -> fn_223_basic_block_21:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_19:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_19:s -> fn_223_basic_block_20:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_20:s -> fn_223_basic_block_21:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_21:s -> fn_223_basic_block_27:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_22:s -> fn_223_basic_block_23:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_22:s -> fn_223_basic_block_25:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_23:s -> fn_223_basic_block_26:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_23:s -> fn_223_basic_block_24:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_24:s -> fn_223_basic_block_25:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_25:s -> fn_223_basic_block_27:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_26:s -> fn_223_basic_block_38:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_27:s -> fn_223_basic_block_28:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_28:s -> fn_223_basic_block_10:n [style="dotted,bold",color=blue,weight=10,constraint=false,label="[97%]"];
fn_223_basic_block_28:s -> fn_223_basic_block_29:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_223_basic_block_29:s -> fn_223_basic_block_30:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_223_basic_block_29:s -> fn_223_basic_block_34:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_223_basic_block_30:s -> fn_223_basic_block_31:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_30:s -> fn_223_basic_block_33:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_31:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_31:s -> fn_223_basic_block_32:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_32:s -> fn_223_basic_block_33:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_33:s -> fn_223_basic_block_34:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_34:s -> fn_223_basic_block_35:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_34:s -> fn_223_basic_block_37:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_35:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_35:s -> fn_223_basic_block_36:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_36:s -> fn_223_basic_block_37:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_37:s -> fn_223_basic_block_38:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_38:s -> fn_223_basic_block_1:n [style="solid,bold",color=black,weight=10,constraint=true,label="[100%]"];
fn_223_basic_block_0:s -> fn_223_basic_block_1:n [style="invis",constraint=true];
}
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
digraph "small.graph" {
overlap=false;
subgraph "cluster_json_encode_str" {
style="dashed";
color="black";
label="json_encode_str ()";
subgraph cluster_223_1 {
style="filled";
color="darkgreen";
fillcolor="grey88";
label="loop 1";
labeljust=l;
penwidth=2;
fn_223_basic_block_10 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1034442873\<bb\ 10\>:\l\
|#\ start_97\ =\ PHI\ \<start_22(23),\ 0(9)\>\l\
|#\ prephitmp_185\ =\ PHI\ \<prephitmp_196(23),\ _66(9)\>\l\
|#\ ivtmp.750_50\ =\ PHI\ \<ivtmp.750_48(23),\ 0(9)\>\l\
|i_111\ =\ (Py_ssize_t)\ ivtmp.750_50;\l\
|#\ DEBUG\ start\ =\>\ start_97\l\
|#\ DEBUG\ i\ =\>\ i_111\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c_37\ =\ MEM[(const\ char\ *)_169\ +\ ivtmp.750_50\ *\ 1];\l\
|#\ DEBUG\ c\ =\>\ c_37\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c.45_3\ =\ (unsigned\ char)\ c_37;\l\
|_4\ =\ (int)\ c.45_3;\l\
|escape_38\ =\ escape_table[_4];\l\
|#\ DEBUG\ escape\ =\>\ escape_38\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_208\ =\ self_36(D)-\>max_output_len;\l\
|if\ (escape_38\ ==\ 0)\l\
\ \ goto\ \<bb\ 11\>;\ [33.00%]\l\
else\l\
\ \ goto\ \<bb\ 12\>;\ [67.00%]\l\
}"];
fn_223_basic_block_11 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:341366146\<bb\ 11\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_197\ =\ ivtmp.750_50\ +\ 1;\l\
|_187\ =\ (long\ int)\ _197;\l\
goto\ \<bb\ 23\>;\ [100.00%]\l\
}"];
fn_223_basic_block_12 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:693076727\<bb\ 12\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (start_97\ \<\ i_111)\l\
\ \ goto\ \<bb\ 13\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 17\>;\ [50.00%]\l\
}"];
fn_223_basic_block_23 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1033684139\<bb\ 23\>:\l\
|#\ start_22\ =\ PHI\ \<_198(21),\ start_97(11)\>\l\
|#\ prephitmp_195\ =\ PHI\ \<_198(21),\ _187(11)\>\l\
|#\ prephitmp_196\ =\ PHI\ \<_93(21),\ prephitmp_185(11)\>\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
|#\ DEBUG\ start\ =\>\ start_22\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ start_22\l\
|#\ DEBUG\ i\ =\>\ i_111\ +\ 1\l\
|#\ DEBUG\ BEGIN_STMT\l\
|len.49_16\ =\ len;\l\
|ivtmp.750_48\ =\ ivtmp.750_50\ +\ 1;\l\
|if\ (len.49_16\ \>\ prephitmp_195)\l\
\ \ goto\ \<bb\ 10\>;\ [96.34%]\l\
else\l\
\ \ goto\ \<bb\ 24\>;\ [3.66%]\l\
}"];
fn_223_basic_block_13 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:346538363\<bb\ 13\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_5\ =\ i_111\ -\ start_97;\l\
|start.46_6\ =\ (sizetype)\ start_97;\l\
|_7\ =\ _169\ +\ start.46_6;\l\
|#\ DEBUG\ self\ =\>\ self_36(D)\l\
|#\ DEBUG\ s\ =\>\ _7\l\
|#\ DEBUG\ n\ =\>\ _5\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_68\ =\ _5\ +\ prephitmp_185;\l\
|#\ DEBUG\ required\ =\>\ required_68\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_68\ \>\ pretmp_208)\l\
\ \ goto\ \<bb\ 14\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 16\>;\ [90.00%]\l\
}"];
fn_223_basic_block_17 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:692823754\<bb\ 17\>:\l\
|#\ prephitmp_190\ =\ PHI\ \<prephitmp_185(12),\ _80(16)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (escape_38\ ==\ 117)\l\
\ \ goto\ \<bb\ 34\>;\ [34.00%]\l\
else\l\
\ \ goto\ \<bb\ 35\>;\ [66.00%]\l\
}"];
fn_223_basic_block_14 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34653837\<bb\ 14\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_73\ =\ mp_resize_cold\ (self_36(D),\ required_68);\l\
|if\ (_73\ \<\ 0)\l\
\ \ goto\ \<bb\ 22\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 15\>;\ [99.27%]\l\
}"];
fn_223_basic_block_16 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:346285390\<bb\ 16\>:\l\
|#\ prephitmp_189\ =\ PHI\ \<prephitmp_185(13),\ pretmp_188(15)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_74\ =\ (long\ unsigned\ int)\ _5;\l\
|_75\ =\ self_36(D)-\>output_buffer_raw;\l\
|_77\ =\ (sizetype)\ prephitmp_189;\l\
|_78\ =\ _75\ +\ _77;\l\
|memcpy\ (_78,\ _7,\ n.9_74);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_79\ =\ self_36(D)-\>output_len;\l\
|_80\ =\ _5\ +\ _79;\l\
|self_36(D)-\>output_len\ =\ _80;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
}"];
fn_223_basic_block_34 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:235560079\<bb\ 34\>:\l\
|#\ DEBUG\ size\ =\>\ 6\l\
|#\ DEBUG\ BEGIN_STMT\l\
|MEM\ \<unsigned\ int\>\ [(char\ *)&escaped]\ =\ 808482140;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ size\ =\>\ 6\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ hex\ =\>\ \"0123456789abcdef\"\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_8\ =\ c_37\ \>\>\ 4;\l\
|_9\ =\ (sizetype)\ _8;\l\
|_10\ =\ \"0123456789abcdef\"\ +\ _9;\l\
|_11\ =\ *_10;\l\
|escaped[4]\ =\ _11;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_33\ =\ c_37\ &\ 15;\l\
|_12\ =\ (sizetype)\ _33;\l\
|_13\ =\ \"0123456789abcdef\"\ +\ _12;\l\
|_14\ =\ *_13;\l\
|escaped[5]\ =\ _14;\l\
goto\ \<bb\ 18\>;\ [100.00%]\l\
}"];
fn_223_basic_block_35 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:457263675\<bb\ 35\>:\l\
|#\ DEBUG\ size\ =\>\ 2\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped[0]\ =\ 92;\l\
|escaped[1]\ =\ escape_38;\l\
|MEM\ \<unsigned\ int\>\ [(void\ *)&escaped\ +\ 2B]\ =\ 12336;\l\
|#\ DEBUG\ BEGIN_STMT\l\
goto\ \<bb\ 18\>;\ [100.00%]\l\
}"];
fn_223_basic_block_15 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34400864\<bb\ 15\>:\l\
|pretmp_188\ =\ self_36(D)-\>output_len;\l\
}"];
fn_223_basic_block_18 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:692823754\<bb\ 18\>:\l\
|#\ iftmp.47_165\ =\ PHI\ \<2(35),\ 6(34)\>\l\
|#\ prephitmp_191\ =\ PHI\ \<2(35),\ 6(34)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_36(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ (long\ int)\ iftmp.47_165\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_82\ =\ prephitmp_190\ +\ prephitmp_191;\l\
|#\ DEBUG\ required\ =\>\ required_82\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_83\ =\ self_36(D)-\>max_output_len;\l\
|if\ (required_82\ \>\ _83)\l\
\ \ goto\ \<bb\ 19\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 21\>;\ [90.00%]\l\
}"];
fn_223_basic_block_19 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:69282376\<bb\ 19\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_87\ =\ mp_resize_cold\ (self_36(D),\ required_82);\l\
|if\ (_87\ \<\ 0)\l\
\ \ goto\ \<bb\ 22\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 20\>;\ [99.27%]\l\
}"];
fn_223_basic_block_21 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:692317992\<bb\ 21\>:\l\
|#\ prephitmp_193\ =\ PHI\ \<prephitmp_190(18),\ pretmp_192(20)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_88\ =\ self_36(D)-\>output_buffer_raw;\l\
|_90\ =\ (sizetype)\ prephitmp_193;\l\
|_91\ =\ _88\ +\ _90;\l\
|memcpy\ (_91,\ &escaped,\ iftmp.47_165);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_92\ =\ self_36(D)-\>output_len;\l\
|_93\ =\ _92\ +\ prephitmp_191;\l\
|self_36(D)-\>output_len\ =\ _93;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_199\ =\ ivtmp.750_50\ +\ 1;\l\
|_198\ =\ (long\ int)\ _199;\l\
|#\ DEBUG\ start\ =\>\ _198\l\
goto\ \<bb\ 23\>;\ [100.00%]\l\
}"];
fn_223_basic_block_20 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:68776615\<bb\ 20\>:\l\
|pretmp_192\ =\ self_36(D)-\>output_len;\l\
}"];
}
fn_223_basic_block_0 [shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];
fn_223_basic_block_1 [shape=Mdiamond,style=filled,fillcolor=white,label="EXIT"];
fn_223_basic_block_2 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:40268156\<bb\ 2\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ str\ =\>\ obj_35(D)\l\
|#\ DEBUG\ size\ =\>\ &len\l\
|#\ DEBUG\ INLINE_ENTRY\ unicode_str_and_size\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_121\ =\ BIT_FIELD_REF\ \<MEM[(struct\ PyASCIIObject\ *)obj_35(D)],\ 8,\ 256\>;\l\
|_122\ =\ _121\ &\ 96;\l\
|if\ (_122\ ==\ 96)\l\
\ \ goto\ \<bb\ 3\>;\ [35.01%]\l\
else\l\
\ \ goto\ \<bb\ 4\>;\ [64.99%]\l\
}"];
fn_223_basic_block_3 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:14097882\<bb\ 3\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_123\ =\ MEM[(struct\ PyASCIIObject\ *)obj_35(D)].length;\l\
|len\ =\ _123;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_124\ =\ obj_35(D)\ +\ 48;\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _124\l\
|#\ DEBUG\ BEGIN_STMT\l\
goto\ \<bb\ 6\>;\ [100.00%]\l\
}"];
fn_223_basic_block_4 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:26170275\<bb\ 4\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_125\ =\ PyUnicode_AsUTF8AndSize\ (obj_35(D),\ &len);\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _125\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_125\ ==\ 0B)\l\
\ \ goto\ \<bb\ 5\>;\ [0.69%]\l\
else\l\
\ \ goto\ \<bb\ 6\>;\ [99.31%]\l\
}"];
fn_223_basic_block_5 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:258078\<bb\ 5\>:\l\
goto\ \<bb\ 33\>;\ [100.00%]\l\
}"];
fn_223_basic_block_6 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:40086950\<bb\ 6\>:\l\
|#\ _169\ =\ PHI\ \<_125(4),\ _124(3)\>\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _169\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_36(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_53\ =\ self_36(D)-\>output_len;\l\
|required_54\ =\ _53\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_54\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_55\ =\ self_36(D)-\>max_output_len;\l\
|if\ (required_54\ \>\ _55)\l\
\ \ goto\ \<bb\ 7\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 9\>;\ [90.00%]\l\
}"];
fn_223_basic_block_7 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:4008695\<bb\ 7\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_59\ =\ mp_resize_cold\ (self_36(D),\ required_54);\l\
|if\ (_59\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 8\>;\ [99.27%]\l\
}"];
fn_223_basic_block_8 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3979432\<bb\ 8\>:\l\
|pretmp_182\ =\ self_36(D)-\>output_len;\l\
}"];
fn_223_basic_block_9 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:40057686\<bb\ 9\>:\l\
|#\ prephitmp_183\ =\ PHI\ \<_53(6),\ pretmp_182(8)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_61\ =\ self_36(D)-\>output_buffer_raw;\l\
|_63\ =\ (sizetype)\ prephitmp_183;\l\
|_64\ =\ _61\ +\ _63;\l\
|memcpy\ (_64,\ \"\\\"\",\ 1);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_65\ =\ self_36(D)-\>output_len;\l\
|_66\ =\ _65\ +\ 1;\l\
|self_36(D)-\>output_len\ =\ _66;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ i\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|len.49_56\ =\ len;\l\
|if\ (len.49_56\ \>\ 0)\l\
\ \ goto\ \<bb\ 10\>;\ [96.34%]\l\
else\l\
\ \ goto\ \<bb\ 24\>;\ [3.66%]\l\
}"];
fn_223_basic_block_22 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:758734\<bb\ 22\>:\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 33\>;\ [100.00%]\l\
}"];
fn_223_basic_block_24 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:39298952\<bb\ 24\>:\l\
|#\ len.49_57\ =\ PHI\ \<len.49_16(23),\ len.49_56(9)\>\l\
|#\ i_112\ =\ PHI\ \<prephitmp_195(23),\ 0(9)\>\l\
|#\ start_98\ =\ PHI\ \<start_22(23),\ 0(9)\>\l\
|#\ prephitmp_200\ =\ PHI\ \<prephitmp_196(23),\ _66(9)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|pretmp_206\ =\ self_36(D)-\>max_output_len;\l\
|if\ (len.49_57\ !=\ start_98)\l\
\ \ goto\ \<bb\ 25\>;\ [66.00%]\l\
else\l\
\ \ goto\ \<bb\ 29\>;\ [34.00%]\l\
}"];
fn_223_basic_block_25 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:25937308\<bb\ 25\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_18\ =\ i_112\ -\ start_98;\l\
|start.51_19\ =\ (sizetype)\ start_98;\l\
|_20\ =\ _169\ +\ start.51_19;\l\
|#\ DEBUG\ self\ =\>\ self_36(D)\l\
|#\ DEBUG\ s\ =\>\ _20\l\
|#\ DEBUG\ n\ =\>\ _18\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_95\ =\ _18\ +\ prephitmp_200;\l\
|#\ DEBUG\ required\ =\>\ required_95\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (required_95\ \>\ pretmp_206)\l\
\ \ goto\ \<bb\ 26\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 28\>;\ [90.00%]\l\
}"];
fn_223_basic_block_26 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2593731\<bb\ 26\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_100\ =\ mp_resize_cold\ (self_36(D),\ required_95);\l\
|if\ (_100\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 27\>;\ [99.27%]\l\
}"];
fn_223_basic_block_27 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2574797\<bb\ 27\>:\l\
|pretmp_201\ =\ self_36(D)-\>output_len;\l\
}"];
fn_223_basic_block_28 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:25918374\<bb\ 28\>:\l\
|#\ prephitmp_202\ =\ PHI\ \<prephitmp_200(25),\ pretmp_201(27)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_101\ =\ (long\ unsigned\ int)\ _18;\l\
|_102\ =\ self_36(D)-\>output_buffer_raw;\l\
|_104\ =\ (sizetype)\ prephitmp_202;\l\
|_105\ =\ _102\ +\ _104;\l\
|memcpy\ (_105,\ _20,\ n.9_101);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_106\ =\ self_36(D)-\>output_len;\l\
|_107\ =\ _18\ +\ _106;\l\
|self_36(D)-\>output_len\ =\ _107;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
}"];
fn_223_basic_block_29 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:39280018\<bb\ 29\>:\l\
|#\ prephitmp_203\ =\ PHI\ \<prephitmp_200(24),\ _107(28)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_36(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|required_109\ =\ prephitmp_203\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_109\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_110\ =\ self_36(D)-\>max_output_len;\l\
|if\ (required_109\ \>\ _110)\l\
\ \ goto\ \<bb\ 30\>;\ [10.00%]\l\
else\l\
\ \ goto\ \<bb\ 32\>;\ [90.00%]\l\
}"];
fn_223_basic_block_30 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3928002\<bb\ 30\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_114\ =\ mp_resize_cold\ (self_36(D),\ required_109);\l\
|if\ (_114\ \<\ 0)\l\
\ \ goto\ \<bb\ 5\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 31\>;\ [99.27%]\l\
}"];
fn_223_basic_block_31 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3899328\<bb\ 31\>:\l\
|pretmp_204\ =\ self_36(D)-\>output_len;\l\
}"];
fn_223_basic_block_32 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:39251343\<bb\ 32\>:\l\
|#\ prephitmp_205\ =\ PHI\ \<prephitmp_203(29),\ pretmp_204(31)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_115\ =\ self_36(D)-\>output_buffer_raw;\l\
|_117\ =\ (sizetype)\ prephitmp_205;\l\
|_118\ =\ _115\ +\ _117;\l\
|memcpy\ (_118,\ \"\\\"\",\ 1);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_119\ =\ self_36(D)-\>output_len;\l\
|_120\ =\ _119\ +\ 1;\l\
|self_36(D)-\>output_len\ =\ _120;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_223_basic_block_33 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:40268156\<bb\ 33\>:\l\
|#\ _24\ =\ PHI\ \<-1(5),\ 0(32),\ -1(22)\>\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|len\ =\{v\}\ \{CLOBBER\};\l\
|return\ _24;\l\
}"];
fn_223_basic_block_0:s -> fn_223_basic_block_2:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_2:s -> fn_223_basic_block_3:n [style="solid,bold",color=black,weight=10,constraint=true,label="[35%]"];
fn_223_basic_block_2:s -> fn_223_basic_block_4:n [style="solid,bold",color=black,weight=10,constraint=true,label="[64%]"];
fn_223_basic_block_3:s -> fn_223_basic_block_6:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_4:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_4:s -> fn_223_basic_block_6:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_5:s -> fn_223_basic_block_33:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_6:s -> fn_223_basic_block_7:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_6:s -> fn_223_basic_block_9:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_7:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_7:s -> fn_223_basic_block_8:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_8:s -> fn_223_basic_block_9:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_9:s -> fn_223_basic_block_10:n [style="solid,bold",color=black,weight=10,constraint=true,label="[96%]"];
fn_223_basic_block_9:s -> fn_223_basic_block_24:n [style="solid,bold",color=black,weight=10,constraint=true,label="[3%]"];
fn_223_basic_block_10:s -> fn_223_basic_block_11:n [style="solid,bold",color=black,weight=10,constraint=true,label="[33%]"];
fn_223_basic_block_10:s -> fn_223_basic_block_12:n [style="solid,bold",color=black,weight=10,constraint=true,label="[67%]"];
fn_223_basic_block_11:s -> fn_223_basic_block_23:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_12:s -> fn_223_basic_block_13:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_223_basic_block_12:s -> fn_223_basic_block_17:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_223_basic_block_13:s -> fn_223_basic_block_14:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_13:s -> fn_223_basic_block_16:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_14:s -> fn_223_basic_block_22:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_14:s -> fn_223_basic_block_15:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_15:s -> fn_223_basic_block_16:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_16:s -> fn_223_basic_block_17:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_17:s -> fn_223_basic_block_34:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_223_basic_block_17:s -> fn_223_basic_block_35:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_223_basic_block_18:s -> fn_223_basic_block_19:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_18:s -> fn_223_basic_block_21:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_19:s -> fn_223_basic_block_22:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_19:s -> fn_223_basic_block_20:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_20:s -> fn_223_basic_block_21:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_21:s -> fn_223_basic_block_23:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_22:s -> fn_223_basic_block_33:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_23:s -> fn_223_basic_block_10:n [style="dotted,bold",color=blue,weight=10,constraint=false,label="[96%]"];
fn_223_basic_block_23:s -> fn_223_basic_block_24:n [style="solid,bold",color=black,weight=10,constraint=true,label="[3%]"];
fn_223_basic_block_24:s -> fn_223_basic_block_25:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_223_basic_block_24:s -> fn_223_basic_block_29:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_223_basic_block_25:s -> fn_223_basic_block_26:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_25:s -> fn_223_basic_block_28:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_26:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_26:s -> fn_223_basic_block_27:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_27:s -> fn_223_basic_block_28:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_28:s -> fn_223_basic_block_29:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_29:s -> fn_223_basic_block_30:n [style="solid,bold",color=black,weight=10,constraint=true,label="[10%]"];
fn_223_basic_block_29:s -> fn_223_basic_block_32:n [style="solid,bold",color=black,weight=10,constraint=true,label="[90%]"];
fn_223_basic_block_30:s -> fn_223_basic_block_5:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_223_basic_block_30:s -> fn_223_basic_block_31:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_223_basic_block_31:s -> fn_223_basic_block_32:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_32:s -> fn_223_basic_block_33:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_33:s -> fn_223_basic_block_1:n [style="solid,bold",color=black,weight=10,constraint=true,label="[100%]"];
fn_223_basic_block_34:s -> fn_223_basic_block_18:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_35:s -> fn_223_basic_block_18:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_223_basic_block_0:s -> fn_223_basic_block_1:n [style="invis",constraint=true];
}
}
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.47.3 (0)
-->
<!-- Title: small.graph Pages: 1 -->
<svg width="921pt" height="9241pt"
viewBox="0.00 0.00 921.00 9241.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 9237)">
<title>small.graph</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-9237 917,-9237 917,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_json_encode_str</title>
<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="8,-8 8,-9225 905,-9225 905,-8 8,-8"/>
<text text-anchor="middle" x="456.5" y="-9209.8" font-family="Times,serif" font-size="14.00">json_encode_str ()</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_223_1</title>
<polygon fill="#e0e0e0" stroke="darkgreen" stroke-width="2" points="90,-2956 90,-7115 823,-7115 823,-2956 90,-2956"/>
<text text-anchor="middle" x="115.5" y="-7099.8" font-family="Times,serif" font-size="14.00">loop 1</text>
</g>
<!-- fn_223_basic_block_10 -->
<g id="node1" class="node">
<title>fn_223_basic_block_10</title>
<polygon fill="lightgrey" stroke="black" points="319,-6624.5 319,-7083.5 639,-7083.5 639,-6624.5 319,-6624.5"/>
<text text-anchor="start" x="327" y="-7068.3" font-family="Times,serif" font-size="14.00">COUNT:1034442873&lt;bb 10&gt;:</text>
<polyline fill="none" stroke="black" points="319,-7060.5 639,-7060.5 "/>
<text text-anchor="start" x="327" y="-7045.3" font-family="Times,serif" font-size="14.00"># start_97 = PHI &lt;start_22(23), 0(9)&gt;</text>
<polyline fill="none" stroke="black" points="319,-7037.5 639,-7037.5 "/>
<text text-anchor="start" x="327" y="-7022.3" font-family="Times,serif" font-size="14.00"># prephitmp_185 = PHI &lt;prephitmp_196(23), _66(9)&gt;</text>
<polyline fill="none" stroke="black" points="319,-7014.5 639,-7014.5 "/>
<text text-anchor="start" x="327" y="-6999.3" font-family="Times,serif" font-size="14.00"># ivtmp.750_50 = PHI &lt;ivtmp.750_48(23), 0(9)&gt;</text>
<polyline fill="none" stroke="black" points="319,-6991.5 639,-6991.5 "/>
<text text-anchor="start" x="327" y="-6976.3" font-family="Times,serif" font-size="14.00">i_111 = (Py_ssize_t) ivtmp.750_50;</text>
<polyline fill="none" stroke="black" points="319,-6968.5 639,-6968.5 "/>
<text text-anchor="start" x="327" y="-6953.3" font-family="Times,serif" font-size="14.00"># DEBUG start =&gt; start_97</text>
<polyline fill="none" stroke="black" points="319,-6945.5 639,-6945.5 "/>
<text text-anchor="start" x="327" y="-6930.3" font-family="Times,serif" font-size="14.00"># DEBUG i =&gt; i_111</text>
<polyline fill="none" stroke="black" points="319,-6922.5 639,-6922.5 "/>
<text text-anchor="start" x="327" y="-6907.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="319,-6899.5 639,-6899.5 "/>
<text text-anchor="start" x="327" y="-6884.3" font-family="Times,serif" font-size="14.00">c_37 = MEM[(const char *)_169 + ivtmp.750_50 * 1];</text>
<polyline fill="none" stroke="black" points="319,-6876.5 639,-6876.5 "/>
<text text-anchor="start" x="327" y="-6861.3" font-family="Times,serif" font-size="14.00"># DEBUG c =&gt; c_37</text>
<polyline fill="none" stroke="black" points="319,-6853.5 639,-6853.5 "/>
<text text-anchor="start" x="327" y="-6838.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="319,-6830.5 639,-6830.5 "/>
<text text-anchor="start" x="327" y="-6815.3" font-family="Times,serif" font-size="14.00">c.45_3 = (unsigned char) c_37;</text>
<polyline fill="none" stroke="black" points="319,-6807.5 639,-6807.5 "/>
<text text-anchor="start" x="327" y="-6792.3" font-family="Times,serif" font-size="14.00">_4 = (int) c.45_3;</text>
<polyline fill="none" stroke="black" points="319,-6784.5 639,-6784.5 "/>
<text text-anchor="start" x="327" y="-6769.3" font-family="Times,serif" font-size="14.00">escape_38 = escape_table[_4];</text>
<polyline fill="none" stroke="black" points="319,-6761.5 639,-6761.5 "/>
<text text-anchor="start" x="327" y="-6746.3" font-family="Times,serif" font-size="14.00"># DEBUG escape =&gt; escape_38</text>
<polyline fill="none" stroke="black" points="319,-6738.5 639,-6738.5 "/>
<text text-anchor="start" x="327" y="-6723.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="319,-6715.5 639,-6715.5 "/>
<text text-anchor="start" x="327" y="-6700.3" font-family="Times,serif" font-size="14.00">pretmp_208 = self_36(D)&#45;&gt;max_output_len;</text>
<polyline fill="none" stroke="black" points="319,-6692.5 639,-6692.5 "/>
<text text-anchor="start" x="327" y="-6677.3" font-family="Times,serif" font-size="14.00">if (escape_38 == 0)</text>
<text text-anchor="start" x="327" y="-6662.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 11&gt;; [33.00%]</text>
<text text-anchor="start" x="327" y="-6647.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="327" y="-6632.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 12&gt;; [67.00%]</text>
</g>
<!-- fn_223_basic_block_11 -->
<g id="node2" class="node">
<title>fn_223_basic_block_11</title>
<polygon fill="lightgrey" stroke="black" points="597,-3544.5 597,-3651.5 775,-3651.5 775,-3544.5 597,-3544.5"/>
<text text-anchor="start" x="605" y="-3636.3" font-family="Times,serif" font-size="14.00">COUNT:341366146&lt;bb 11&gt;:</text>
<polyline fill="none" stroke="black" points="597,-3628.5 775,-3628.5 "/>
<text text-anchor="start" x="605" y="-3613.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="597,-3605.5 775,-3605.5 "/>
<text text-anchor="start" x="605" y="-3590.3" font-family="Times,serif" font-size="14.00">_197 = ivtmp.750_50 + 1;</text>
<polyline fill="none" stroke="black" points="597,-3582.5 775,-3582.5 "/>
<text text-anchor="start" x="605" y="-3567.3" font-family="Times,serif" font-size="14.00">_187 = (long int) _197;</text>
<text text-anchor="start" x="605" y="-3552.3" font-family="Times,serif" font-size="14.00">goto &lt;bb 23&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_10&#45;&gt;fn_223_basic_block_11 -->
<g id="edge15" class="edge">
<title>fn_223_basic_block_10:s&#45;&gt;fn_223_basic_block_11:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M479,-6624C479,-6620.07 741,-6520.43 741,-6516.5 741,-6516.5 741,-6516.5 741,-5282.5 741,-5209.97 743.08,-5191.37 756,-5120 758.71,-5105.04 757.03,-5099.94 765,-5087 771.27,-5076.82 780.09,-5079.91 785,-5069 805.96,-5022.41 792,-4200.58 792,-4149.5 792,-4149.5 792,-4149.5 792,-3909.5 792,-3789.64 691.92,-3777 686.25,-3663.21"/>
<polygon fill="black" stroke="black" stroke-width="2" points="689.74,-3662.91 686,-3653 682.75,-3663.08 689.74,-3662.91"/>
<text text-anchor="middle" x="758.5" y="-5279.8" font-family="Times,serif" font-size="14.00">[33%]</text>
</g>
<!-- fn_223_basic_block_12 -->
<g id="node3" class="node">
<title>fn_223_basic_block_12</title>
<polygon fill="lightgrey" stroke="black" points="390,-6458.5 390,-6572.5 568,-6572.5 568,-6458.5 390,-6458.5"/>
<text text-anchor="start" x="398" y="-6557.3" font-family="Times,serif" font-size="14.00">COUNT:693076727&lt;bb 12&gt;:</text>
<polyline fill="none" stroke="black" points="390,-6549.5 568,-6549.5 "/>
<text text-anchor="start" x="398" y="-6534.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="390,-6526.5 568,-6526.5 "/>
<text text-anchor="start" x="398" y="-6511.3" font-family="Times,serif" font-size="14.00">if (start_97 &lt; i_111)</text>
<text text-anchor="start" x="398" y="-6496.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 13&gt;; [50.00%]</text>
<text text-anchor="start" x="398" y="-6481.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="398" y="-6466.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 17&gt;; [50.00%]</text>
</g>
<!-- fn_223_basic_block_10&#45;&gt;fn_223_basic_block_12 -->
<g id="edge16" class="edge">
<title>fn_223_basic_block_10:s&#45;&gt;fn_223_basic_block_12:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M479,-6624C479,-6605.23 479,-6598.12 479,-6583.35"/>
<polygon fill="black" stroke="black" stroke-width="2" points="482.5,-6583 479,-6573 475.5,-6583 482.5,-6583"/>
<text text-anchor="middle" x="496.5" y="-6594.8" font-family="Times,serif" font-size="14.00">[67%]</text>
</g>
<!-- fn_223_basic_block_23 -->
<g id="node4" class="node">
<title>fn_223_basic_block_23</title>
<polygon fill="lightgrey" stroke="black" points="300,-2964.5 300,-3308.5 624,-3308.5 624,-2964.5 300,-2964.5"/>
<text text-anchor="start" x="308" y="-3293.3" font-family="Times,serif" font-size="14.00">COUNT:1033684139&lt;bb 23&gt;:</text>
<polyline fill="none" stroke="black" points="300,-3285.5 624,-3285.5 "/>
<text text-anchor="start" x="308" y="-3270.3" font-family="Times,serif" font-size="14.00"># start_22 = PHI &lt;_198(21), start_97(11)&gt;</text>
<polyline fill="none" stroke="black" points="300,-3262.5 624,-3262.5 "/>
<text text-anchor="start" x="308" y="-3247.3" font-family="Times,serif" font-size="14.00"># prephitmp_195 = PHI &lt;_198(21), _187(11)&gt;</text>
<polyline fill="none" stroke="black" points="300,-3239.5 624,-3239.5 "/>
<text text-anchor="start" x="308" y="-3224.3" font-family="Times,serif" font-size="14.00"># prephitmp_196 = PHI &lt;_93(21), prephitmp_185(11)&gt;</text>
<polyline fill="none" stroke="black" points="300,-3216.5 624,-3216.5 "/>
<text text-anchor="start" x="308" y="-3201.3" font-family="Times,serif" font-size="14.00">escaped ={v} {CLOBBER};</text>
<polyline fill="none" stroke="black" points="300,-3193.5 624,-3193.5 "/>
<text text-anchor="start" x="308" y="-3178.3" font-family="Times,serif" font-size="14.00"># DEBUG start =&gt; start_22</text>
<polyline fill="none" stroke="black" points="300,-3170.5 624,-3170.5 "/>
<text text-anchor="start" x="308" y="-3155.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="300,-3147.5 624,-3147.5 "/>
<text text-anchor="start" x="308" y="-3132.3" font-family="Times,serif" font-size="14.00"># DEBUG start =&gt; start_22</text>
<polyline fill="none" stroke="black" points="300,-3124.5 624,-3124.5 "/>
<text text-anchor="start" x="308" y="-3109.3" font-family="Times,serif" font-size="14.00"># DEBUG i =&gt; i_111 + 1</text>
<polyline fill="none" stroke="black" points="300,-3101.5 624,-3101.5 "/>
<text text-anchor="start" x="308" y="-3086.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="300,-3078.5 624,-3078.5 "/>
<text text-anchor="start" x="308" y="-3063.3" font-family="Times,serif" font-size="14.00">len.49_16 = len;</text>
<polyline fill="none" stroke="black" points="300,-3055.5 624,-3055.5 "/>
<text text-anchor="start" x="308" y="-3040.3" font-family="Times,serif" font-size="14.00">ivtmp.750_48 = ivtmp.750_50 + 1;</text>
<polyline fill="none" stroke="black" points="300,-3032.5 624,-3032.5 "/>
<text text-anchor="start" x="308" y="-3017.3" font-family="Times,serif" font-size="14.00">if (len.49_16 &gt; prephitmp_195)</text>
<text text-anchor="start" x="308" y="-3002.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 10&gt;; [96.34%]</text>
<text text-anchor="start" x="308" y="-2987.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="308" y="-2972.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 24&gt;; [3.66%]</text>
</g>
<!-- fn_223_basic_block_11&#45;&gt;fn_223_basic_block_23 -->
<g id="edge17" class="edge">
<title>fn_223_basic_block_11:s&#45;&gt;fn_223_basic_block_23:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M686,-3543C686,-3450.74 656.64,-3421.66 588,-3360 583.28,-3355.76 497.62,-3328 470.3,-3314.74"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="472.22,-3311.81 462,-3309 468.23,-3317.57 472.22,-3311.81"/>
<text text-anchor="middle" x="558" y="-3330.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_13 -->
<g id="node5" class="node">
<title>fn_223_basic_block_13</title>
<polygon fill="lightgrey" stroke="black" points="238,-6039.5 238,-6406.5 468,-6406.5 468,-6039.5 238,-6039.5"/>
<text text-anchor="start" x="246" y="-6391.3" font-family="Times,serif" font-size="14.00">COUNT:346538363&lt;bb 13&gt;:</text>
<polyline fill="none" stroke="black" points="238,-6383.5 468,-6383.5 "/>
<text text-anchor="start" x="246" y="-6368.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="238,-6360.5 468,-6360.5 "/>
<text text-anchor="start" x="246" y="-6345.3" font-family="Times,serif" font-size="14.00">_5 = i_111 &#45; start_97;</text>
<polyline fill="none" stroke="black" points="238,-6337.5 468,-6337.5 "/>
<text text-anchor="start" x="246" y="-6322.3" font-family="Times,serif" font-size="14.00">start.46_6 = (sizetype) start_97;</text>
<polyline fill="none" stroke="black" points="238,-6314.5 468,-6314.5 "/>
<text text-anchor="start" x="246" y="-6299.3" font-family="Times,serif" font-size="14.00">_7 = _169 + start.46_6;</text>
<polyline fill="none" stroke="black" points="238,-6291.5 468,-6291.5 "/>
<text text-anchor="start" x="246" y="-6276.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; self_36(D)</text>
<polyline fill="none" stroke="black" points="238,-6268.5 468,-6268.5 "/>
<text text-anchor="start" x="246" y="-6253.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; _7</text>
<polyline fill="none" stroke="black" points="238,-6245.5 468,-6245.5 "/>
<text text-anchor="start" x="246" y="-6230.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; _5</text>
<polyline fill="none" stroke="black" points="238,-6222.5 468,-6222.5 "/>
<text text-anchor="start" x="246" y="-6207.3" font-family="Times,serif" font-size="14.00"># DEBUG INLINE_ENTRY mp_write</text>
<polyline fill="none" stroke="black" points="238,-6199.5 468,-6199.5 "/>
<text text-anchor="start" x="246" y="-6184.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="238,-6176.5 468,-6176.5 "/>
<text text-anchor="start" x="246" y="-6161.3" font-family="Times,serif" font-size="14.00">required_68 = _5 + prephitmp_185;</text>
<polyline fill="none" stroke="black" points="238,-6153.5 468,-6153.5 "/>
<text text-anchor="start" x="246" y="-6138.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; required_68</text>
<polyline fill="none" stroke="black" points="238,-6130.5 468,-6130.5 "/>
<text text-anchor="start" x="246" y="-6115.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="238,-6107.5 468,-6107.5 "/>
<text text-anchor="start" x="246" y="-6092.3" font-family="Times,serif" font-size="14.00">if (required_68 &gt; pretmp_208)</text>
<text text-anchor="start" x="246" y="-6077.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 14&gt;; [10.00%]</text>
<text text-anchor="start" x="246" y="-6062.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="246" y="-6047.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 16&gt;; [90.00%]</text>
</g>
<!-- fn_223_basic_block_12&#45;&gt;fn_223_basic_block_13 -->
<g id="edge18" class="edge">
<title>fn_223_basic_block_12:s&#45;&gt;fn_223_basic_block_13:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M479,-6458C479,-6445.14 387.63,-6428.15 360.5,-6414.06"/>
<polygon fill="black" stroke="black" stroke-width="2" points="362.68,-6411.31 353,-6407 357.88,-6416.4 362.68,-6411.31"/>
<text text-anchor="middle" x="455.5" y="-6428.8" font-family="Times,serif" font-size="14.00">[50%]</text>
</g>
<!-- fn_223_basic_block_17 -->
<g id="node6" class="node">
<title>fn_223_basic_block_17</title>
<polygon fill="lightgrey" stroke="black" points="121,-5120.5 121,-5257.5 445,-5257.5 445,-5120.5 121,-5120.5"/>
<text text-anchor="start" x="129" y="-5242.3" font-family="Times,serif" font-size="14.00">COUNT:692823754&lt;bb 17&gt;:</text>
<polyline fill="none" stroke="black" points="121,-5234.5 445,-5234.5 "/>
<text text-anchor="start" x="129" y="-5219.3" font-family="Times,serif" font-size="14.00"># prephitmp_190 = PHI &lt;prephitmp_185(12), _80(16)&gt;</text>
<polyline fill="none" stroke="black" points="121,-5211.5 445,-5211.5 "/>
<text text-anchor="start" x="129" y="-5196.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="121,-5188.5 445,-5188.5 "/>
<text text-anchor="start" x="129" y="-5173.3" font-family="Times,serif" font-size="14.00">if (escape_38 == 117)</text>
<text text-anchor="start" x="129" y="-5158.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 34&gt;; [34.00%]</text>
<text text-anchor="start" x="129" y="-5143.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="129" y="-5128.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 35&gt;; [66.00%]</text>
</g>
<!-- fn_223_basic_block_12&#45;&gt;fn_223_basic_block_17 -->
<g id="edge19" class="edge">
<title>fn_223_basic_block_12:s&#45;&gt;fn_223_basic_block_17:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M479,-6458C479,-6353.94 487,-6328.06 487,-6224 487,-6224 487,-6224 487,-5504 487,-5417.22 531.73,-5376.34 477,-5309 470.88,-5301.47 328.21,-5276.81 291.53,-5263.22"/>
<polygon fill="black" stroke="black" stroke-width="2" points="293.36,-5260.23 283,-5258 289.71,-5266.2 293.36,-5260.23"/>
<text text-anchor="middle" x="504.5" y="-5820.8" font-family="Times,serif" font-size="14.00">[50%]</text>
</g>
<!-- fn_223_basic_block_23&#45;&gt;fn_223_basic_block_10 -->
<g id="edge35" class="edge">
<title>fn_223_basic_block_23:s&#45;&gt;fn_223_basic_block_10:n</title>
<path fill="none" stroke="blue" stroke-width="2" stroke-dasharray="1,5" d="M462,-2963.5C462,-2954.5 617.61,-2958.16 624,-2964.5 630.8,-2971.24 623.57,-3301.12 629,-3309 651.53,-3341.69 674.22,-3329.83 712,-3342 743.4,-3352.12 763.38,-3334.25 784,-3360 820.61,-3405.72 796.07,-3828.43 797,-3887 801.6,-4178.08 800.1,-4250.89 799,-4542 798.56,-4659.11 838.68,-4960.34 795,-5069 790.9,-5079.21 782.07,-5076.77 778,-5087 775.54,-5093.2 777.96,-5095.33 778,-5102 778.44,-5179.34 779.56,-5198.66 780,-5276 780.04,-5282.67 780.73,-5284.37 780,-5291 779.11,-5299.15 777.06,-5300.87 776,-5309 752.35,-5489.84 764.42,-5536.7 759,-5719 756.62,-5799.09 764.99,-6362.16 746,-6440 730.36,-6504.11 713.79,-6516.32 680,-6573 665.79,-6596.83 652.54,-6597.6 644,-6624 640.07,-6636.16 648.06,-7074.99 639,-7084 633.66,-7089.32 522.41,-7092.73 488.64,-7088.23"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="489.59,-7084.86 479,-7085 487.37,-7091.49 489.59,-7084.86"/>
<text text-anchor="middle" x="797.5" y="-5185.3" font-family="Times,serif" font-size="14.00">[96%]</text>
</g>
<!-- fn_223_basic_block_24 -->
<g id="node27" class="node">
<title>fn_223_basic_block_24</title>
<polygon fill="lightgrey" stroke="black" points="303.5,-2683.5 303.5,-2912.5 620.5,-2912.5 620.5,-2683.5 303.5,-2683.5"/>
<text text-anchor="start" x="311.5" y="-2897.3" font-family="Times,serif" font-size="14.00">COUNT:39298952&lt;bb 24&gt;:</text>
<polyline fill="none" stroke="black" points="303.5,-2889.5 620.5,-2889.5 "/>
<text text-anchor="start" x="311.5" y="-2874.3" font-family="Times,serif" font-size="14.00"># len.49_57 = PHI &lt;len.49_16(23), len.49_56(9)&gt;</text>
<polyline fill="none" stroke="black" points="303.5,-2866.5 620.5,-2866.5 "/>
<text text-anchor="start" x="311.5" y="-2851.3" font-family="Times,serif" font-size="14.00"># i_112 = PHI &lt;prephitmp_195(23), 0(9)&gt;</text>
<polyline fill="none" stroke="black" points="303.5,-2843.5 620.5,-2843.5 "/>
<text text-anchor="start" x="311.5" y="-2828.3" font-family="Times,serif" font-size="14.00"># start_98 = PHI &lt;start_22(23), 0(9)&gt;</text>
<polyline fill="none" stroke="black" points="303.5,-2820.5 620.5,-2820.5 "/>
<text text-anchor="start" x="311.5" y="-2805.3" font-family="Times,serif" font-size="14.00"># prephitmp_200 = PHI &lt;prephitmp_196(23), _66(9)&gt;</text>
<polyline fill="none" stroke="black" points="303.5,-2797.5 620.5,-2797.5 "/>
<text text-anchor="start" x="311.5" y="-2782.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="303.5,-2774.5 620.5,-2774.5 "/>
<text text-anchor="start" x="311.5" y="-2759.3" font-family="Times,serif" font-size="14.00">pretmp_206 = self_36(D)&#45;&gt;max_output_len;</text>
<polyline fill="none" stroke="black" points="303.5,-2751.5 620.5,-2751.5 "/>
<text text-anchor="start" x="311.5" y="-2736.3" font-family="Times,serif" font-size="14.00">if (len.49_57 != start_98)</text>
<text text-anchor="start" x="311.5" y="-2721.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 25&gt;; [66.00%]</text>
<text text-anchor="start" x="311.5" y="-2706.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="311.5" y="-2691.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 29&gt;; [34.00%]</text>
</g>
<!-- fn_223_basic_block_23&#45;&gt;fn_223_basic_block_24 -->
<g id="edge36" class="edge">
<title>fn_223_basic_block_23:s&#45;&gt;fn_223_basic_block_24:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M462,-2963.5C462,-2944.91 462,-2937.87 462,-2923.25"/>
<polygon fill="black" stroke="black" stroke-width="2" points="465.5,-2923 462,-2913 458.5,-2923 465.5,-2923"/>
<text text-anchor="middle" x="476" y="-2934.8" font-family="Times,serif" font-size="14.00">[3%]</text>
</g>
<!-- fn_223_basic_block_14 -->
<g id="node7" class="node">
<title>fn_223_basic_block_14</title>
<polygon fill="lightgrey" stroke="black" points="111.5,-5850.5 111.5,-5987.5 398.5,-5987.5 398.5,-5850.5 111.5,-5850.5"/>
<text text-anchor="start" x="119.5" y="-5972.3" font-family="Times,serif" font-size="14.00">COUNT:34653837&lt;bb 14&gt;:</text>
<polyline fill="none" stroke="black" points="111.5,-5964.5 398.5,-5964.5 "/>
<text text-anchor="start" x="119.5" y="-5949.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="111.5,-5941.5 398.5,-5941.5 "/>
<text text-anchor="start" x="119.5" y="-5926.3" font-family="Times,serif" font-size="14.00">_73 = mp_resize_cold (self_36(D), required_68);</text>
<polyline fill="none" stroke="black" points="111.5,-5918.5 398.5,-5918.5 "/>
<text text-anchor="start" x="119.5" y="-5903.3" font-family="Times,serif" font-size="14.00">if (_73 &lt; 0)</text>
<text text-anchor="start" x="119.5" y="-5888.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 22&gt;; [0.73%]</text>
<text text-anchor="start" x="119.5" y="-5873.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="119.5" y="-5858.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 15&gt;; [99.27%]</text>
</g>
<!-- fn_223_basic_block_13&#45;&gt;fn_223_basic_block_14 -->
<g id="edge20" class="edge">
<title>fn_223_basic_block_13:s&#45;&gt;fn_223_basic_block_14:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M353,-6039C353,-6028.79 285.16,-6008.76 262.37,-5995.25"/>
<polygon fill="black" stroke="black" stroke-width="2" points="264.58,-5992.52 255,-5988 259.67,-5997.51 264.58,-5992.52"/>
<text text-anchor="middle" x="338.5" y="-6009.8" font-family="Times,serif" font-size="14.00">[10%]</text>
</g>
<!-- fn_223_basic_block_16 -->
<g id="node8" class="node">
<title>fn_223_basic_block_16</title>
<polygon fill="lightgrey" stroke="black" points="98,-5309.5 98,-5700.5 468,-5700.5 468,-5309.5 98,-5309.5"/>
<text text-anchor="start" x="106" y="-5685.3" font-family="Times,serif" font-size="14.00">COUNT:346285390&lt;bb 16&gt;:</text>
<polyline fill="none" stroke="black" points="98,-5677.5 468,-5677.5 "/>
<text text-anchor="start" x="106" y="-5662.3" font-family="Times,serif" font-size="14.00"># prephitmp_189 = PHI &lt;prephitmp_185(13), pretmp_188(15)&gt;</text>
<polyline fill="none" stroke="black" points="98,-5654.5 468,-5654.5 "/>
<text text-anchor="start" x="106" y="-5639.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="98,-5631.5 468,-5631.5 "/>
<text text-anchor="start" x="106" y="-5616.3" font-family="Times,serif" font-size="14.00">n.9_74 = (long unsigned int) _5;</text>
<polyline fill="none" stroke="black" points="98,-5608.5 468,-5608.5 "/>
<text text-anchor="start" x="106" y="-5593.3" font-family="Times,serif" font-size="14.00">_75 = self_36(D)&#45;&gt;output_buffer_raw;</text>
<polyline fill="none" stroke="black" points="98,-5585.5 468,-5585.5 "/>
<text text-anchor="start" x="106" y="-5570.3" font-family="Times,serif" font-size="14.00">_77 = (sizetype) prephitmp_189;</text>
<polyline fill="none" stroke="black" points="98,-5562.5 468,-5562.5 "/>
<text text-anchor="start" x="106" y="-5547.3" font-family="Times,serif" font-size="14.00">_78 = _75 + _77;</text>
<polyline fill="none" stroke="black" points="98,-5539.5 468,-5539.5 "/>
<text text-anchor="start" x="106" y="-5524.3" font-family="Times,serif" font-size="14.00">memcpy (_78, _7, n.9_74);</text>
<polyline fill="none" stroke="black" points="98,-5516.5 468,-5516.5 "/>
<text text-anchor="start" x="106" y="-5501.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="98,-5493.5 468,-5493.5 "/>
<text text-anchor="start" x="106" y="-5478.3" font-family="Times,serif" font-size="14.00">_79 = self_36(D)&#45;&gt;output_len;</text>
<polyline fill="none" stroke="black" points="98,-5470.5 468,-5470.5 "/>
<text text-anchor="start" x="106" y="-5455.3" font-family="Times,serif" font-size="14.00">_80 = _5 + _79;</text>
<polyline fill="none" stroke="black" points="98,-5447.5 468,-5447.5 "/>
<text text-anchor="start" x="106" y="-5432.3" font-family="Times,serif" font-size="14.00">self_36(D)&#45;&gt;output_len = _80;</text>
<polyline fill="none" stroke="black" points="98,-5424.5 468,-5424.5 "/>
<text text-anchor="start" x="106" y="-5409.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="98,-5401.5 468,-5401.5 "/>
<text text-anchor="start" x="106" y="-5386.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="98,-5378.5 468,-5378.5 "/>
<text text-anchor="start" x="106" y="-5363.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="98,-5355.5 468,-5355.5 "/>
<text text-anchor="start" x="106" y="-5340.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="98,-5332.5 468,-5332.5 "/>
<text text-anchor="start" x="106" y="-5317.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
</g>
<!-- fn_223_basic_block_13&#45;&gt;fn_223_basic_block_16 -->
<g id="edge21" class="edge">
<title>fn_223_basic_block_13:s&#45;&gt;fn_223_basic_block_16:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M353,-6039C353,-6005.66 394.66,-6018.55 408,-5988 428.98,-5939.93 437.07,-5795.65 408,-5752 386.91,-5720.33 364.28,-5733.27 329,-5719 312.78,-5712.44 293.2,-5718.85 285.92,-5710.61"/>
<polygon fill="black" stroke="black" stroke-width="2" points="289.25,-5709.55 283,-5701 282.55,-5711.59 289.25,-5709.55"/>
<text text-anchor="middle" x="443.5" y="-5820.8" font-family="Times,serif" font-size="14.00">[90%]</text>
</g>
<!-- fn_223_basic_block_34 -->
<g id="node9" class="node">
<title>fn_223_basic_block_34</title>
<polygon fill="lightgrey" stroke="black" points="448.5,-4593.5 448.5,-5068.5 775.5,-5068.5 775.5,-4593.5 448.5,-4593.5"/>
<text text-anchor="start" x="456.5" y="-5053.3" font-family="Times,serif" font-size="14.00">COUNT:235560079&lt;bb 34&gt;:</text>
<polyline fill="none" stroke="black" points="448.5,-5045.5 775.5,-5045.5 "/>
<text text-anchor="start" x="456.5" y="-5030.3" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; 6</text>
<polyline fill="none" stroke="black" points="448.5,-5022.5 775.5,-5022.5 "/>
<text text-anchor="start" x="456.5" y="-5007.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="448.5,-4999.5 775.5,-4999.5 "/>
<text text-anchor="start" x="456.5" y="-4984.3" font-family="Times,serif" font-size="14.00">MEM &lt;unsigned int&gt; [(char *)&amp;escaped] = 808482140;</text>
<polyline fill="none" stroke="black" points="448.5,-4976.5 775.5,-4976.5 "/>
<text text-anchor="start" x="456.5" y="-4961.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="448.5,-4953.5 775.5,-4953.5 "/>
<text text-anchor="start" x="456.5" y="-4938.3" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; 6</text>
<polyline fill="none" stroke="black" points="448.5,-4930.5 775.5,-4930.5 "/>
<text text-anchor="start" x="456.5" y="-4915.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="448.5,-4907.5 775.5,-4907.5 "/>
<text text-anchor="start" x="456.5" y="-4892.3" font-family="Times,serif" font-size="14.00"># DEBUG hex =&gt; &quot;0123456789abcdef&quot;</text>
<polyline fill="none" stroke="black" points="448.5,-4884.5 775.5,-4884.5 "/>
<text text-anchor="start" x="456.5" y="-4869.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="448.5,-4861.5 775.5,-4861.5 "/>
<text text-anchor="start" x="456.5" y="-4846.3" font-family="Times,serif" font-size="14.00">_8 = c_37 &gt;&gt; 4;</text>
<polyline fill="none" stroke="black" points="448.5,-4838.5 775.5,-4838.5 "/>
<text text-anchor="start" x="456.5" y="-4823.3" font-family="Times,serif" font-size="14.00">_9 = (sizetype) _8;</text>
<polyline fill="none" stroke="black" points="448.5,-4815.5 775.5,-4815.5 "/>
<text text-anchor="start" x="456.5" y="-4800.3" font-family="Times,serif" font-size="14.00">_10 = &quot;0123456789abcdef&quot; + _9;</text>
<polyline fill="none" stroke="black" points="448.5,-4792.5 775.5,-4792.5 "/>
<text text-anchor="start" x="456.5" y="-4777.3" font-family="Times,serif" font-size="14.00">_11 = *_10;</text>
<polyline fill="none" stroke="black" points="448.5,-4769.5 775.5,-4769.5 "/>
<text text-anchor="start" x="456.5" y="-4754.3" font-family="Times,serif" font-size="14.00">escaped[4] = _11;</text>
<polyline fill="none" stroke="black" points="448.5,-4746.5 775.5,-4746.5 "/>
<text text-anchor="start" x="456.5" y="-4731.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="448.5,-4723.5 775.5,-4723.5 "/>
<text text-anchor="start" x="456.5" y="-4708.3" font-family="Times,serif" font-size="14.00">_33 = c_37 &amp; 15;</text>
<polyline fill="none" stroke="black" points="448.5,-4700.5 775.5,-4700.5 "/>
<text text-anchor="start" x="456.5" y="-4685.3" font-family="Times,serif" font-size="14.00">_12 = (sizetype) _33;</text>
<polyline fill="none" stroke="black" points="448.5,-4677.5 775.5,-4677.5 "/>
<text text-anchor="start" x="456.5" y="-4662.3" font-family="Times,serif" font-size="14.00">_13 = &quot;0123456789abcdef&quot; + _12;</text>
<polyline fill="none" stroke="black" points="448.5,-4654.5 775.5,-4654.5 "/>
<text text-anchor="start" x="456.5" y="-4639.3" font-family="Times,serif" font-size="14.00">_14 = *_13;</text>
<polyline fill="none" stroke="black" points="448.5,-4631.5 775.5,-4631.5 "/>
<text text-anchor="start" x="456.5" y="-4616.3" font-family="Times,serif" font-size="14.00">escaped[5] = _14;</text>
<text text-anchor="start" x="456.5" y="-4601.3" font-family="Times,serif" font-size="14.00">goto &lt;bb 18&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_17&#45;&gt;fn_223_basic_block_34 -->
<g id="edge26" class="edge">
<title>fn_223_basic_block_17:s&#45;&gt;fn_223_basic_block_34:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M283,-5120C283,-5086.04 560.24,-5102.62 605.72,-5076.96"/>
<polygon fill="black" stroke="black" stroke-width="2" points="608.55,-5079.02 612,-5069 603.06,-5074.68 608.55,-5079.02"/>
<text text-anchor="middle" x="573.5" y="-5090.8" font-family="Times,serif" font-size="14.00">[34%]</text>
</g>
<!-- fn_223_basic_block_35 -->
<g id="node10" class="node">
<title>fn_223_basic_block_35</title>
<polygon fill="lightgrey" stroke="black" points="98,-4743 98,-4919 430,-4919 430,-4743 98,-4743"/>
<text text-anchor="start" x="106" y="-4903.8" font-family="Times,serif" font-size="14.00">COUNT:457263675&lt;bb 35&gt;:</text>
<polyline fill="none" stroke="black" points="98,-4896 430,-4896 "/>
<text text-anchor="start" x="106" y="-4880.8" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; 2</text>
<polyline fill="none" stroke="black" points="98,-4873 430,-4873 "/>
<text text-anchor="start" x="106" y="-4857.8" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="98,-4850 430,-4850 "/>
<text text-anchor="start" x="106" y="-4834.8" font-family="Times,serif" font-size="14.00">escaped[0] = 92;</text>
<polyline fill="none" stroke="black" points="98,-4827 430,-4827 "/>
<text text-anchor="start" x="106" y="-4811.8" font-family="Times,serif" font-size="14.00">escaped[1] = escape_38;</text>
<polyline fill="none" stroke="black" points="98,-4804 430,-4804 "/>
<text text-anchor="start" x="106" y="-4788.8" font-family="Times,serif" font-size="14.00">MEM &lt;unsigned int&gt; [(void *)&amp;escaped + 2B] = 12336;</text>
<polyline fill="none" stroke="black" points="98,-4781 430,-4781 "/>
<text text-anchor="start" x="106" y="-4765.8" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<text text-anchor="start" x="106" y="-4750.8" font-family="Times,serif" font-size="14.00">goto &lt;bb 18&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_17&#45;&gt;fn_223_basic_block_35 -->
<g id="edge27" class="edge">
<title>fn_223_basic_block_17:s&#45;&gt;fn_223_basic_block_35:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M283,-5120C283,-5034.2 265.46,-5011.07 264.08,-4930.16"/>
<polygon fill="black" stroke="black" stroke-width="2" points="267.58,-4929.97 264,-4920 260.58,-4930.03 267.58,-4929.97"/>
<text text-anchor="middle" x="299.5" y="-5090.8" font-family="Times,serif" font-size="14.00">[66%]</text>
</g>
<!-- fn_223_basic_block_15 -->
<g id="node11" class="node">
<title>fn_223_basic_block_15</title>
<polygon fill="lightgrey" stroke="black" points="167.5,-5752.5 167.5,-5798.5 398.5,-5798.5 398.5,-5752.5 167.5,-5752.5"/>
<text text-anchor="start" x="175.5" y="-5783.3" font-family="Times,serif" font-size="14.00">COUNT:34400864&lt;bb 15&gt;:</text>
<polyline fill="none" stroke="black" points="167.5,-5775.5 398.5,-5775.5 "/>
<text text-anchor="start" x="175.5" y="-5760.3" font-family="Times,serif" font-size="14.00">pretmp_188 = self_36(D)&#45;&gt;output_len;</text>
</g>
<!-- fn_223_basic_block_14&#45;&gt;fn_223_basic_block_15 -->
<g id="edge23" class="edge">
<title>fn_223_basic_block_14:s&#45;&gt;fn_223_basic_block_15:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M255,-5850C255,-5827.98 275.3,-5825.23 281.33,-5808.93"/>
<polygon fill="black" stroke="black" stroke-width="2" points="284.8,-5809.44 283,-5799 277.89,-5808.28 284.8,-5809.44"/>
<text text-anchor="middle" x="293.5" y="-5820.8" font-family="Times,serif" font-size="14.00">[99%]</text>
</g>
<!-- fn_223_basic_block_22 -->
<g id="node26" class="node">
<title>fn_223_basic_block_22</title>
<polygon fill="lightgrey" stroke="black" points="36,-539 36,-784 218,-784 218,-539 36,-539"/>
<text text-anchor="start" x="44" y="-768.8" font-family="Times,serif" font-size="14.00">COUNT:758734&lt;bb 22&gt;:</text>
<polyline fill="none" stroke="black" points="36,-761 218,-761 "/>
<text text-anchor="start" x="44" y="-745.8" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-738 218,-738 "/>
<text text-anchor="start" x="44" y="-722.8" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-715 218,-715 "/>
<text text-anchor="start" x="44" y="-699.8" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-692 218,-692 "/>
<text text-anchor="start" x="44" y="-676.8" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-669 218,-669 "/>
<text text-anchor="start" x="44" y="-653.8" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-646 218,-646 "/>
<text text-anchor="start" x="44" y="-630.8" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-623 218,-623 "/>
<text text-anchor="start" x="44" y="-607.8" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-600 218,-600 "/>
<text text-anchor="start" x="44" y="-584.8" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="36,-577 218,-577 "/>
<text text-anchor="start" x="44" y="-561.8" font-family="Times,serif" font-size="14.00">escaped ={v} {CLOBBER};</text>
<text text-anchor="start" x="44" y="-546.8" font-family="Times,serif" font-size="14.00">goto &lt;bb 33&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_14&#45;&gt;fn_223_basic_block_22 -->
<g id="edge22" class="edge">
<title>fn_223_basic_block_14:s&#45;&gt;fn_223_basic_block_22:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M255,-5850C255,-5765.23 79,-5861.27 79,-5776.5 79,-5776.5 79,-5776.5 79,-5093.5 79,-4589.85 101,-4464.15 101,-3960.5 101,-3960.5 101,-3960.5 101,-873.5 101,-836.38 122.54,-827.72 126.41,-795.71"/>
<polygon fill="black" stroke="black" stroke-width="2" points="129.92,-795.69 127,-785.5 122.93,-795.28 129.92,-795.69"/>
<text text-anchor="middle" x="115" y="-3132.8" font-family="Times,serif" font-size="14.00">[0%]</text>
</g>
<!-- fn_223_basic_block_16&#45;&gt;fn_223_basic_block_17 -->
<g id="edge25" class="edge">
<title>fn_223_basic_block_16:s&#45;&gt;fn_223_basic_block_17:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M283,-5309C283,-5290.23 283,-5283.12 283,-5268.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="286.5,-5268 283,-5258 279.5,-5268 286.5,-5268"/>
<text text-anchor="middle" x="304" y="-5279.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_18 -->
<g id="node12" class="node">
<title>fn_223_basic_block_18</title>
<polygon fill="lightgrey" stroke="black" points="336,-4174.5 336,-4541.5 620,-4541.5 620,-4174.5 336,-4174.5"/>
<text text-anchor="start" x="344" y="-4526.3" font-family="Times,serif" font-size="14.00">COUNT:692823754&lt;bb 18&gt;:</text>
<polyline fill="none" stroke="black" points="336,-4518.5 620,-4518.5 "/>
<text text-anchor="start" x="344" y="-4503.3" font-family="Times,serif" font-size="14.00"># iftmp.47_165 = PHI &lt;2(35), 6(34)&gt;</text>
<polyline fill="none" stroke="black" points="336,-4495.5 620,-4495.5 "/>
<text text-anchor="start" x="344" y="-4480.3" font-family="Times,serif" font-size="14.00"># prephitmp_191 = PHI &lt;2(35), 6(34)&gt;</text>
<polyline fill="none" stroke="black" points="336,-4472.5 620,-4472.5 "/>
<text text-anchor="start" x="344" y="-4457.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="336,-4449.5 620,-4449.5 "/>
<text text-anchor="start" x="344" y="-4434.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; self_36(D)</text>
<polyline fill="none" stroke="black" points="336,-4426.5 620,-4426.5 "/>
<text text-anchor="start" x="344" y="-4411.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; &amp;escaped</text>
<polyline fill="none" stroke="black" points="336,-4403.5 620,-4403.5 "/>
<text text-anchor="start" x="344" y="-4388.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; (long int) iftmp.47_165</text>
<polyline fill="none" stroke="black" points="336,-4380.5 620,-4380.5 "/>
<text text-anchor="start" x="344" y="-4365.3" font-family="Times,serif" font-size="14.00"># DEBUG INLINE_ENTRY mp_write</text>
<polyline fill="none" stroke="black" points="336,-4357.5 620,-4357.5 "/>
<text text-anchor="start" x="344" y="-4342.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="336,-4334.5 620,-4334.5 "/>
<text text-anchor="start" x="344" y="-4319.3" font-family="Times,serif" font-size="14.00">required_82 = prephitmp_190 + prephitmp_191;</text>
<polyline fill="none" stroke="black" points="336,-4311.5 620,-4311.5 "/>
<text text-anchor="start" x="344" y="-4296.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; required_82</text>
<polyline fill="none" stroke="black" points="336,-4288.5 620,-4288.5 "/>
<text text-anchor="start" x="344" y="-4273.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="336,-4265.5 620,-4265.5 "/>
<text text-anchor="start" x="344" y="-4250.3" font-family="Times,serif" font-size="14.00">_83 = self_36(D)&#45;&gt;max_output_len;</text>
<polyline fill="none" stroke="black" points="336,-4242.5 620,-4242.5 "/>
<text text-anchor="start" x="344" y="-4227.3" font-family="Times,serif" font-size="14.00">if (required_82 &gt; _83)</text>
<text text-anchor="start" x="344" y="-4212.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 19&gt;; [10.00%]</text>
<text text-anchor="start" x="344" y="-4197.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="344" y="-4182.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 21&gt;; [90.00%]</text>
</g>
<!-- fn_223_basic_block_34&#45;&gt;fn_223_basic_block_18 -->
<g id="edge52" class="edge">
<title>fn_223_basic_block_34:s&#45;&gt;fn_223_basic_block_18:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M612,-4593C612,-4533.14 493.74,-4596.98 479.41,-4552.1"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="482.85,-4551.42 478,-4542 475.92,-4552.39 482.85,-4551.42"/>
<text text-anchor="middle" x="625" y="-4563.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_35&#45;&gt;fn_223_basic_block_18 -->
<g id="edge53" class="edge">
<title>fn_223_basic_block_35:s&#45;&gt;fn_223_basic_block_18:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M264,-4742C264,-4629.78 347.59,-4625.08 439,-4560 450.66,-4551.7 466.77,-4556.46 474.09,-4551.31"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="477.36,-4552.58 478,-4542 470.9,-4549.87 477.36,-4552.58"/>
<text text-anchor="middle" x="460" y="-4563.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_15&#45;&gt;fn_223_basic_block_16 -->
<g id="edge24" class="edge">
<title>fn_223_basic_block_15:s&#45;&gt;fn_223_basic_block_16:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M283,-5752C283,-5733.23 283,-5726.12 283,-5711.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="286.5,-5711 283,-5701 279.5,-5711 286.5,-5711"/>
<text text-anchor="middle" x="304" y="-5722.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_19 -->
<g id="node13" class="node">
<title>fn_223_basic_block_19</title>
<polygon fill="lightgrey" stroke="black" points="222.5,-3985.5 222.5,-4122.5 509.5,-4122.5 509.5,-3985.5 222.5,-3985.5"/>
<text text-anchor="start" x="230.5" y="-4107.3" font-family="Times,serif" font-size="14.00">COUNT:69282376&lt;bb 19&gt;:</text>
<polyline fill="none" stroke="black" points="222.5,-4099.5 509.5,-4099.5 "/>
<text text-anchor="start" x="230.5" y="-4084.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="222.5,-4076.5 509.5,-4076.5 "/>
<text text-anchor="start" x="230.5" y="-4061.3" font-family="Times,serif" font-size="14.00">_87 = mp_resize_cold (self_36(D), required_82);</text>
<polyline fill="none" stroke="black" points="222.5,-4053.5 509.5,-4053.5 "/>
<text text-anchor="start" x="230.5" y="-4038.3" font-family="Times,serif" font-size="14.00">if (_87 &lt; 0)</text>
<text text-anchor="start" x="230.5" y="-4023.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 22&gt;; [0.73%]</text>
<text text-anchor="start" x="230.5" y="-4008.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="230.5" y="-3993.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 20&gt;; [99.27%]</text>
</g>
<!-- fn_223_basic_block_18&#45;&gt;fn_223_basic_block_19 -->
<g id="edge28" class="edge">
<title>fn_223_basic_block_18:s&#45;&gt;fn_223_basic_block_19:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M478,-4174C478,-4172.59 401.91,-4140.02 375.17,-4127.66"/>
<polygon fill="black" stroke="black" stroke-width="2" points="376.5,-4124.41 366,-4123 373.33,-4130.65 376.5,-4124.41"/>
<text text-anchor="middle" x="455.5" y="-4144.8" font-family="Times,serif" font-size="14.00">[10%]</text>
</g>
<!-- fn_223_basic_block_21 -->
<g id="node14" class="node">
<title>fn_223_basic_block_21</title>
<polygon fill="lightgrey" stroke="black" points="209,-3360.5 209,-3835.5 579,-3835.5 579,-3360.5 209,-3360.5"/>
<text text-anchor="start" x="217" y="-3820.3" font-family="Times,serif" font-size="14.00">COUNT:692317992&lt;bb 21&gt;:</text>
<polyline fill="none" stroke="black" points="209,-3812.5 579,-3812.5 "/>
<text text-anchor="start" x="217" y="-3797.3" font-family="Times,serif" font-size="14.00"># prephitmp_193 = PHI &lt;prephitmp_190(18), pretmp_192(20)&gt;</text>
<polyline fill="none" stroke="black" points="209,-3789.5 579,-3789.5 "/>
<text text-anchor="start" x="217" y="-3774.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="209,-3766.5 579,-3766.5 "/>
<text text-anchor="start" x="217" y="-3751.3" font-family="Times,serif" font-size="14.00">_88 = self_36(D)&#45;&gt;output_buffer_raw;</text>
<polyline fill="none" stroke="black" points="209,-3743.5 579,-3743.5 "/>
<text text-anchor="start" x="217" y="-3728.3" font-family="Times,serif" font-size="14.00">_90 = (sizetype) prephitmp_193;</text>
<polyline fill="none" stroke="black" points="209,-3720.5 579,-3720.5 "/>
<text text-anchor="start" x="217" y="-3705.3" font-family="Times,serif" font-size="14.00">_91 = _88 + _90;</text>
<polyline fill="none" stroke="black" points="209,-3697.5 579,-3697.5 "/>
<text text-anchor="start" x="217" y="-3682.3" font-family="Times,serif" font-size="14.00">memcpy (_91, &amp;escaped, iftmp.47_165);</text>
<polyline fill="none" stroke="black" points="209,-3674.5 579,-3674.5 "/>
<text text-anchor="start" x="217" y="-3659.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="209,-3651.5 579,-3651.5 "/>
<text text-anchor="start" x="217" y="-3636.3" font-family="Times,serif" font-size="14.00">_92 = self_36(D)&#45;&gt;output_len;</text>
<polyline fill="none" stroke="black" points="209,-3628.5 579,-3628.5 "/>
<text text-anchor="start" x="217" y="-3613.3" font-family="Times,serif" font-size="14.00">_93 = _92 + prephitmp_191;</text>
<polyline fill="none" stroke="black" points="209,-3605.5 579,-3605.5 "/>
<text text-anchor="start" x="217" y="-3590.3" font-family="Times,serif" font-size="14.00">self_36(D)&#45;&gt;output_len = _93;</text>
<polyline fill="none" stroke="black" points="209,-3582.5 579,-3582.5 "/>
<text text-anchor="start" x="217" y="-3567.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="209,-3559.5 579,-3559.5 "/>
<text text-anchor="start" x="217" y="-3544.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="209,-3536.5 579,-3536.5 "/>
<text text-anchor="start" x="217" y="-3521.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="209,-3513.5 579,-3513.5 "/>
<text text-anchor="start" x="217" y="-3498.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="209,-3490.5 579,-3490.5 "/>
<text text-anchor="start" x="217" y="-3475.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="209,-3467.5 579,-3467.5 "/>
<text text-anchor="start" x="217" y="-3452.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="209,-3444.5 579,-3444.5 "/>
<text text-anchor="start" x="217" y="-3429.3" font-family="Times,serif" font-size="14.00">_199 = ivtmp.750_50 + 1;</text>
<polyline fill="none" stroke="black" points="209,-3421.5 579,-3421.5 "/>
<text text-anchor="start" x="217" y="-3406.3" font-family="Times,serif" font-size="14.00">_198 = (long int) _199;</text>
<polyline fill="none" stroke="black" points="209,-3398.5 579,-3398.5 "/>
<text text-anchor="start" x="217" y="-3383.3" font-family="Times,serif" font-size="14.00"># DEBUG start =&gt; _198</text>
<text text-anchor="start" x="217" y="-3368.3" font-family="Times,serif" font-size="14.00">goto &lt;bb 23&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_18&#45;&gt;fn_223_basic_block_21 -->
<g id="edge29" class="edge">
<title>fn_223_basic_block_18:s&#45;&gt;fn_223_basic_block_21:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M478,-4174C478,-4144.92 509.34,-4150.43 519,-4123 553.84,-4024.07 577.14,-3974.3 519,-3887 497.91,-3855.33 475.28,-3868.27 440,-3854 423.78,-3847.44 404.2,-3853.85 396.92,-3845.61"/>
<polygon fill="black" stroke="black" stroke-width="2" points="400.25,-3844.55 394,-3836 393.55,-3846.59 400.25,-3844.55"/>
<text text-anchor="middle" x="569.5" y="-3955.8" font-family="Times,serif" font-size="14.00">[90%]</text>
</g>
<!-- fn_223_basic_block_20 -->
<g id="node15" class="node">
<title>fn_223_basic_block_20</title>
<polygon fill="lightgrey" stroke="black" points="278.5,-3887.5 278.5,-3933.5 509.5,-3933.5 509.5,-3887.5 278.5,-3887.5"/>
<text text-anchor="start" x="286.5" y="-3918.3" font-family="Times,serif" font-size="14.00">COUNT:68776615&lt;bb 20&gt;:</text>
<polyline fill="none" stroke="black" points="278.5,-3910.5 509.5,-3910.5 "/>
<text text-anchor="start" x="286.5" y="-3895.3" font-family="Times,serif" font-size="14.00">pretmp_192 = self_36(D)&#45;&gt;output_len;</text>
</g>
<!-- fn_223_basic_block_19&#45;&gt;fn_223_basic_block_20 -->
<g id="edge31" class="edge">
<title>fn_223_basic_block_19:s&#45;&gt;fn_223_basic_block_20:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M366,-3985C366,-3962.98 386.3,-3960.23 392.33,-3943.93"/>
<polygon fill="black" stroke="black" stroke-width="2" points="395.8,-3944.44 394,-3934 388.89,-3943.28 395.8,-3944.44"/>
<text text-anchor="middle" x="404.5" y="-3955.8" font-family="Times,serif" font-size="14.00">[99%]</text>
</g>
<!-- fn_223_basic_block_19&#45;&gt;fn_223_basic_block_22 -->
<g id="edge30" class="edge">
<title>fn_223_basic_block_19:s&#45;&gt;fn_223_basic_block_22:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M366,-3985C366,-3887.79 160,-4008.71 160,-3911.5 160,-3911.5 160,-3911.5 160,-873.5 160,-835.32 132.43,-828.31 127.69,-795.49"/>
<polygon fill="black" stroke="black" stroke-width="2" points="131.18,-795.24 127,-785.5 124.2,-795.72 131.18,-795.24"/>
<text text-anchor="middle" x="174" y="-2140.3" font-family="Times,serif" font-size="14.00">[0%]</text>
</g>
<!-- fn_223_basic_block_21&#45;&gt;fn_223_basic_block_23 -->
<g id="edge33" class="edge">
<title>fn_223_basic_block_21:s&#45;&gt;fn_223_basic_block_23:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M394,-3360C394,-3326.21 448.41,-3342.29 459.89,-3319.02"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="463.36,-3319.51 462,-3309 456.51,-3318.06 463.36,-3319.51"/>
<text text-anchor="middle" x="473" y="-3330.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_20&#45;&gt;fn_223_basic_block_21 -->
<g id="edge32" class="edge">
<title>fn_223_basic_block_20:s&#45;&gt;fn_223_basic_block_21:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M394,-3887C394,-3868.23 394,-3861.12 394,-3846.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="397.5,-3846 394,-3836 390.5,-3846 397.5,-3846"/>
<text text-anchor="middle" x="415" y="-3857.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_0 -->
<g id="node16" class="node">
<title>fn_223_basic_block_0</title>
<polygon fill="white" stroke="black" points="382,-9194 325.86,-9176 382,-9158 438.14,-9176 382,-9194"/>
<polyline fill="none" stroke="black" points="337.29,-9179.66 337.29,-9172.34 "/>
<polyline fill="none" stroke="black" points="370.57,-9161.66 393.43,-9161.66 "/>
<polyline fill="none" stroke="black" points="426.71,-9172.34 426.71,-9179.66 "/>
<polyline fill="none" stroke="black" points="393.43,-9190.34 370.57,-9190.34 "/>
<text text-anchor="middle" x="382" y="-9172.3" font-family="Times,serif" font-size="14.00">ENTRY</text>
</g>
<!-- fn_223_basic_block_1 -->
<g id="node17" class="node">
<title>fn_223_basic_block_1</title>
<polygon fill="white" stroke="black" points="421,-52 377.6,-34 421,-16 464.4,-34 421,-52"/>
<polyline fill="none" stroke="black" points="388.68,-38.6 388.68,-29.4 "/>
<polyline fill="none" stroke="black" points="409.92,-20.6 432.08,-20.6 "/>
<polyline fill="none" stroke="black" points="453.32,-29.4 453.32,-38.6 "/>
<polyline fill="none" stroke="black" points="432.08,-47.4 409.92,-47.4 "/>
<text text-anchor="middle" x="421" y="-30.3" font-family="Times,serif" font-size="14.00">EXIT</text>
</g>
<!-- fn_223_basic_block_0&#45;&gt;fn_223_basic_block_1 -->
<!-- fn_223_basic_block_2 -->
<g id="node18" class="node">
<title>fn_223_basic_block_2</title>
<polygon fill="lightgrey" stroke="black" points="151.5,-8808.5 151.5,-9106.5 612.5,-9106.5 612.5,-8808.5 151.5,-8808.5"/>
<text text-anchor="start" x="159.5" y="-9091.3" font-family="Times,serif" font-size="14.00">COUNT:40268156&lt;bb 2&gt;:</text>
<polyline fill="none" stroke="black" points="151.5,-9083.5 612.5,-9083.5 "/>
<text text-anchor="start" x="159.5" y="-9068.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="151.5,-9060.5 612.5,-9060.5 "/>
<text text-anchor="start" x="159.5" y="-9045.3" font-family="Times,serif" font-size="14.00"># DEBUG start =&gt; 0</text>
<polyline fill="none" stroke="black" points="151.5,-9037.5 612.5,-9037.5 "/>
<text text-anchor="start" x="159.5" y="-9022.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="151.5,-9014.5 612.5,-9014.5 "/>
<text text-anchor="start" x="159.5" y="-8999.3" font-family="Times,serif" font-size="14.00"># DEBUG str =&gt; obj_35(D)</text>
<polyline fill="none" stroke="black" points="151.5,-8991.5 612.5,-8991.5 "/>
<text text-anchor="start" x="159.5" y="-8976.3" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; &amp;len</text>
<polyline fill="none" stroke="black" points="151.5,-8968.5 612.5,-8968.5 "/>
<text text-anchor="start" x="159.5" y="-8953.3" font-family="Times,serif" font-size="14.00"># DEBUG INLINE_ENTRY unicode_str_and_size</text>
<polyline fill="none" stroke="black" points="151.5,-8945.5 612.5,-8945.5 "/>
<text text-anchor="start" x="159.5" y="-8930.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="151.5,-8922.5 612.5,-8922.5 "/>
<text text-anchor="start" x="159.5" y="-8907.3" font-family="Times,serif" font-size="14.00">_121 = BIT_FIELD_REF &lt;MEM[(struct PyASCIIObject *)obj_35(D)], 8, 256&gt;;</text>
<polyline fill="none" stroke="black" points="151.5,-8899.5 612.5,-8899.5 "/>
<text text-anchor="start" x="159.5" y="-8884.3" font-family="Times,serif" font-size="14.00">_122 = _121 &amp; 96;</text>
<polyline fill="none" stroke="black" points="151.5,-8876.5 612.5,-8876.5 "/>
<text text-anchor="start" x="159.5" y="-8861.3" font-family="Times,serif" font-size="14.00">if (_122 == 96)</text>
<text text-anchor="start" x="159.5" y="-8846.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 3&gt;; [35.01%]</text>
<text text-anchor="start" x="159.5" y="-8831.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="159.5" y="-8816.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 4&gt;; [64.99%]</text>
</g>
<!-- fn_223_basic_block_0&#45;&gt;fn_223_basic_block_2 -->
<g id="edge1" class="edge">
<title>fn_223_basic_block_0:s&#45;&gt;fn_223_basic_block_2:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M382,-9158C382,-9139.23 382,-9132.12 382,-9117.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="385.5,-9117 382,-9107 378.5,-9117 385.5,-9117"/>
<text text-anchor="middle" x="403" y="-9128.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_3 -->
<g id="node19" class="node">
<title>fn_223_basic_block_3</title>
<polygon fill="lightgrey" stroke="black" points="213,-8511.5 213,-8756.5 551,-8756.5 551,-8511.5 213,-8511.5"/>
<text text-anchor="start" x="221" y="-8741.3" font-family="Times,serif" font-size="14.00">COUNT:14097882&lt;bb 3&gt;:</text>
<polyline fill="none" stroke="black" points="213,-8733.5 551,-8733.5 "/>
<text text-anchor="start" x="221" y="-8718.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="213,-8710.5 551,-8710.5 "/>
<text text-anchor="start" x="221" y="-8695.3" font-family="Times,serif" font-size="14.00">_123 = MEM[(struct PyASCIIObject *)obj_35(D)].length;</text>
<polyline fill="none" stroke="black" points="213,-8687.5 551,-8687.5 "/>
<text text-anchor="start" x="221" y="-8672.3" font-family="Times,serif" font-size="14.00">len = _123;</text>
<polyline fill="none" stroke="black" points="213,-8664.5 551,-8664.5 "/>
<text text-anchor="start" x="221" y="-8649.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="213,-8641.5 551,-8641.5 "/>
<text text-anchor="start" x="221" y="-8626.3" font-family="Times,serif" font-size="14.00">_124 = obj_35(D) + 48;</text>
<polyline fill="none" stroke="black" points="213,-8618.5 551,-8618.5 "/>
<text text-anchor="start" x="221" y="-8603.3" font-family="Times,serif" font-size="14.00"># DEBUG str =&gt; NULL</text>
<polyline fill="none" stroke="black" points="213,-8595.5 551,-8595.5 "/>
<text text-anchor="start" x="221" y="-8580.3" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; NULL</text>
<polyline fill="none" stroke="black" points="213,-8572.5 551,-8572.5 "/>
<text text-anchor="start" x="221" y="-8557.3" font-family="Times,serif" font-size="14.00"># DEBUG buf =&gt; _124</text>
<polyline fill="none" stroke="black" points="213,-8549.5 551,-8549.5 "/>
<text text-anchor="start" x="221" y="-8534.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<text text-anchor="start" x="221" y="-8519.3" font-family="Times,serif" font-size="14.00">goto &lt;bb 6&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_2&#45;&gt;fn_223_basic_block_3 -->
<g id="edge2" class="edge">
<title>fn_223_basic_block_2:s&#45;&gt;fn_223_basic_block_3:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M382,-8808C382,-8789.23 382,-8782.12 382,-8767.35"/>
<polygon fill="black" stroke="black" stroke-width="2" points="385.5,-8767 382,-8757 378.5,-8767 385.5,-8767"/>
<text text-anchor="middle" x="399.5" y="-8778.8" font-family="Times,serif" font-size="14.00">[35%]</text>
</g>
<!-- fn_223_basic_block_4 -->
<g id="node20" class="node">
<title>fn_223_basic_block_4</title>
<polygon fill="lightgrey" stroke="black" points="569,-8519.5 569,-8748.5 897,-8748.5 897,-8519.5 569,-8519.5"/>
<text text-anchor="start" x="577" y="-8733.3" font-family="Times,serif" font-size="14.00">COUNT:26170275&lt;bb 4&gt;:</text>
<polyline fill="none" stroke="black" points="569,-8725.5 897,-8725.5 "/>
<text text-anchor="start" x="577" y="-8710.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="569,-8702.5 897,-8702.5 "/>
<text text-anchor="start" x="577" y="-8687.3" font-family="Times,serif" font-size="14.00">_125 = PyUnicode_AsUTF8AndSize (obj_35(D), &amp;len);</text>
<polyline fill="none" stroke="black" points="569,-8679.5 897,-8679.5 "/>
<text text-anchor="start" x="577" y="-8664.3" font-family="Times,serif" font-size="14.00"># DEBUG str =&gt; NULL</text>
<polyline fill="none" stroke="black" points="569,-8656.5 897,-8656.5 "/>
<text text-anchor="start" x="577" y="-8641.3" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; NULL</text>
<polyline fill="none" stroke="black" points="569,-8633.5 897,-8633.5 "/>
<text text-anchor="start" x="577" y="-8618.3" font-family="Times,serif" font-size="14.00"># DEBUG buf =&gt; _125</text>
<polyline fill="none" stroke="black" points="569,-8610.5 897,-8610.5 "/>
<text text-anchor="start" x="577" y="-8595.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="569,-8587.5 897,-8587.5 "/>
<text text-anchor="start" x="577" y="-8572.3" font-family="Times,serif" font-size="14.00">if (_125 == 0B)</text>
<text text-anchor="start" x="577" y="-8557.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 5&gt;; [0.69%]</text>
<text text-anchor="start" x="577" y="-8542.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="577" y="-8527.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 6&gt;; [99.31%]</text>
</g>
<!-- fn_223_basic_block_2&#45;&gt;fn_223_basic_block_4 -->
<g id="edge3" class="edge">
<title>fn_223_basic_block_2:s&#45;&gt;fn_223_basic_block_4:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M382,-8808C382,-8771.56 680.3,-8786.61 726.91,-8758.21"/>
<polygon fill="black" stroke="black" stroke-width="2" points="729.85,-8760.12 733,-8750 724.23,-8755.95 729.85,-8760.12"/>
<text text-anchor="middle" x="636.5" y="-8778.8" font-family="Times,serif" font-size="14.00">[64%]</text>
</g>
<!-- fn_223_basic_block_6 -->
<g id="node22" class="node">
<title>fn_223_basic_block_6</title>
<polygon fill="lightgrey" stroke="black" points="267,-8023.5 267,-8459.5 497,-8459.5 497,-8023.5 267,-8023.5"/>
<text text-anchor="start" x="275" y="-8444.3" font-family="Times,serif" font-size="14.00">COUNT:40086950&lt;bb 6&gt;:</text>
<polyline fill="none" stroke="black" points="267,-8436.5 497,-8436.5 "/>
<text text-anchor="start" x="275" y="-8421.3" font-family="Times,serif" font-size="14.00"># _169 = PHI &lt;_125(4), _124(3)&gt;</text>
<polyline fill="none" stroke="black" points="267,-8413.5 497,-8413.5 "/>
<text text-anchor="start" x="275" y="-8398.3" font-family="Times,serif" font-size="14.00"># DEBUG str =&gt; NULL</text>
<polyline fill="none" stroke="black" points="267,-8390.5 497,-8390.5 "/>
<text text-anchor="start" x="275" y="-8375.3" font-family="Times,serif" font-size="14.00"># DEBUG size =&gt; NULL</text>
<polyline fill="none" stroke="black" points="267,-8367.5 497,-8367.5 "/>
<text text-anchor="start" x="275" y="-8352.3" font-family="Times,serif" font-size="14.00"># DEBUG buf =&gt; _169</text>
<polyline fill="none" stroke="black" points="267,-8344.5 497,-8344.5 "/>
<text text-anchor="start" x="275" y="-8329.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="267,-8321.5 497,-8321.5 "/>
<text text-anchor="start" x="275" y="-8306.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; self_36(D)</text>
<polyline fill="none" stroke="black" points="267,-8298.5 497,-8298.5 "/>
<text text-anchor="start" x="275" y="-8283.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; &quot;\&quot;&quot;</text>
<polyline fill="none" stroke="black" points="267,-8275.5 497,-8275.5 "/>
<text text-anchor="start" x="275" y="-8260.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; 1</text>
<polyline fill="none" stroke="black" points="267,-8252.5 497,-8252.5 "/>
<text text-anchor="start" x="275" y="-8237.3" font-family="Times,serif" font-size="14.00"># DEBUG INLINE_ENTRY mp_write</text>
<polyline fill="none" stroke="black" points="267,-8229.5 497,-8229.5 "/>
<text text-anchor="start" x="275" y="-8214.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="267,-8206.5 497,-8206.5 "/>
<text text-anchor="start" x="275" y="-8191.3" font-family="Times,serif" font-size="14.00">_53 = self_36(D)&#45;&gt;output_len;</text>
<polyline fill="none" stroke="black" points="267,-8183.5 497,-8183.5 "/>
<text text-anchor="start" x="275" y="-8168.3" font-family="Times,serif" font-size="14.00">required_54 = _53 + 1;</text>
<polyline fill="none" stroke="black" points="267,-8160.5 497,-8160.5 "/>
<text text-anchor="start" x="275" y="-8145.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; required_54</text>
<polyline fill="none" stroke="black" points="267,-8137.5 497,-8137.5 "/>
<text text-anchor="start" x="275" y="-8122.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="267,-8114.5 497,-8114.5 "/>
<text text-anchor="start" x="275" y="-8099.3" font-family="Times,serif" font-size="14.00">_55 = self_36(D)&#45;&gt;max_output_len;</text>
<polyline fill="none" stroke="black" points="267,-8091.5 497,-8091.5 "/>
<text text-anchor="start" x="275" y="-8076.3" font-family="Times,serif" font-size="14.00">if (required_54 &gt; _55)</text>
<text text-anchor="start" x="275" y="-8061.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 7&gt;; [10.00%]</text>
<text text-anchor="start" x="275" y="-8046.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="275" y="-8031.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 9&gt;; [90.00%]</text>
</g>
<!-- fn_223_basic_block_3&#45;&gt;fn_223_basic_block_6 -->
<g id="edge4" class="edge">
<title>fn_223_basic_block_3:s&#45;&gt;fn_223_basic_block_6:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M382,-8511C382,-8492.23 382,-8485.12 382,-8470.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="385.5,-8470 382,-8460 378.5,-8470 385.5,-8470"/>
<text text-anchor="middle" x="403" y="-8481.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_5 -->
<g id="node21" class="node">
<title>fn_223_basic_block_5</title>
<polygon fill="lightgrey" stroke="black" points="624,-642.5 624,-680.5 782,-680.5 782,-642.5 624,-642.5"/>
<text text-anchor="start" x="632" y="-665.3" font-family="Times,serif" font-size="14.00">COUNT:258078&lt;bb 5&gt;:</text>
<text text-anchor="start" x="632" y="-650.3" font-family="Times,serif" font-size="14.00">goto &lt;bb 33&gt;; [100.00%]</text>
</g>
<!-- fn_223_basic_block_4&#45;&gt;fn_223_basic_block_5 -->
<g id="edge5" class="edge">
<title>fn_223_basic_block_4:s&#45;&gt;fn_223_basic_block_5:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M733,-8518C733,-8375.73 896,-8384.77 896,-8242.5 896,-8242.5 896,-8242.5 896,-5282.5 896,-4778.8 869,-4653.2 869,-4149.5 869,-4149.5 869,-4149.5 869,-873.5 869,-764.22 713.21,-792.35 703.48,-691.66"/>
<polygon fill="black" stroke="black" stroke-width="2" points="706.96,-691.33 703,-681.5 699.97,-691.65 706.96,-691.33"/>
<text text-anchor="middle" x="889" y="-4354.3" font-family="Times,serif" font-size="14.00">[0%]</text>
</g>
<!-- fn_223_basic_block_4&#45;&gt;fn_223_basic_block_6 -->
<g id="edge6" class="edge">
<title>fn_223_basic_block_4:s&#45;&gt;fn_223_basic_block_6:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M733,-8518C733,-8500.09 444.73,-8483.24 390.68,-8465.53"/>
<polygon fill="black" stroke="black" stroke-width="2" points="392.31,-8462.42 382,-8460 388.55,-8468.32 392.31,-8462.42"/>
<text text-anchor="middle" x="605.5" y="-8481.8" font-family="Times,serif" font-size="14.00">[99%]</text>
</g>
<!-- fn_223_basic_block_33 -->
<g id="node36" class="node">
<title>fn_223_basic_block_33</title>
<polygon fill="lightgrey" stroke="black" points="316,-103.5 316,-471.5 526,-471.5 526,-103.5 316,-103.5"/>
<text text-anchor="start" x="324" y="-456.3" font-family="Times,serif" font-size="14.00">COUNT:40268156&lt;bb 33&gt;:</text>
<polyline fill="none" stroke="black" points="316,-448.5 526,-448.5 "/>
<text text-anchor="start" x="324" y="-433.3" font-family="Times,serif" font-size="14.00"># _24 = PHI &lt;&#45;1(5), 0(32), &#45;1(22)&gt;</text>
<polyline fill="none" stroke="black" points="316,-425.5 526,-425.5 "/>
<text text-anchor="start" x="324" y="-410.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-402.5 526,-402.5 "/>
<text text-anchor="start" x="324" y="-387.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-379.5 526,-379.5 "/>
<text text-anchor="start" x="324" y="-364.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-356.5 526,-356.5 "/>
<text text-anchor="start" x="324" y="-341.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-333.5 526,-333.5 "/>
<text text-anchor="start" x="324" y="-318.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-310.5 526,-310.5 "/>
<text text-anchor="start" x="324" y="-295.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-287.5 526,-287.5 "/>
<text text-anchor="start" x="324" y="-272.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-264.5 526,-264.5 "/>
<text text-anchor="start" x="324" y="-249.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-241.5 526,-241.5 "/>
<text text-anchor="start" x="324" y="-226.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-218.5 526,-218.5 "/>
<text text-anchor="start" x="324" y="-203.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-195.5 526,-195.5 "/>
<text text-anchor="start" x="324" y="-180.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-172.5 526,-172.5 "/>
<text text-anchor="start" x="324" y="-157.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="316,-149.5 526,-149.5 "/>
<text text-anchor="start" x="324" y="-134.3" font-family="Times,serif" font-size="14.00">len ={v} {CLOBBER};</text>
<polyline fill="none" stroke="black" points="316,-126.5 526,-126.5 "/>
<text text-anchor="start" x="324" y="-111.3" font-family="Times,serif" font-size="14.00">return _24;</text>
</g>
<!-- fn_223_basic_block_5&#45;&gt;fn_223_basic_block_33 -->
<g id="edge7" class="edge">
<title>fn_223_basic_block_5:s&#45;&gt;fn_223_basic_block_33:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M703,-641.5C703,-575.9 669.34,-559.75 615,-523 606.99,-517.59 466.98,-491.59 429.93,-477.51"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="431.35,-474.27 421,-472 427.67,-480.23 431.35,-474.27"/>
<text text-anchor="middle" x="558" y="-493.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_7 -->
<g id="node23" class="node">
<title>fn_223_basic_block_7</title>
<polygon fill="lightgrey" stroke="black" points="238.5,-7834.5 238.5,-7971.5 525.5,-7971.5 525.5,-7834.5 238.5,-7834.5"/>
<text text-anchor="start" x="246.5" y="-7956.3" font-family="Times,serif" font-size="14.00">COUNT:4008695&lt;bb 7&gt;:</text>
<polyline fill="none" stroke="black" points="238.5,-7948.5 525.5,-7948.5 "/>
<text text-anchor="start" x="246.5" y="-7933.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="238.5,-7925.5 525.5,-7925.5 "/>
<text text-anchor="start" x="246.5" y="-7910.3" font-family="Times,serif" font-size="14.00">_59 = mp_resize_cold (self_36(D), required_54);</text>
<polyline fill="none" stroke="black" points="238.5,-7902.5 525.5,-7902.5 "/>
<text text-anchor="start" x="246.5" y="-7887.3" font-family="Times,serif" font-size="14.00">if (_59 &lt; 0)</text>
<text text-anchor="start" x="246.5" y="-7872.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 5&gt;; [0.73%]</text>
<text text-anchor="start" x="246.5" y="-7857.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="246.5" y="-7842.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 8&gt;; [99.27%]</text>
</g>
<!-- fn_223_basic_block_6&#45;&gt;fn_223_basic_block_7 -->
<g id="edge8" class="edge">
<title>fn_223_basic_block_6:s&#45;&gt;fn_223_basic_block_7:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M382,-8023C382,-8004.23 382,-7997.12 382,-7982.35"/>
<polygon fill="black" stroke="black" stroke-width="2" points="385.5,-7982 382,-7972 378.5,-7982 385.5,-7982"/>
<text text-anchor="middle" x="399.5" y="-7993.8" font-family="Times,serif" font-size="14.00">[10%]</text>
</g>
<!-- fn_223_basic_block_9 -->
<g id="node25" class="node">
<title>fn_223_basic_block_9</title>
<polygon fill="lightgrey" stroke="black" points="277.5,-7156.5 277.5,-7684.5 570.5,-7684.5 570.5,-7156.5 277.5,-7156.5"/>
<text text-anchor="start" x="285.5" y="-7669.3" font-family="Times,serif" font-size="14.00">COUNT:40057686&lt;bb 9&gt;:</text>
<polyline fill="none" stroke="black" points="277.5,-7661.5 570.5,-7661.5 "/>
<text text-anchor="start" x="285.5" y="-7646.3" font-family="Times,serif" font-size="14.00"># prephitmp_183 = PHI &lt;_53(6), pretmp_182(8)&gt;</text>
<polyline fill="none" stroke="black" points="277.5,-7638.5 570.5,-7638.5 "/>
<text text-anchor="start" x="285.5" y="-7623.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="277.5,-7615.5 570.5,-7615.5 "/>
<text text-anchor="start" x="285.5" y="-7600.3" font-family="Times,serif" font-size="14.00">_61 = self_36(D)&#45;&gt;output_buffer_raw;</text>
<polyline fill="none" stroke="black" points="277.5,-7592.5 570.5,-7592.5 "/>
<text text-anchor="start" x="285.5" y="-7577.3" font-family="Times,serif" font-size="14.00">_63 = (sizetype) prephitmp_183;</text>
<polyline fill="none" stroke="black" points="277.5,-7569.5 570.5,-7569.5 "/>
<text text-anchor="start" x="285.5" y="-7554.3" font-family="Times,serif" font-size="14.00">_64 = _61 + _63;</text>
<polyline fill="none" stroke="black" points="277.5,-7546.5 570.5,-7546.5 "/>
<text text-anchor="start" x="285.5" y="-7531.3" font-family="Times,serif" font-size="14.00">memcpy (_64, &quot;\&quot;&quot;, 1);</text>
<polyline fill="none" stroke="black" points="277.5,-7523.5 570.5,-7523.5 "/>
<text text-anchor="start" x="285.5" y="-7508.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="277.5,-7500.5 570.5,-7500.5 "/>
<text text-anchor="start" x="285.5" y="-7485.3" font-family="Times,serif" font-size="14.00">_65 = self_36(D)&#45;&gt;output_len;</text>
<polyline fill="none" stroke="black" points="277.5,-7477.5 570.5,-7477.5 "/>
<text text-anchor="start" x="285.5" y="-7462.3" font-family="Times,serif" font-size="14.00">_66 = _65 + 1;</text>
<polyline fill="none" stroke="black" points="277.5,-7454.5 570.5,-7454.5 "/>
<text text-anchor="start" x="285.5" y="-7439.3" font-family="Times,serif" font-size="14.00">self_36(D)&#45;&gt;output_len = _66;</text>
<polyline fill="none" stroke="black" points="277.5,-7431.5 570.5,-7431.5 "/>
<text text-anchor="start" x="285.5" y="-7416.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="277.5,-7408.5 570.5,-7408.5 "/>
<text text-anchor="start" x="285.5" y="-7393.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="277.5,-7385.5 570.5,-7385.5 "/>
<text text-anchor="start" x="285.5" y="-7370.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="277.5,-7362.5 570.5,-7362.5 "/>
<text text-anchor="start" x="285.5" y="-7347.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="277.5,-7339.5 570.5,-7339.5 "/>
<text text-anchor="start" x="285.5" y="-7324.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
<polyline fill="none" stroke="black" points="277.5,-7316.5 570.5,-7316.5 "/>
<text text-anchor="start" x="285.5" y="-7301.3" font-family="Times,serif" font-size="14.00"># DEBUG start =&gt; 0</text>
<polyline fill="none" stroke="black" points="277.5,-7293.5 570.5,-7293.5 "/>
<text text-anchor="start" x="285.5" y="-7278.3" font-family="Times,serif" font-size="14.00"># DEBUG i =&gt; 0</text>
<polyline fill="none" stroke="black" points="277.5,-7270.5 570.5,-7270.5 "/>
<text text-anchor="start" x="285.5" y="-7255.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="277.5,-7247.5 570.5,-7247.5 "/>
<text text-anchor="start" x="285.5" y="-7232.3" font-family="Times,serif" font-size="14.00">len.49_56 = len;</text>
<polyline fill="none" stroke="black" points="277.5,-7224.5 570.5,-7224.5 "/>
<text text-anchor="start" x="285.5" y="-7209.3" font-family="Times,serif" font-size="14.00">if (len.49_56 &gt; 0)</text>
<text text-anchor="start" x="285.5" y="-7194.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 10&gt;; [96.34%]</text>
<text text-anchor="start" x="285.5" y="-7179.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="285.5" y="-7164.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 24&gt;; [3.66%]</text>
</g>
<!-- fn_223_basic_block_6&#45;&gt;fn_223_basic_block_9 -->
<g id="edge9" class="edge">
<title>fn_223_basic_block_6:s&#45;&gt;fn_223_basic_block_9:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M382,-8023C382,-8014.04 529.5,-7979.07 535,-7972 599.55,-7889.09 607.24,-7823.45 549,-7736 527.91,-7704.33 505.28,-7717.27 470,-7703 453.78,-7696.44 434.2,-7702.85 426.92,-7694.61"/>
<polygon fill="black" stroke="black" stroke-width="2" points="430.25,-7693.55 424,-7685 423.55,-7695.59 430.25,-7693.55"/>
<text text-anchor="middle" x="602.5" y="-7804.8" font-family="Times,serif" font-size="14.00">[90%]</text>
</g>
<!-- fn_223_basic_block_7&#45;&gt;fn_223_basic_block_5 -->
<g id="edge10" class="edge">
<title>fn_223_basic_block_7:s&#45;&gt;fn_223_basic_block_5:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M382,-7834C382,-7759.3 54,-7835.2 54,-7760.5 54,-7760.5 54,-7760.5 54,-4147.5 54,-3215.43 80,-2982.57 80,-2050.5 80,-2050.5 80,-2050.5 80,-922.5 80,-820.96 197.75,-872.45 297,-851 436.91,-820.77 494.77,-877.68 615,-800 667.09,-766.35 699.34,-749.05 702.71,-691.84"/>
<polygon fill="black" stroke="black" stroke-width="2" points="706.21,-691.6 703,-681.5 699.22,-691.4 706.21,-691.6"/>
<text text-anchor="middle" x="68" y="-4050.3" font-family="Times,serif" font-size="14.00">[0%]</text>
</g>
<!-- fn_223_basic_block_8 -->
<g id="node24" class="node">
<title>fn_223_basic_block_8</title>
<polygon fill="lightgrey" stroke="black" points="308.5,-7736.5 308.5,-7782.5 539.5,-7782.5 539.5,-7736.5 308.5,-7736.5"/>
<text text-anchor="start" x="316.5" y="-7767.3" font-family="Times,serif" font-size="14.00">COUNT:3979432&lt;bb 8&gt;:</text>
<polyline fill="none" stroke="black" points="308.5,-7759.5 539.5,-7759.5 "/>
<text text-anchor="start" x="316.5" y="-7744.3" font-family="Times,serif" font-size="14.00">pretmp_182 = self_36(D)&#45;&gt;output_len;</text>
</g>
<!-- fn_223_basic_block_7&#45;&gt;fn_223_basic_block_8 -->
<g id="edge11" class="edge">
<title>fn_223_basic_block_7:s&#45;&gt;fn_223_basic_block_8:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M382,-7834C382,-7808.54 413.58,-7810.97 421.97,-7792.91"/>
<polygon fill="black" stroke="black" stroke-width="2" points="425.43,-7793.5 424,-7783 418.57,-7792.1 425.43,-7793.5"/>
<text text-anchor="middle" x="431.5" y="-7804.8" font-family="Times,serif" font-size="14.00">[99%]</text>
</g>
<!-- fn_223_basic_block_8&#45;&gt;fn_223_basic_block_9 -->
<g id="edge12" class="edge">
<title>fn_223_basic_block_8:s&#45;&gt;fn_223_basic_block_9:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M424,-7736C424,-7717.23 424,-7710.12 424,-7695.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="427.5,-7695 424,-7685 420.5,-7695 427.5,-7695"/>
<text text-anchor="middle" x="445" y="-7706.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_9&#45;&gt;fn_223_basic_block_10 -->
<g id="edge13" class="edge">
<title>fn_223_basic_block_9:s&#45;&gt;fn_223_basic_block_10:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M424,-7156C424,-7119.83 469.17,-7123.69 477.64,-7095.02"/>
<polygon fill="black" stroke="black" stroke-width="2" points="481.12,-7095.38 479,-7085 474.19,-7094.44 481.12,-7095.38"/>
<text text-anchor="middle" x="463.5" y="-7126.8" font-family="Times,serif" font-size="14.00">[96%]</text>
</g>
<!-- fn_223_basic_block_9&#45;&gt;fn_223_basic_block_24 -->
<g id="edge14" class="edge">
<title>fn_223_basic_block_9:s&#45;&gt;fn_223_basic_block_24:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M424,-7156C424,-7133.5 811.22,-7131.05 827,-7115 908.3,-7032.3 849,-6970.97 849,-6855 849,-6855 849,-6855 849,-5282.5 849,-4778.89 832,-4653.11 832,-4149.5 832,-4149.5 832,-4149.5 832,-3135.5 832,-3055.69 880.85,-3014.9 827,-2956 801.6,-2928.22 512.83,-2949.82 467.87,-2921.37"/>
<polygon fill="black" stroke="black" stroke-width="2" points="470.61,-2919.18 462,-2913 464.88,-2923.2 470.61,-2919.18"/>
<text text-anchor="middle" x="862" y="-5185.3" font-family="Times,serif" font-size="14.00">[3%]</text>
</g>
<!-- fn_223_basic_block_22&#45;&gt;fn_223_basic_block_33 -->
<g id="edge34" class="edge">
<title>fn_223_basic_block_22:s&#45;&gt;fn_223_basic_block_33:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M127,-537.5C127,-522.47 364.31,-495.08 412.52,-477.54"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="414.54,-480.4 421,-472 410.71,-474.54 414.54,-480.4"/>
<text text-anchor="middle" x="378" y="-493.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_25 -->
<g id="node28" class="node">
<title>fn_223_basic_block_25</title>
<polygon fill="lightgrey" stroke="black" points="347,-2264.5 347,-2631.5 577,-2631.5 577,-2264.5 347,-2264.5"/>
<text text-anchor="start" x="355" y="-2616.3" font-family="Times,serif" font-size="14.00">COUNT:25937308&lt;bb 25&gt;:</text>
<polyline fill="none" stroke="black" points="347,-2608.5 577,-2608.5 "/>
<text text-anchor="start" x="355" y="-2593.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="347,-2585.5 577,-2585.5 "/>
<text text-anchor="start" x="355" y="-2570.3" font-family="Times,serif" font-size="14.00">_18 = i_112 &#45; start_98;</text>
<polyline fill="none" stroke="black" points="347,-2562.5 577,-2562.5 "/>
<text text-anchor="start" x="355" y="-2547.3" font-family="Times,serif" font-size="14.00">start.51_19 = (sizetype) start_98;</text>
<polyline fill="none" stroke="black" points="347,-2539.5 577,-2539.5 "/>
<text text-anchor="start" x="355" y="-2524.3" font-family="Times,serif" font-size="14.00">_20 = _169 + start.51_19;</text>
<polyline fill="none" stroke="black" points="347,-2516.5 577,-2516.5 "/>
<text text-anchor="start" x="355" y="-2501.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; self_36(D)</text>
<polyline fill="none" stroke="black" points="347,-2493.5 577,-2493.5 "/>
<text text-anchor="start" x="355" y="-2478.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; _20</text>
<polyline fill="none" stroke="black" points="347,-2470.5 577,-2470.5 "/>
<text text-anchor="start" x="355" y="-2455.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; _18</text>
<polyline fill="none" stroke="black" points="347,-2447.5 577,-2447.5 "/>
<text text-anchor="start" x="355" y="-2432.3" font-family="Times,serif" font-size="14.00"># DEBUG INLINE_ENTRY mp_write</text>
<polyline fill="none" stroke="black" points="347,-2424.5 577,-2424.5 "/>
<text text-anchor="start" x="355" y="-2409.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="347,-2401.5 577,-2401.5 "/>
<text text-anchor="start" x="355" y="-2386.3" font-family="Times,serif" font-size="14.00">required_95 = _18 + prephitmp_200;</text>
<polyline fill="none" stroke="black" points="347,-2378.5 577,-2378.5 "/>
<text text-anchor="start" x="355" y="-2363.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; required_95</text>
<polyline fill="none" stroke="black" points="347,-2355.5 577,-2355.5 "/>
<text text-anchor="start" x="355" y="-2340.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="347,-2332.5 577,-2332.5 "/>
<text text-anchor="start" x="355" y="-2317.3" font-family="Times,serif" font-size="14.00">if (required_95 &gt; pretmp_206)</text>
<text text-anchor="start" x="355" y="-2302.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 26&gt;; [10.00%]</text>
<text text-anchor="start" x="355" y="-2287.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="355" y="-2272.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 28&gt;; [90.00%]</text>
</g>
<!-- fn_223_basic_block_24&#45;&gt;fn_223_basic_block_25 -->
<g id="edge37" class="edge">
<title>fn_223_basic_block_24:s&#45;&gt;fn_223_basic_block_25:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M462,-2683C462,-2664.23 462,-2657.12 462,-2642.35"/>
<polygon fill="black" stroke="black" stroke-width="2" points="465.5,-2642 462,-2632 458.5,-2642 465.5,-2642"/>
<text text-anchor="middle" x="479.5" y="-2653.8" font-family="Times,serif" font-size="14.00">[66%]</text>
</g>
<!-- fn_223_basic_block_29 -->
<g id="node32" class="node">
<title>fn_223_basic_block_29</title>
<polygon fill="lightgrey" stroke="black" points="333.5,-1138.5 333.5,-1482.5 664.5,-1482.5 664.5,-1138.5 333.5,-1138.5"/>
<text text-anchor="start" x="341.5" y="-1467.3" font-family="Times,serif" font-size="14.00">COUNT:39280018&lt;bb 29&gt;:</text>
<polyline fill="none" stroke="black" points="333.5,-1459.5 664.5,-1459.5 "/>
<text text-anchor="start" x="341.5" y="-1444.3" font-family="Times,serif" font-size="14.00"># prephitmp_203 = PHI &lt;prephitmp_200(24), _107(28)&gt;</text>
<polyline fill="none" stroke="black" points="333.5,-1436.5 664.5,-1436.5 "/>
<text text-anchor="start" x="341.5" y="-1421.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="333.5,-1413.5 664.5,-1413.5 "/>
<text text-anchor="start" x="341.5" y="-1398.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; self_36(D)</text>
<polyline fill="none" stroke="black" points="333.5,-1390.5 664.5,-1390.5 "/>
<text text-anchor="start" x="341.5" y="-1375.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; &quot;\&quot;&quot;</text>
<polyline fill="none" stroke="black" points="333.5,-1367.5 664.5,-1367.5 "/>
<text text-anchor="start" x="341.5" y="-1352.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; 1</text>
<polyline fill="none" stroke="black" points="333.5,-1344.5 664.5,-1344.5 "/>
<text text-anchor="start" x="341.5" y="-1329.3" font-family="Times,serif" font-size="14.00"># DEBUG INLINE_ENTRY mp_write</text>
<polyline fill="none" stroke="black" points="333.5,-1321.5 664.5,-1321.5 "/>
<text text-anchor="start" x="341.5" y="-1306.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="333.5,-1298.5 664.5,-1298.5 "/>
<text text-anchor="start" x="341.5" y="-1283.3" font-family="Times,serif" font-size="14.00">required_109 = prephitmp_203 + 1;</text>
<polyline fill="none" stroke="black" points="333.5,-1275.5 664.5,-1275.5 "/>
<text text-anchor="start" x="341.5" y="-1260.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; required_109</text>
<polyline fill="none" stroke="black" points="333.5,-1252.5 664.5,-1252.5 "/>
<text text-anchor="start" x="341.5" y="-1237.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="333.5,-1229.5 664.5,-1229.5 "/>
<text text-anchor="start" x="341.5" y="-1214.3" font-family="Times,serif" font-size="14.00">_110 = self_36(D)&#45;&gt;max_output_len;</text>
<polyline fill="none" stroke="black" points="333.5,-1206.5 664.5,-1206.5 "/>
<text text-anchor="start" x="341.5" y="-1191.3" font-family="Times,serif" font-size="14.00">if (required_109 &gt; _110)</text>
<text text-anchor="start" x="341.5" y="-1176.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 30&gt;; [10.00%]</text>
<text text-anchor="start" x="341.5" y="-1161.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="341.5" y="-1146.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 32&gt;; [90.00%]</text>
</g>
<!-- fn_223_basic_block_24&#45;&gt;fn_223_basic_block_29 -->
<g id="edge38" class="edge">
<title>fn_223_basic_block_24:s&#45;&gt;fn_223_basic_block_29:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M462,-2683C462,-2623.41 376.65,-2677.36 338,-2632 283.81,-2568.41 295,-2532.55 295,-2449 295,-2449 295,-2449 295,-1729 295,-1642.22 250.27,-1601.34 305,-1534 330.81,-1502.25 472.71,-1523.38 495.82,-1492.58"/>
<polygon fill="black" stroke="black" stroke-width="2" points="499.17,-1493.59 499,-1483 492.53,-1491.39 499.17,-1493.59"/>
<text text-anchor="middle" x="312.5" y="-2045.8" font-family="Times,serif" font-size="14.00">[34%]</text>
</g>
<!-- fn_223_basic_block_26 -->
<g id="node29" class="node">
<title>fn_223_basic_block_26</title>
<polygon fill="lightgrey" stroke="black" points="383.5,-2075.5 383.5,-2212.5 676.5,-2212.5 676.5,-2075.5 383.5,-2075.5"/>
<text text-anchor="start" x="391.5" y="-2197.3" font-family="Times,serif" font-size="14.00">COUNT:2593731&lt;bb 26&gt;:</text>
<polyline fill="none" stroke="black" points="383.5,-2189.5 676.5,-2189.5 "/>
<text text-anchor="start" x="391.5" y="-2174.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="383.5,-2166.5 676.5,-2166.5 "/>
<text text-anchor="start" x="391.5" y="-2151.3" font-family="Times,serif" font-size="14.00">_100 = mp_resize_cold (self_36(D), required_95);</text>
<polyline fill="none" stroke="black" points="383.5,-2143.5 676.5,-2143.5 "/>
<text text-anchor="start" x="391.5" y="-2128.3" font-family="Times,serif" font-size="14.00">if (_100 &lt; 0)</text>
<text text-anchor="start" x="391.5" y="-2113.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 5&gt;; [0.73%]</text>
<text text-anchor="start" x="391.5" y="-2098.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="391.5" y="-2083.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 27&gt;; [99.27%]</text>
</g>
<!-- fn_223_basic_block_25&#45;&gt;fn_223_basic_block_26 -->
<g id="edge39" class="edge">
<title>fn_223_basic_block_25:s&#45;&gt;fn_223_basic_block_26:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M462,-2264C462,-2230.21 516.41,-2246.29 527.89,-2223.02"/>
<polygon fill="black" stroke="black" stroke-width="2" points="531.36,-2223.51 530,-2213 524.51,-2222.06 531.36,-2223.51"/>
<text text-anchor="middle" x="537.5" y="-2234.8" font-family="Times,serif" font-size="14.00">[10%]</text>
</g>
<!-- fn_223_basic_block_28 -->
<g id="node31" class="node">
<title>fn_223_basic_block_28</title>
<polygon fill="lightgrey" stroke="black" points="314,-1534.5 314,-1925.5 684,-1925.5 684,-1534.5 314,-1534.5"/>
<text text-anchor="start" x="322" y="-1910.3" font-family="Times,serif" font-size="14.00">COUNT:25918374&lt;bb 28&gt;:</text>
<polyline fill="none" stroke="black" points="314,-1902.5 684,-1902.5 "/>
<text text-anchor="start" x="322" y="-1887.3" font-family="Times,serif" font-size="14.00"># prephitmp_202 = PHI &lt;prephitmp_200(25), pretmp_201(27)&gt;</text>
<polyline fill="none" stroke="black" points="314,-1879.5 684,-1879.5 "/>
<text text-anchor="start" x="322" y="-1864.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="314,-1856.5 684,-1856.5 "/>
<text text-anchor="start" x="322" y="-1841.3" font-family="Times,serif" font-size="14.00">n.9_101 = (long unsigned int) _18;</text>
<polyline fill="none" stroke="black" points="314,-1833.5 684,-1833.5 "/>
<text text-anchor="start" x="322" y="-1818.3" font-family="Times,serif" font-size="14.00">_102 = self_36(D)&#45;&gt;output_buffer_raw;</text>
<polyline fill="none" stroke="black" points="314,-1810.5 684,-1810.5 "/>
<text text-anchor="start" x="322" y="-1795.3" font-family="Times,serif" font-size="14.00">_104 = (sizetype) prephitmp_202;</text>
<polyline fill="none" stroke="black" points="314,-1787.5 684,-1787.5 "/>
<text text-anchor="start" x="322" y="-1772.3" font-family="Times,serif" font-size="14.00">_105 = _102 + _104;</text>
<polyline fill="none" stroke="black" points="314,-1764.5 684,-1764.5 "/>
<text text-anchor="start" x="322" y="-1749.3" font-family="Times,serif" font-size="14.00">memcpy (_105, _20, n.9_101);</text>
<polyline fill="none" stroke="black" points="314,-1741.5 684,-1741.5 "/>
<text text-anchor="start" x="322" y="-1726.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="314,-1718.5 684,-1718.5 "/>
<text text-anchor="start" x="322" y="-1703.3" font-family="Times,serif" font-size="14.00">_106 = self_36(D)&#45;&gt;output_len;</text>
<polyline fill="none" stroke="black" points="314,-1695.5 684,-1695.5 "/>
<text text-anchor="start" x="322" y="-1680.3" font-family="Times,serif" font-size="14.00">_107 = _18 + _106;</text>
<polyline fill="none" stroke="black" points="314,-1672.5 684,-1672.5 "/>
<text text-anchor="start" x="322" y="-1657.3" font-family="Times,serif" font-size="14.00">self_36(D)&#45;&gt;output_len = _107;</text>
<polyline fill="none" stroke="black" points="314,-1649.5 684,-1649.5 "/>
<text text-anchor="start" x="322" y="-1634.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="314,-1626.5 684,-1626.5 "/>
<text text-anchor="start" x="322" y="-1611.3" font-family="Times,serif" font-size="14.00"># DEBUG self =&gt; NULL</text>
<polyline fill="none" stroke="black" points="314,-1603.5 684,-1603.5 "/>
<text text-anchor="start" x="322" y="-1588.3" font-family="Times,serif" font-size="14.00"># DEBUG s =&gt; NULL</text>
<polyline fill="none" stroke="black" points="314,-1580.5 684,-1580.5 "/>
<text text-anchor="start" x="322" y="-1565.3" font-family="Times,serif" font-size="14.00"># DEBUG n =&gt; NULL</text>
<polyline fill="none" stroke="black" points="314,-1557.5 684,-1557.5 "/>
<text text-anchor="start" x="322" y="-1542.3" font-family="Times,serif" font-size="14.00"># DEBUG required =&gt; NULL</text>
</g>
<!-- fn_223_basic_block_25&#45;&gt;fn_223_basic_block_28 -->
<g id="edge40" class="edge">
<title>fn_223_basic_block_25:s&#45;&gt;fn_223_basic_block_28:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M462,-2264C462,-2219.18 397.28,-2251.89 375,-2213 322.86,-2121.99 316.62,-2064.14 375,-1977 406.03,-1930.68 487.53,-1978.55 497.91,-1936.12"/>
<polygon fill="black" stroke="black" stroke-width="2" points="501.41,-1936.32 499,-1926 494.45,-1935.57 501.41,-1936.32"/>
<text text-anchor="middle" x="358.5" y="-2045.8" font-family="Times,serif" font-size="14.00">[90%]</text>
</g>
<!-- fn_223_basic_block_26&#45;&gt;fn_223_basic_block_5 -->
<g id="edge41" class="edge">
<title>fn_223_basic_block_26:s&#45;&gt;fn_223_basic_block_5:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M530,-2075C530,-2064.56 703,-2011.94 703,-2001.5 703,-2001.5 703,-2001.5 703,-873.5 703,-791.67 703,-768.69 703,-691.69"/>
<polygon fill="black" stroke="black" stroke-width="2" points="706.5,-691.5 703,-681.5 699.5,-691.5 706.5,-691.5"/>
<text text-anchor="middle" x="717" y="-1306.8" font-family="Times,serif" font-size="14.00">[0%]</text>
</g>
<!-- fn_223_basic_block_27 -->
<g id="node30" class="node">
<title>fn_223_basic_block_27</title>
<polygon fill="lightgrey" stroke="black" points="383.5,-1977.5 383.5,-2023.5 614.5,-2023.5 614.5,-1977.5 383.5,-1977.5"/>
<text text-anchor="start" x="391.5" y="-2008.3" font-family="Times,serif" font-size="14.00">COUNT:2574797&lt;bb 27&gt;:</text>
<polyline fill="none" stroke="black" points="383.5,-2000.5 614.5,-2000.5 "/>
<text text-anchor="start" x="391.5" y="-1985.3" font-family="Times,serif" font-size="14.00">pretmp_201 = self_36(D)&#45;&gt;output_len;</text>
</g>
<!-- fn_223_basic_block_26&#45;&gt;fn_223_basic_block_27 -->
<g id="edge42" class="edge">
<title>fn_223_basic_block_26:s&#45;&gt;fn_223_basic_block_27:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M530,-2075C530,-2052.41 507.52,-2050.55 500.85,-2034.11"/>
<polygon fill="black" stroke="black" stroke-width="2" points="504.24,-2033.21 499,-2024 497.35,-2034.47 504.24,-2033.21"/>
<text text-anchor="middle" x="539.5" y="-2045.8" font-family="Times,serif" font-size="14.00">[99%]</text>
</g>
<!-- fn_223_basic_block_27&#45;&gt;fn_223_basic_block_28 -->
<g id="edge43" class="edge">
<title>fn_223_basic_block_27:s&#45;&gt;fn_223_basic_block_28:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M499,-1977C499,-1958.23 499,-1951.12 499,-1936.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="502.5,-1936 499,-1926 495.5,-1936 502.5,-1936"/>
<text text-anchor="middle" x="520" y="-1947.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_28&#45;&gt;fn_223_basic_block_29 -->
<g id="edge44" class="edge">
<title>fn_223_basic_block_28:s&#45;&gt;fn_223_basic_block_29:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M499,-1534C499,-1515.23 499,-1508.12 499,-1493.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="502.5,-1493 499,-1483 495.5,-1493 502.5,-1493"/>
<text text-anchor="middle" x="520" y="-1504.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_30 -->
<g id="node33" class="node">
<title>fn_223_basic_block_30</title>
<polygon fill="lightgrey" stroke="black" points="349,-949.5 349,-1086.5 649,-1086.5 649,-949.5 349,-949.5"/>
<text text-anchor="start" x="357" y="-1071.3" font-family="Times,serif" font-size="14.00">COUNT:3928002&lt;bb 30&gt;:</text>
<polyline fill="none" stroke="black" points="349,-1063.5 649,-1063.5 "/>
<text text-anchor="start" x="357" y="-1048.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="349,-1040.5 649,-1040.5 "/>
<text text-anchor="start" x="357" y="-1025.3" font-family="Times,serif" font-size="14.00">_114 = mp_resize_cold (self_36(D), required_109);</text>
<polyline fill="none" stroke="black" points="349,-1017.5 649,-1017.5 "/>
<text text-anchor="start" x="357" y="-1002.3" font-family="Times,serif" font-size="14.00">if (_114 &lt; 0)</text>
<text text-anchor="start" x="357" y="-987.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 5&gt;; [0.73%]</text>
<text text-anchor="start" x="357" y="-972.3" font-family="Times,serif" font-size="14.00">else</text>
<text text-anchor="start" x="357" y="-957.3" font-family="Times,serif" font-size="14.00"> &#160;goto &lt;bb 31&gt;; [99.27%]</text>
</g>
<!-- fn_223_basic_block_29&#45;&gt;fn_223_basic_block_30 -->
<g id="edge45" class="edge">
<title>fn_223_basic_block_29:s&#45;&gt;fn_223_basic_block_30:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M499,-1138C499,-1119.23 499,-1112.12 499,-1097.35"/>
<polygon fill="black" stroke="black" stroke-width="2" points="502.5,-1097 499,-1087 495.5,-1097 502.5,-1097"/>
<text text-anchor="middle" x="516.5" y="-1108.8" font-family="Times,serif" font-size="14.00">[10%]</text>
</g>
<!-- fn_223_basic_block_32 -->
<g id="node35" class="node">
<title>fn_223_basic_block_32</title>
<polygon fill="lightgrey" stroke="black" points="236,-523.5 236,-799.5 606,-799.5 606,-523.5 236,-523.5"/>
<text text-anchor="start" x="244" y="-784.3" font-family="Times,serif" font-size="14.00">COUNT:39251343&lt;bb 32&gt;:</text>
<polyline fill="none" stroke="black" points="236,-776.5 606,-776.5 "/>
<text text-anchor="start" x="244" y="-761.3" font-family="Times,serif" font-size="14.00"># prephitmp_205 = PHI &lt;prephitmp_203(29), pretmp_204(31)&gt;</text>
<polyline fill="none" stroke="black" points="236,-753.5 606,-753.5 "/>
<text text-anchor="start" x="244" y="-738.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="236,-730.5 606,-730.5 "/>
<text text-anchor="start" x="244" y="-715.3" font-family="Times,serif" font-size="14.00">_115 = self_36(D)&#45;&gt;output_buffer_raw;</text>
<polyline fill="none" stroke="black" points="236,-707.5 606,-707.5 "/>
<text text-anchor="start" x="244" y="-692.3" font-family="Times,serif" font-size="14.00">_117 = (sizetype) prephitmp_205;</text>
<polyline fill="none" stroke="black" points="236,-684.5 606,-684.5 "/>
<text text-anchor="start" x="244" y="-669.3" font-family="Times,serif" font-size="14.00">_118 = _115 + _117;</text>
<polyline fill="none" stroke="black" points="236,-661.5 606,-661.5 "/>
<text text-anchor="start" x="244" y="-646.3" font-family="Times,serif" font-size="14.00">memcpy (_118, &quot;\&quot;&quot;, 1);</text>
<polyline fill="none" stroke="black" points="236,-638.5 606,-638.5 "/>
<text text-anchor="start" x="244" y="-623.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
<polyline fill="none" stroke="black" points="236,-615.5 606,-615.5 "/>
<text text-anchor="start" x="244" y="-600.3" font-family="Times,serif" font-size="14.00">_119 = self_36(D)&#45;&gt;output_len;</text>
<polyline fill="none" stroke="black" points="236,-592.5 606,-592.5 "/>
<text text-anchor="start" x="244" y="-577.3" font-family="Times,serif" font-size="14.00">_120 = _119 + 1;</text>
<polyline fill="none" stroke="black" points="236,-569.5 606,-569.5 "/>
<text text-anchor="start" x="244" y="-554.3" font-family="Times,serif" font-size="14.00">self_36(D)&#45;&gt;output_len = _120;</text>
<polyline fill="none" stroke="black" points="236,-546.5 606,-546.5 "/>
<text text-anchor="start" x="244" y="-531.3" font-family="Times,serif" font-size="14.00"># DEBUG BEGIN_STMT</text>
</g>
<!-- fn_223_basic_block_29&#45;&gt;fn_223_basic_block_32 -->
<g id="edge46" class="edge">
<title>fn_223_basic_block_29:s&#45;&gt;fn_223_basic_block_32:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M499,-1138C499,-1100.89 365.08,-1114.35 340,-1087 267.95,-1008.42 237.66,-939.57 297,-851 328.03,-804.68 409.53,-852.55 419.91,-810.12"/>
<polygon fill="black" stroke="black" stroke-width="2" points="423.41,-810.32 421,-800 416.45,-809.57 423.41,-810.32"/>
<text text-anchor="middle" x="284.5" y="-919.8" font-family="Times,serif" font-size="14.00">[90%]</text>
</g>
<!-- fn_223_basic_block_30&#45;&gt;fn_223_basic_block_5 -->
<g id="edge47" class="edge">
<title>fn_223_basic_block_30:s&#45;&gt;fn_223_basic_block_5:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M499,-949C499,-933.83 516.98,-941.42 528,-931 623.93,-840.31 699.1,-818.06 702.85,-691.6"/>
<polygon fill="black" stroke="black" stroke-width="2" points="706.35,-691.55 703,-681.5 699.35,-691.45 706.35,-691.55"/>
<text text-anchor="middle" x="633" y="-870.8" font-family="Times,serif" font-size="14.00">[0%]</text>
</g>
<!-- fn_223_basic_block_31 -->
<g id="node34" class="node">
<title>fn_223_basic_block_31</title>
<polygon fill="lightgrey" stroke="black" points="305.5,-851.5 305.5,-897.5 536.5,-897.5 536.5,-851.5 305.5,-851.5"/>
<text text-anchor="start" x="313.5" y="-882.3" font-family="Times,serif" font-size="14.00">COUNT:3899328&lt;bb 31&gt;:</text>
<polyline fill="none" stroke="black" points="305.5,-874.5 536.5,-874.5 "/>
<text text-anchor="start" x="313.5" y="-859.3" font-family="Times,serif" font-size="14.00">pretmp_204 = self_36(D)&#45;&gt;output_len;</text>
</g>
<!-- fn_223_basic_block_30&#45;&gt;fn_223_basic_block_31 -->
<g id="edge48" class="edge">
<title>fn_223_basic_block_30:s&#45;&gt;fn_223_basic_block_31:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M499,-949C499,-911.46 434.94,-934.09 422.93,-907.84"/>
<polygon fill="black" stroke="black" stroke-width="2" points="426.36,-907.14 421,-898 419.49,-908.49 426.36,-907.14"/>
<text text-anchor="middle" x="506.5" y="-919.8" font-family="Times,serif" font-size="14.00">[99%]</text>
</g>
<!-- fn_223_basic_block_31&#45;&gt;fn_223_basic_block_32 -->
<g id="edge49" class="edge">
<title>fn_223_basic_block_31:s&#45;&gt;fn_223_basic_block_32:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M421,-851C421,-832.23 421,-825.12 421,-810.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="424.5,-810 421,-800 417.5,-810 424.5,-810"/>
<text text-anchor="middle" x="442" y="-821.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_32&#45;&gt;fn_223_basic_block_33 -->
<g id="edge50" class="edge">
<title>fn_223_basic_block_32:s&#45;&gt;fn_223_basic_block_33:n</title>
<path fill="none" stroke="blue" stroke-width="2" d="M421,-523C421,-504.23 421,-497.12 421,-482.35"/>
<polygon fill="blue" stroke="blue" stroke-width="2" points="424.5,-482 421,-472 417.5,-482 424.5,-482"/>
<text text-anchor="middle" x="442" y="-493.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
<!-- fn_223_basic_block_33&#45;&gt;fn_223_basic_block_1 -->
<g id="edge51" class="edge">
<title>fn_223_basic_block_33:s&#45;&gt;fn_223_basic_block_1:n</title>
<path fill="none" stroke="black" stroke-width="2" d="M421,-103C421,-84.23 421,-77.12 421,-62.35"/>
<polygon fill="black" stroke="black" stroke-width="2" points="424.5,-62 421,-52 417.5,-62 424.5,-62"/>
<text text-anchor="middle" x="442" y="-73.8" font-family="Times,serif" font-size="14.00">[100%]</text>
</g>
</g>
</svg>
digraph "small.graph" {
overlap=false;
subgraph "cluster_json_encode_str" {
style="dashed";
color="black";
label="json_encode_str ()";
subgraph cluster_220_1 {
style="filled";
color="darkgreen";
fillcolor="grey88";
label="loop 1";
labeljust=l;
penwidth=2;
fn_220_basic_block_68 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1073741862\<bb\ 68\>:\l\
|#\ i_25\ =\ PHI\ \<0(18),\ i_62(67)\>\l\
|#\ start_27\ =\ PHI\ \<0(18),\ start_26(67)\>\l\
|#\ DEBUG\ start\ =\>\ start_27\l\
|#\ DEBUG\ i\ =\>\ i_25\l\
|#\ DEBUG\ BEGIN_STMT\l\
|len.49_19\ =\ len;\l\
|if\ (len.49_19\ \>\ i_25)\l\
\ \ goto\ \<bb\ 19\>;\ [97.25%]\l\
else\l\
\ \ goto\ \<bb\ 69\>;\ [2.75%]\l\
}"];
fn_220_basic_block_19 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1044213958\<bb\ 19\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|i.46_2\ =\ (sizetype)\ i_25;\l\
|_3\ =\ _69\ +\ i.46_2;\l\
|c_44\ =\ *_3;\l\
|#\ DEBUG\ c\ =\>\ c_44\l\
|#\ DEBUG\ BEGIN_STMT\l\
|c.47_4\ =\ (unsigned\ char)\ c_44;\l\
|_5\ =\ (int)\ c.47_4;\l\
|escape_45\ =\ escape_table[_5];\l\
|#\ DEBUG\ escape\ =\>\ escape_45\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (escape_45\ ==\ 0)\l\
\ \ goto\ \<bb\ 20\>;\ [33.00%]\l\
else\l\
\ \ goto\ \<bb\ 21\>;\ [67.00%]\l\
}"];
fn_220_basic_block_20 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:344590604\<bb\ 20\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|//\ predicted\ unlikely\ by\ continue\ predictor.\l\
goto\ \<bb\ 67\>;\ [100.00%]\l\
}"];
fn_220_basic_block_21 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:699623355\<bb\ 21\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (i_25\ \>\ start_27)\l\
\ \ goto\ \<bb\ 22\>;\ [33.00%]\l\
else\l\
\ \ goto\ \<bb\ 35\>;\ [67.00%]\l\
}"];
fn_220_basic_block_67 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:1018799833\<bb\ 67\>:\l\
|#\ start_26\ =\ PHI\ \<start_27(20),\ start_61(66)\>\l\
|#\ DEBUG\ start\ =\>\ start_26\l\
|#\ DEBUG\ BEGIN_STMT\l\
|i_62\ =\ i_25\ +\ 1;\l\
|#\ DEBUG\ i\ =\>\ i_62\l\
}"];
fn_220_basic_block_22 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:230875705\<bb\ 22\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_6\ =\ i_25\ -\ start_27;\l\
|start.48_7\ =\ (sizetype)\ start_27;\l\
|_8\ =\ _69\ +\ start.48_7;\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ s\ =\>\ _8\l\
|#\ DEBUG\ n\ =\>\ _6\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_101\ =\ self_39(D)-\>output_len;\l\
|required_102\ =\ _6\ +\ _101;\l\
|#\ DEBUG\ required\ =\>\ required_102\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_103\ =\ self_39(D)-\>max_output_len;\l\
|if\ (required_102\ \>\ _103)\l\
\ \ goto\ \<bb\ 23\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 33\>;\ [50.00%]\l\
}"];
fn_220_basic_block_35 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:693274272\<bb\ 35\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (escape_45\ ==\ 117)\l\
\ \ goto\ \<bb\ 36\>;\ [34.00%]\l\
else\l\
\ \ goto\ \<bb\ 51\>;\ [66.00%]\l\
}"];
fn_220_basic_block_23 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:115437853\<bb\ 23\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ size\ =\>\ required_102\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_113\ =\ self_39(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _113\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_114\ =\ MEM[(const\ struct\ PyObject\ *)_113].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _114\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_115\ =\ required_102\ *\ 2;\l\
|_116\ =\ MAX_EXPR\ \<_115,\ 8\>;\l\
|self_39(D)-\>max_output_len\ =\ _116;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_114\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 24\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 25\>;\ [70.00%]\l\
}"];
fn_220_basic_block_33 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:230033009\<bb\ 33\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_105\ =\ (long\ unsigned\ int)\ _6;\l\
|_106\ =\ self_39(D)-\>output_buffer_raw;\l\
|_107\ =\ self_39(D)-\>output_len;\l\
|_108\ =\ (sizetype)\ _107;\l\
|_109\ =\ _106\ +\ _108;\l\
|memcpy\ (_109,\ _8,\ n.9_105);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_110\ =\ self_39(D)-\>output_len;\l\
|_111\ =\ _6\ +\ _110;\l\
|self_39(D)-\>output_len\ =\ _111;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_36 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:235713254\<bb\ 36\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ hex\ =\>\ \"0123456789abcdef\"\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped[0]\ =\ 92;\l\
|escaped[1]\ =\ 117;\l\
|escaped[2]\ =\ 48;\l\
|escaped[3]\ =\ 48;\l\
|_10\ =\ c_44\ \>\>\ 4;\l\
|_11\ =\ (sizetype)\ _10;\l\
|_12\ =\ \"0123456789abcdef\"\ +\ _11;\l\
|_13\ =\ *_12;\l\
|escaped[4]\ =\ _13;\l\
|_35\ =\ c_44\ &\ 15;\l\
|_14\ =\ (sizetype)\ _35;\l\
|_15\ =\ \"0123456789abcdef\"\ +\ _14;\l\
|_16\ =\ *_15;\l\
|escaped[5]\ =\ _16;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ 6\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_128\ =\ self_39(D)-\>output_len;\l\
|required_129\ =\ _128\ +\ 6;\l\
|#\ DEBUG\ required\ =\>\ required_129\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_130\ =\ self_39(D)-\>max_output_len;\l\
|if\ (required_129\ \>\ _130)\l\
\ \ goto\ \<bb\ 37\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 47\>;\ [50.00%]\l\
}"];
fn_220_basic_block_51 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:457561017\<bb\ 51\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped[0]\ =\ 92;\l\
|escaped[1]\ =\ escape_45;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ s\ =\>\ &escaped\l\
|#\ DEBUG\ n\ =\>\ 2\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_155\ =\ self_39(D)-\>output_len;\l\
|required_156\ =\ _155\ +\ 2;\l\
|#\ DEBUG\ required\ =\>\ required_156\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_157\ =\ self_39(D)-\>max_output_len;\l\
|if\ (required_156\ \>\ _157)\l\
\ \ goto\ \<bb\ 52\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 62\>;\ [50.00%]\l\
}"];
fn_220_basic_block_24 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34631355\<bb\ 24\>:\l\
|_117\ =\ &self_39(D)-\>output_buffer;\l\
|iftmp.10_118\ =\ _PyBytes_Resize\ (_117,\ _116);\l\
goto\ \<bb\ 26\>;\ [100.00%]\l\
}"];
fn_220_basic_block_25 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:80806497\<bb\ 25\>:\l\
|iftmp.10_119\ =\ PyByteArray_Resize\ (_113,\ _116);\l\
}"];
fn_220_basic_block_34 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:230875705\<bb\ 34\>:\l\
|#\ _112\ =\ PHI\ \<-1(32),\ 0(33)\>\l\
|_295\ =\ _112;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|_9\ =\ _295;\l\
|if\ (_9\ \<\ 0)\l\
\ \ goto\ \<bb\ 96\>;\ [2.75%]\l\
else\l\
\ \ goto\ \<bb\ 35\>;\ [97.25%]\l\
}"];
fn_220_basic_block_37 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:117856627\<bb\ 37\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ size\ =\>\ required_129\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_140\ =\ self_39(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _140\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_141\ =\ MEM[(const\ struct\ PyObject\ *)_140].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _141\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_142\ =\ required_129\ *\ 2;\l\
|_143\ =\ MAX_EXPR\ \<_142,\ 8\>;\l\
|self_39(D)-\>max_output_len\ =\ _143;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_141\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 38\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 39\>;\ [70.00%]\l\
}"];
fn_220_basic_block_47 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:234852901\<bb\ 47\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_132\ =\ 6;\l\
|_133\ =\ self_39(D)-\>output_buffer_raw;\l\
|_134\ =\ self_39(D)-\>output_len;\l\
|_135\ =\ (sizetype)\ _134;\l\
|_136\ =\ _133\ +\ _135;\l\
|memcpy\ (_136,\ &escaped,\ n.9_132);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_137\ =\ self_39(D)-\>output_len;\l\
|_138\ =\ _137\ +\ 6;\l\
|self_39(D)-\>output_len\ =\ _138;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_52 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:228780508\<bb\ 52\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ size\ =\>\ required_156\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_167\ =\ self_39(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _167\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_168\ =\ MEM[(const\ struct\ PyObject\ *)_167].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _168\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_169\ =\ required_156\ *\ 2;\l\
|_170\ =\ MAX_EXPR\ \<_169,\ 8\>;\l\
|self_39(D)-\>max_output_len\ =\ _170;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_168\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 53\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 54\>;\ [70.00%]\l\
}"];
fn_220_basic_block_62 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:455890921\<bb\ 62\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_159\ =\ 2;\l\
|_160\ =\ self_39(D)-\>output_buffer_raw;\l\
|_161\ =\ self_39(D)-\>output_len;\l\
|_162\ =\ (sizetype)\ _161;\l\
|_163\ =\ _160\ +\ _162;\l\
|memcpy\ (_163,\ &escaped,\ n.9_159);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_164\ =\ self_39(D)-\>output_len;\l\
|_165\ =\ _164\ +\ 2;\l\
|self_39(D)-\>output_len\ =\ _165;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_26 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:115437853\<bb\ 26\>:\l\
|#\ iftmp.10_120\ =\ PHI\ \<iftmp.10_118(24),\ iftmp.10_119(25)\>\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_120\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_120\ \<\ 0)\l\
\ \ goto\ \<bb\ 32\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 27\>;\ [99.27%]\l\
}"];
fn_220_basic_block_38 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:35356988\<bb\ 38\>:\l\
|_144\ =\ &self_39(D)-\>output_buffer;\l\
|iftmp.10_145\ =\ _PyBytes_Resize\ (_144,\ _143);\l\
goto\ \<bb\ 40\>;\ [100.00%]\l\
}"];
fn_220_basic_block_39 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:82499640\<bb\ 39\>:\l\
|iftmp.10_146\ =\ PyByteArray_Resize\ (_140,\ _143);\l\
}"];
fn_220_basic_block_48 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:235713254\<bb\ 48\>:\l\
|#\ _139\ =\ PHI\ \<-1(46),\ 0(47)\>\l\
|_313\ =\ _139;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|_17\ =\ _313;\l\
|if\ (_17\ \<\ 0)\l\
\ \ goto\ \<bb\ 49\>;\ [2.75%]\l\
else\l\
\ \ goto\ \<bb\ 50\>;\ [97.25%]\l\
}"];
fn_220_basic_block_53 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:68634151\<bb\ 53\>:\l\
|_171\ =\ &self_39(D)-\>output_buffer;\l\
|iftmp.10_172\ =\ _PyBytes_Resize\ (_171,\ _170);\l\
goto\ \<bb\ 55\>;\ [100.00%]\l\
}"];
fn_220_basic_block_54 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:160146357\<bb\ 54\>:\l\
|iftmp.10_173\ =\ PyByteArray_Resize\ (_167,\ _170);\l\
}"];
fn_220_basic_block_63 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:457561017\<bb\ 63\>:\l\
|#\ _166\ =\ PHI\ \<-1(61),\ 0(62)\>\l\
|_304\ =\ _166;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|_18\ =\ _304;\l\
|if\ (_18\ \<\ 0)\l\
\ \ goto\ \<bb\ 64\>;\ [2.75%]\l\
else\l\
\ \ goto\ \<bb\ 65\>;\ [97.25%]\l\
}"];
fn_220_basic_block_32 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:115437853\<bb\ 32\>:\l\
|#\ _127\ =\ PHI\ \<-1(26),\ iftmp.10_120(28),\ iftmp.10_120(31)\>\l\
|_292\ =\ _127;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|_104\ =\ _292;\l\
|if\ (_104\ \<\ 0)\l\
\ \ goto\ \<bb\ 34\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 33\>;\ [99.27%]\l\
}"];
fn_220_basic_block_27 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:114595157\<bb\ 27\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_114\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 28\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 29\>;\ [70.00%]\l\
}"];
fn_220_basic_block_40 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:117856627\<bb\ 40\>:\l\
|#\ iftmp.10_147\ =\ PHI\ \<iftmp.10_145(38),\ iftmp.10_146(39)\>\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_147\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_147\ \<\ 0)\l\
\ \ goto\ \<bb\ 46\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 41\>;\ [99.27%]\l\
}"];
fn_220_basic_block_50 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:229231139\<bb\ 50\>:\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 66\>;\ [100.00%]\l\
}"];
fn_220_basic_block_55 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:228780508\<bb\ 55\>:\l\
|#\ iftmp.10_174\ =\ PHI\ \<iftmp.10_172(53),\ iftmp.10_173(54)\>\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_174\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_174\ \<\ 0)\l\
\ \ goto\ \<bb\ 61\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 56\>;\ [99.27%]\l\
}"];
fn_220_basic_block_65 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:444978088\<bb\ 65\>:\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
}"];
fn_220_basic_block_28 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:34378546\<bb\ 28\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_121\ =\ self_39(D)-\>output_buffer;\l\
|_122\ =\ &MEM[(struct\ PyBytesObject\ *)_121].ob_sval;\l\
|self_39(D)-\>output_buffer_raw\ =\ _122;\l\
goto\ \<bb\ 32\>;\ [100.00%]\l\
}"];
fn_220_basic_block_29 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:80216610\<bb\ 29\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_123\ =\ self_39(D)-\>output_buffer;\l\
|_124\ =\ MEM[(struct\ PyVarObject\ *)_123].ob_size;\l\
|if\ (_124\ !=\ 0)\l\
\ \ goto\ \<bb\ 30\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 31\>;\ [50.00%]\l\
}"];
fn_220_basic_block_46 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:117856627\<bb\ 46\>:\l\
|#\ _154\ =\ PHI\ \<-1(40),\ iftmp.10_147(42),\ iftmp.10_147(45)\>\l\
|_310\ =\ _154;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|_131\ =\ _310;\l\
|if\ (_131\ \<\ 0)\l\
\ \ goto\ \<bb\ 48\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 47\>;\ [99.27%]\l\
}"];
fn_220_basic_block_41 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:116996274\<bb\ 41\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_141\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 42\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 43\>;\ [70.00%]\l\
}"];
fn_220_basic_block_66 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:674209228\<bb\ 66\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|start_61\ =\ i_25\ +\ 1;\l\
|#\ DEBUG\ start\ =\>\ start_61\l\
}"];
fn_220_basic_block_61 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:228780509\<bb\ 61\>:\l\
|#\ _181\ =\ PHI\ \<-1(55),\ iftmp.10_174(57),\ iftmp.10_174(60)\>\l\
|_301\ =\ _181;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|_158\ =\ _301;\l\
|if\ (_158\ \<\ 0)\l\
\ \ goto\ \<bb\ 63\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 62\>;\ [99.27%]\l\
}"];
fn_220_basic_block_56 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:227110411\<bb\ 56\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_168\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 57\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 58\>;\ [70.00%]\l\
}"];
fn_220_basic_block_30 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:40108305\<bb\ 30\>:\l\
|iftmp.11_125\ =\ MEM[(struct\ PyByteArrayObject\ *)_123].ob_start;\l\
}"];
fn_220_basic_block_31 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:80216610\<bb\ 31\>:\l\
|#\ iftmp.11_126\ =\ PHI\ \<&_PyByteArray_empty_string(29),\ iftmp.11_125(30)\>\l\
|self_39(D)-\>output_buffer_raw\ =\ iftmp.11_126;\l\
}"];
fn_220_basic_block_42 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:35098882\<bb\ 42\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_148\ =\ self_39(D)-\>output_buffer;\l\
|_149\ =\ &MEM[(struct\ PyBytesObject\ *)_148].ob_sval;\l\
|self_39(D)-\>output_buffer_raw\ =\ _149;\l\
goto\ \<bb\ 46\>;\ [100.00%]\l\
}"];
fn_220_basic_block_43 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:81897392\<bb\ 43\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_150\ =\ self_39(D)-\>output_buffer;\l\
|_151\ =\ MEM[(struct\ PyVarObject\ *)_150].ob_size;\l\
|if\ (_151\ !=\ 0)\l\
\ \ goto\ \<bb\ 44\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 45\>;\ [50.00%]\l\
}"];
fn_220_basic_block_57 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:68133122\<bb\ 57\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_175\ =\ self_39(D)-\>output_buffer;\l\
|_176\ =\ &MEM[(struct\ PyBytesObject\ *)_175].ob_sval;\l\
|self_39(D)-\>output_buffer_raw\ =\ _176;\l\
goto\ \<bb\ 61\>;\ [100.00%]\l\
}"];
fn_220_basic_block_58 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:158977289\<bb\ 58\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_177\ =\ self_39(D)-\>output_buffer;\l\
|_178\ =\ MEM[(struct\ PyVarObject\ *)_177].ob_size;\l\
|if\ (_178\ !=\ 0)\l\
\ \ goto\ \<bb\ 59\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 60\>;\ [50.00%]\l\
}"];
fn_220_basic_block_44 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:40948696\<bb\ 44\>:\l\
|iftmp.11_152\ =\ MEM[(struct\ PyByteArrayObject\ *)_150].ob_start;\l\
}"];
fn_220_basic_block_45 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:81897392\<bb\ 45\>:\l\
|#\ iftmp.11_153\ =\ PHI\ \<&_PyByteArray_empty_string(43),\ iftmp.11_152(44)\>\l\
|self_39(D)-\>output_buffer_raw\ =\ iftmp.11_153;\l\
}"];
fn_220_basic_block_59 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:79488645\<bb\ 59\>:\l\
|iftmp.11_179\ =\ MEM[(struct\ PyByteArrayObject\ *)_177].ob_start;\l\
}"];
fn_220_basic_block_60 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:158977289\<bb\ 60\>:\l\
|#\ iftmp.11_180\ =\ PHI\ \<&_PyByteArray_empty_string(58),\ iftmp.11_179(59)\>\l\
|self_39(D)-\>output_buffer_raw\ =\ iftmp.11_180;\l\
}"];
}
fn_220_basic_block_0 [shape=Mdiamond,style=filled,fillcolor=white,label="ENTRY"];
fn_220_basic_block_1 [shape=Mdiamond,style=filled,fillcolor=white,label="EXIT"];
fn_220_basic_block_2 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:55854330\<bb\ 2\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ start\ =\>\ 0\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ str\ =\>\ obj_37(D)\l\
|#\ DEBUG\ size\ =\>\ &len\l\
|#\ DEBUG\ INLINE_ENTRY\ unicode_str_and_size\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_64\ =\ BIT_FIELD_REF\ \<MEM[(struct\ PyASCIIObject\ *)obj_37(D)],\ 8,\ 256\>;\l\
|_65\ =\ _64\ &\ 96;\l\
|if\ (_65\ ==\ 96)\l\
\ \ goto\ \<bb\ 3\>;\ [35.01%]\l\
else\l\
\ \ goto\ \<bb\ 4\>;\ [64.99%]\l\
}"];
fn_220_basic_block_3 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19554601\<bb\ 3\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_66\ =\ MEM[(struct\ PyASCIIObject\ *)obj_37(D)].length;\l\
|len\ =\ _66;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_67\ =\ obj_37(D)\ +\ 48;\l\
goto\ \<bb\ 5\>;\ [100.00%]\l\
}"];
fn_220_basic_block_4 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:36299729\<bb\ 4\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_68\ =\ PyUnicode_AsUTF8AndSize\ (obj_37(D),\ &len);\l\
}"];
fn_220_basic_block_5 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:55854330\<bb\ 5\>:\l\
|#\ _69\ =\ PHI\ \<_67(3),\ _68(4)\>\l\
|#\ DEBUG\ str\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|#\ DEBUG\ buf\ =\>\ _69\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_69\ ==\ 0B)\l\
\ \ goto\ \<bb\ 96\>;\ [0.91%]\l\
else\l\
\ \ goto\ \<bb\ 6\>;\ [99.09%]\l\
}"];
fn_220_basic_block_6 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:55346056\<bb\ 6\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_74\ =\ self_39(D)-\>output_len;\l\
|required_75\ =\ _74\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_75\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_76\ =\ self_39(D)-\>max_output_len;\l\
|if\ (required_75\ \>\ _76)\l\
\ \ goto\ \<bb\ 7\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 17\>;\ [50.00%]\l\
}"];
fn_220_basic_block_7 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:27673028\<bb\ 7\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ size\ =\>\ required_75\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_86\ =\ self_39(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _86\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_87\ =\ MEM[(const\ struct\ PyObject\ *)_86].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _87\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_88\ =\ required_75\ *\ 2;\l\
|_89\ =\ MAX_EXPR\ \<_88,\ 8\>;\l\
|self_39(D)-\>max_output_len\ =\ _89;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_87\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 8\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 9\>;\ [70.00%]\l\
}"];
fn_220_basic_block_8 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:8301908\<bb\ 8\>:\l\
|_90\ =\ &self_39(D)-\>output_buffer;\l\
|iftmp.10_91\ =\ _PyBytes_Resize\ (_90,\ _89);\l\
goto\ \<bb\ 10\>;\ [100.00%]\l\
}"];
fn_220_basic_block_9 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19371120\<bb\ 9\>:\l\
|iftmp.10_92\ =\ PyByteArray_Resize\ (_86,\ _89);\l\
}"];
fn_220_basic_block_10 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:27673028\<bb\ 10\>:\l\
|#\ iftmp.10_93\ =\ PHI\ \<iftmp.10_91(8),\ iftmp.10_92(9)\>\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_93\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_93\ \<\ 0)\l\
\ \ goto\ \<bb\ 16\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 11\>;\ [99.27%]\l\
}"];
fn_220_basic_block_11 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:27471015\<bb\ 11\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_87\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 12\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 13\>;\ [70.00%]\l\
}"];
fn_220_basic_block_12 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:8241304\<bb\ 12\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_94\ =\ self_39(D)-\>output_buffer;\l\
|_95\ =\ &MEM[(struct\ PyBytesObject\ *)_94].ob_sval;\l\
|self_39(D)-\>output_buffer_raw\ =\ _95;\l\
goto\ \<bb\ 16\>;\ [100.00%]\l\
}"];
fn_220_basic_block_13 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19229711\<bb\ 13\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_96\ =\ self_39(D)-\>output_buffer;\l\
|_97\ =\ MEM[(struct\ PyVarObject\ *)_96].ob_size;\l\
|if\ (_97\ !=\ 0)\l\
\ \ goto\ \<bb\ 14\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 15\>;\ [50.00%]\l\
}"];
fn_220_basic_block_14 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:9614855\<bb\ 14\>:\l\
|iftmp.11_98\ =\ MEM[(struct\ PyByteArrayObject\ *)_96].ob_start;\l\
}"];
fn_220_basic_block_15 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19229711\<bb\ 15\>:\l\
|#\ iftmp.11_99\ =\ PHI\ \<&_PyByteArray_empty_string(13),\ iftmp.11_98(14)\>\l\
|self_39(D)-\>output_buffer_raw\ =\ iftmp.11_99;\l\
}"];
fn_220_basic_block_16 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:27673028\<bb\ 16\>:\l\
|#\ _100\ =\ PHI\ \<-1(10),\ iftmp.10_93(12),\ iftmp.10_93(15)\>\l\
|_265\ =\ _100;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|_77\ =\ _265;\l\
|if\ (_77\ \<\ 0)\l\
\ \ goto\ \<bb\ 18\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 17\>;\ [99.27%]\l\
}"];
fn_220_basic_block_17 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:55144043\<bb\ 17\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_78\ =\ 1;\l\
|_79\ =\ self_39(D)-\>output_buffer_raw;\l\
|_80\ =\ self_39(D)-\>output_len;\l\
|_81\ =\ (sizetype)\ _80;\l\
|_82\ =\ _79\ +\ _81;\l\
|memcpy\ (_82,\ \"\\\"\",\ n.9_78);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_83\ =\ self_39(D)-\>output_len;\l\
|_84\ =\ _83\ +\ 1;\l\
|self_39(D)-\>output_len\ =\ _84;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_18 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:55346056\<bb\ 18\>:\l\
|#\ _85\ =\ PHI\ \<-1(16),\ 0(17)\>\l\
|_268\ =\ _85;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|_1\ =\ _268;\l\
|if\ (_1\ \<\ 0)\l\
\ \ goto\ \<bb\ 96\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 68\>;\ [99.27%]\l\
}"];
fn_220_basic_block_49 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:6482115\<bb\ 49\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 96\>;\ [100.00%]\l\
}"];
fn_220_basic_block_64 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:12582929\<bb\ 64\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|escaped\ =\{v\}\ \{CLOBBER\};\l\
goto\ \<bb\ 96\>;\ [100.00%]\l\
}"];
fn_220_basic_block_69 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29527905\<bb\ 69\>:\l\
|#\ len.49_20\ =\ PHI\ \<len.49_19(68)\>\l\
|#\ i_73\ =\ PHI\ \<i_25(68)\>\l\
|#\ start_38\ =\ PHI\ \<start_27(68)\>\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (len.49_20\ !=\ start_38)\l\
\ \ goto\ \<bb\ 70\>;\ [66.00%]\l\
else\l\
\ \ goto\ \<bb\ 83\>;\ [34.00%]\l\
}"];
fn_220_basic_block_70 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19488418\<bb\ 70\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_21\ =\ i_73\ -\ start_38;\l\
|start.51_22\ =\ (sizetype)\ start_38;\l\
|_23\ =\ _69\ +\ start.51_22;\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ s\ =\>\ _23\l\
|#\ DEBUG\ n\ =\>\ _21\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_182\ =\ self_39(D)-\>output_len;\l\
|required_183\ =\ _21\ +\ _182;\l\
|#\ DEBUG\ required\ =\>\ required_183\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_184\ =\ self_39(D)-\>max_output_len;\l\
|if\ (required_183\ \>\ _184)\l\
\ \ goto\ \<bb\ 71\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 81\>;\ [50.00%]\l\
}"];
fn_220_basic_block_71 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:9744208\<bb\ 71\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ size\ =\>\ required_183\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_194\ =\ self_39(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _194\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_195\ =\ MEM[(const\ struct\ PyObject\ *)_194].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _195\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_196\ =\ required_183\ *\ 2;\l\
|_197\ =\ MAX_EXPR\ \<_196,\ 8\>;\l\
|self_39(D)-\>max_output_len\ =\ _197;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_195\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 72\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 73\>;\ [70.00%]\l\
}"];
fn_220_basic_block_72 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2923262\<bb\ 72\>:\l\
|_198\ =\ &self_39(D)-\>output_buffer;\l\
|iftmp.10_199\ =\ _PyBytes_Resize\ (_198,\ _197);\l\
goto\ \<bb\ 74\>;\ [100.00%]\l\
}"];
fn_220_basic_block_73 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:6820946\<bb\ 73\>:\l\
|iftmp.10_200\ =\ PyByteArray_Resize\ (_194,\ _197);\l\
}"];
fn_220_basic_block_74 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:9744208\<bb\ 74\>:\l\
|#\ iftmp.10_201\ =\ PHI\ \<iftmp.10_199(72),\ iftmp.10_200(73)\>\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_201\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_201\ \<\ 0)\l\
\ \ goto\ \<bb\ 80\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 75\>;\ [99.27%]\l\
}"];
fn_220_basic_block_75 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:9673076\<bb\ 75\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_195\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 76\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 77\>;\ [70.00%]\l\
}"];
fn_220_basic_block_76 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:2901923\<bb\ 76\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_202\ =\ self_39(D)-\>output_buffer;\l\
|_203\ =\ &MEM[(struct\ PyBytesObject\ *)_202].ob_sval;\l\
|self_39(D)-\>output_buffer_raw\ =\ _203;\l\
goto\ \<bb\ 80\>;\ [100.00%]\l\
}"];
fn_220_basic_block_77 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:6771153\<bb\ 77\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_204\ =\ self_39(D)-\>output_buffer;\l\
|_205\ =\ MEM[(struct\ PyVarObject\ *)_204].ob_size;\l\
|if\ (_205\ !=\ 0)\l\
\ \ goto\ \<bb\ 78\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 79\>;\ [50.00%]\l\
}"];
fn_220_basic_block_78 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:3385576\<bb\ 78\>:\l\
|iftmp.11_206\ =\ MEM[(struct\ PyByteArrayObject\ *)_204].ob_start;\l\
}"];
fn_220_basic_block_79 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:6771153\<bb\ 79\>:\l\
|#\ iftmp.11_207\ =\ PHI\ \<&_PyByteArray_empty_string(77),\ iftmp.11_206(78)\>\l\
|self_39(D)-\>output_buffer_raw\ =\ iftmp.11_207;\l\
}"];
fn_220_basic_block_80 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:9744208\<bb\ 80\>:\l\
|#\ _208\ =\ PHI\ \<-1(74),\ iftmp.10_201(76),\ iftmp.10_201(79)\>\l\
|_274\ =\ _208;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|_185\ =\ _274;\l\
|if\ (_185\ \<\ 0)\l\
\ \ goto\ \<bb\ 82\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 81\>;\ [99.27%]\l\
}"];
fn_220_basic_block_81 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19417285\<bb\ 81\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_186\ =\ (long\ unsigned\ int)\ _21;\l\
|_187\ =\ self_39(D)-\>output_buffer_raw;\l\
|_188\ =\ self_39(D)-\>output_len;\l\
|_189\ =\ (sizetype)\ _188;\l\
|_190\ =\ _187\ +\ _189;\l\
|memcpy\ (_190,\ _23,\ n.9_186);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_191\ =\ self_39(D)-\>output_len;\l\
|_192\ =\ _21\ +\ _191;\l\
|self_39(D)-\>output_len\ =\ _192;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_82 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:19488418\<bb\ 82\>:\l\
|#\ _193\ =\ PHI\ \<-1(80),\ 0(81)\>\l\
|_277\ =\ _193;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|_24\ =\ _277;\l\
|if\ (_24\ \<\ 0)\l\
\ \ goto\ \<bb\ 96\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 83\>;\ [99.27%]\l\
}"];
fn_220_basic_block_83 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29385640\<bb\ 83\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ s\ =\>\ \"\\\"\"\l\
|#\ DEBUG\ n\ =\>\ 1\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_write\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_209\ =\ self_39(D)-\>output_len;\l\
|required_210\ =\ _209\ +\ 1;\l\
|#\ DEBUG\ required\ =\>\ required_210\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_211\ =\ self_39(D)-\>max_output_len;\l\
|if\ (required_210\ \>\ _211)\l\
\ \ goto\ \<bb\ 84\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 94\>;\ [50.00%]\l\
}"];
fn_220_basic_block_84 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:14692820\<bb\ 84\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ self\ =\>\ self_39(D)\l\
|#\ DEBUG\ size\ =\>\ required_210\l\
|#\ DEBUG\ INLINE_ENTRY\ mp_resize\l\
|#\ DEBUG\ BEGIN_STMT\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_221\ =\ self_39(D)-\>output_buffer;\l\
|#\ DEBUG\ ob\ =\>\ _221\l\
|#\ DEBUG\ type\ =\>\ &PyBytes_Type\l\
|#\ DEBUG\ INLINE_ENTRY\ _Py_IS_TYPE\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_222\ =\ MEM[(const\ struct\ PyObject\ *)_221].ob_type;\l\
|#\ DEBUG\ ob\ =\>\ NULL\l\
|#\ DEBUG\ type\ =\>\ NULL\l\
|#\ DEBUG\ is_bytes\ =\>\ _222\ ==\ &PyBytes_Type\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_223\ =\ required_210\ *\ 2;\l\
|_224\ =\ MAX_EXPR\ \<_223,\ 8\>;\l\
|self_39(D)-\>max_output_len\ =\ _224;\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_222\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 85\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 86\>;\ [70.00%]\l\
}"];
fn_220_basic_block_85 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:4407846\<bb\ 85\>:\l\
|_225\ =\ &self_39(D)-\>output_buffer;\l\
|iftmp.10_226\ =\ _PyBytes_Resize\ (_225,\ _224);\l\
goto\ \<bb\ 87\>;\ [100.00%]\l\
}"];
fn_220_basic_block_86 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10284974\<bb\ 86\>:\l\
|iftmp.10_227\ =\ PyByteArray_Resize\ (_221,\ _224);\l\
}"];
fn_220_basic_block_87 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:14692820\<bb\ 87\>:\l\
|#\ iftmp.10_228\ =\ PHI\ \<iftmp.10_226(85),\ iftmp.10_227(86)\>\l\
|#\ DEBUG\ status\ =\>\ iftmp.10_228\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (iftmp.10_228\ \<\ 0)\l\
\ \ goto\ \<bb\ 93\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 88\>;\ [99.27%]\l\
}"];
fn_220_basic_block_88 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:14585563\<bb\ 88\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|if\ (_222\ ==\ &PyBytes_Type)\l\
\ \ goto\ \<bb\ 89\>;\ [30.00%]\l\
else\l\
\ \ goto\ \<bb\ 90\>;\ [70.00%]\l\
}"];
fn_220_basic_block_89 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:4375668\<bb\ 89\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_229\ =\ self_39(D)-\>output_buffer;\l\
|_230\ =\ &MEM[(struct\ PyBytesObject\ *)_229].ob_sval;\l\
|self_39(D)-\>output_buffer_raw\ =\ _230;\l\
goto\ \<bb\ 93\>;\ [100.00%]\l\
}"];
fn_220_basic_block_90 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10209893\<bb\ 90\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_231\ =\ self_39(D)-\>output_buffer;\l\
|_232\ =\ MEM[(struct\ PyVarObject\ *)_231].ob_size;\l\
|if\ (_232\ !=\ 0)\l\
\ \ goto\ \<bb\ 91\>;\ [50.00%]\l\
else\l\
\ \ goto\ \<bb\ 92\>;\ [50.00%]\l\
}"];
fn_220_basic_block_91 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:5104947\<bb\ 91\>:\l\
|iftmp.11_233\ =\ MEM[(struct\ PyByteArrayObject\ *)_231].ob_start;\l\
}"];
fn_220_basic_block_92 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:10209893\<bb\ 92\>:\l\
|#\ iftmp.11_234\ =\ PHI\ \<&_PyByteArray_empty_string(90),\ iftmp.11_233(91)\>\l\
|self_39(D)-\>output_buffer_raw\ =\ iftmp.11_234;\l\
}"];
fn_220_basic_block_93 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:14692820\<bb\ 93\>:\l\
|#\ _235\ =\ PHI\ \<-1(87),\ iftmp.10_228(89),\ iftmp.10_228(92)\>\l\
|_283\ =\ _235;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ size\ =\>\ NULL\l\
|_212\ =\ _283;\l\
|if\ (_212\ \<\ 0)\l\
\ \ goto\ \<bb\ 95\>;\ [0.73%]\l\
else\l\
\ \ goto\ \<bb\ 94\>;\ [99.27%]\l\
}"];
fn_220_basic_block_94 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29278382\<bb\ 94\>:\l\
|#\ DEBUG\ BEGIN_STMT\l\
|n.9_213\ =\ 1;\l\
|_214\ =\ self_39(D)-\>output_buffer_raw;\l\
|_215\ =\ self_39(D)-\>output_len;\l\
|_216\ =\ (sizetype)\ _215;\l\
|_217\ =\ _214\ +\ _216;\l\
|memcpy\ (_217,\ \"\\\"\",\ n.9_213);\l\
|#\ DEBUG\ BEGIN_STMT\l\
|_218\ =\ self_39(D)-\>output_len;\l\
|_219\ =\ _218\ +\ 1;\l\
|self_39(D)-\>output_len\ =\ _219;\l\
|#\ DEBUG\ BEGIN_STMT\l\
}"];
fn_220_basic_block_95 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:29385640\<bb\ 95\>:\l\
|#\ _220\ =\ PHI\ \<-1(93),\ 0(94)\>\l\
|_286\ =\ _220;\l\
|#\ DEBUG\ self\ =\>\ NULL\l\
|#\ DEBUG\ s\ =\>\ NULL\l\
|#\ DEBUG\ n\ =\>\ NULL\l\
|#\ DEBUG\ required\ =\>\ NULL\l\
|_43\ =\ _286;\l\
}"];
fn_220_basic_block_96 [shape=record,style=filled,fillcolor=lightgrey,label="{COUNT:55854333\<bb\ 96\>:\l\
|#\ _28\ =\ PHI\ \<-1(5),\ -1(18),\ -1(34),\ -1(49),\ -1(64),\ -1(82),\ _43(95)\>\l\
|len\ =\{v\}\ \{CLOBBER\};\l\
|return\ _28;\l\
}"];
fn_220_basic_block_0:s -> fn_220_basic_block_2:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_2:s -> fn_220_basic_block_3:n [style="solid,bold",color=black,weight=10,constraint=true,label="[35%]"];
fn_220_basic_block_2:s -> fn_220_basic_block_4:n [style="solid,bold",color=black,weight=10,constraint=true,label="[64%]"];
fn_220_basic_block_3:s -> fn_220_basic_block_5:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_4:s -> fn_220_basic_block_5:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_5:s -> fn_220_basic_block_96:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_5:s -> fn_220_basic_block_6:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_6:s -> fn_220_basic_block_7:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_6:s -> fn_220_basic_block_17:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_7:s -> fn_220_basic_block_8:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_7:s -> fn_220_basic_block_9:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_8:s -> fn_220_basic_block_10:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_9:s -> fn_220_basic_block_10:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_10:s -> fn_220_basic_block_16:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_10:s -> fn_220_basic_block_11:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_11:s -> fn_220_basic_block_12:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_11:s -> fn_220_basic_block_13:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_12:s -> fn_220_basic_block_16:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_13:s -> fn_220_basic_block_14:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_13:s -> fn_220_basic_block_15:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_14:s -> fn_220_basic_block_15:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_15:s -> fn_220_basic_block_16:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_16:s -> fn_220_basic_block_18:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_16:s -> fn_220_basic_block_17:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_17:s -> fn_220_basic_block_18:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_18:s -> fn_220_basic_block_96:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_18:s -> fn_220_basic_block_68:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_19:s -> fn_220_basic_block_20:n [style="solid,bold",color=black,weight=10,constraint=true,label="[33%]"];
fn_220_basic_block_19:s -> fn_220_basic_block_21:n [style="solid,bold",color=black,weight=10,constraint=true,label="[67%]"];
fn_220_basic_block_20:s -> fn_220_basic_block_67:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_21:s -> fn_220_basic_block_22:n [style="solid,bold",color=black,weight=10,constraint=true,label="[33%]"];
fn_220_basic_block_21:s -> fn_220_basic_block_35:n [style="solid,bold",color=black,weight=10,constraint=true,label="[67%]"];
fn_220_basic_block_22:s -> fn_220_basic_block_23:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_22:s -> fn_220_basic_block_33:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_23:s -> fn_220_basic_block_24:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_23:s -> fn_220_basic_block_25:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_24:s -> fn_220_basic_block_26:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_25:s -> fn_220_basic_block_26:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_26:s -> fn_220_basic_block_32:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_26:s -> fn_220_basic_block_27:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_27:s -> fn_220_basic_block_28:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_27:s -> fn_220_basic_block_29:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_28:s -> fn_220_basic_block_32:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_29:s -> fn_220_basic_block_30:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_29:s -> fn_220_basic_block_31:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_30:s -> fn_220_basic_block_31:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_31:s -> fn_220_basic_block_32:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_32:s -> fn_220_basic_block_34:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_32:s -> fn_220_basic_block_33:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_33:s -> fn_220_basic_block_34:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_34:s -> fn_220_basic_block_96:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_220_basic_block_34:s -> fn_220_basic_block_35:n [style="solid,bold",color=black,weight=10,constraint=true,label="[97%]"];
fn_220_basic_block_35:s -> fn_220_basic_block_36:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_220_basic_block_35:s -> fn_220_basic_block_51:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_220_basic_block_36:s -> fn_220_basic_block_37:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_36:s -> fn_220_basic_block_47:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_37:s -> fn_220_basic_block_38:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_37:s -> fn_220_basic_block_39:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_38:s -> fn_220_basic_block_40:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_39:s -> fn_220_basic_block_40:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_40:s -> fn_220_basic_block_46:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_40:s -> fn_220_basic_block_41:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_41:s -> fn_220_basic_block_42:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_41:s -> fn_220_basic_block_43:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_42:s -> fn_220_basic_block_46:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_43:s -> fn_220_basic_block_44:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_43:s -> fn_220_basic_block_45:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_44:s -> fn_220_basic_block_45:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_45:s -> fn_220_basic_block_46:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_46:s -> fn_220_basic_block_48:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_46:s -> fn_220_basic_block_47:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_47:s -> fn_220_basic_block_48:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_48:s -> fn_220_basic_block_49:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_220_basic_block_48:s -> fn_220_basic_block_50:n [style="solid,bold",color=black,weight=10,constraint=true,label="[97%]"];
fn_220_basic_block_49:s -> fn_220_basic_block_96:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_50:s -> fn_220_basic_block_66:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_51:s -> fn_220_basic_block_52:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_51:s -> fn_220_basic_block_62:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_52:s -> fn_220_basic_block_53:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_52:s -> fn_220_basic_block_54:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_53:s -> fn_220_basic_block_55:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_54:s -> fn_220_basic_block_55:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_55:s -> fn_220_basic_block_61:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_55:s -> fn_220_basic_block_56:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_56:s -> fn_220_basic_block_57:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_56:s -> fn_220_basic_block_58:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_57:s -> fn_220_basic_block_61:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_58:s -> fn_220_basic_block_59:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_58:s -> fn_220_basic_block_60:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_59:s -> fn_220_basic_block_60:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_60:s -> fn_220_basic_block_61:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_61:s -> fn_220_basic_block_63:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_61:s -> fn_220_basic_block_62:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_62:s -> fn_220_basic_block_63:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_63:s -> fn_220_basic_block_64:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_220_basic_block_63:s -> fn_220_basic_block_65:n [style="solid,bold",color=black,weight=10,constraint=true,label="[97%]"];
fn_220_basic_block_64:s -> fn_220_basic_block_96:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_65:s -> fn_220_basic_block_66:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_66:s -> fn_220_basic_block_67:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_67:s -> fn_220_basic_block_68:n [style="dotted,bold",color=blue,weight=10,constraint=false,label="[100%]"];
fn_220_basic_block_68:s -> fn_220_basic_block_19:n [style="solid,bold",color=black,weight=10,constraint=true,label="[97%]"];
fn_220_basic_block_68:s -> fn_220_basic_block_69:n [style="solid,bold",color=black,weight=10,constraint=true,label="[2%]"];
fn_220_basic_block_69:s -> fn_220_basic_block_70:n [style="solid,bold",color=black,weight=10,constraint=true,label="[66%]"];
fn_220_basic_block_69:s -> fn_220_basic_block_83:n [style="solid,bold",color=black,weight=10,constraint=true,label="[34%]"];
fn_220_basic_block_70:s -> fn_220_basic_block_71:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_70:s -> fn_220_basic_block_81:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_71:s -> fn_220_basic_block_72:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_71:s -> fn_220_basic_block_73:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_72:s -> fn_220_basic_block_74:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_73:s -> fn_220_basic_block_74:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_74:s -> fn_220_basic_block_80:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_74:s -> fn_220_basic_block_75:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_75:s -> fn_220_basic_block_76:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_75:s -> fn_220_basic_block_77:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_76:s -> fn_220_basic_block_80:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_77:s -> fn_220_basic_block_78:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_77:s -> fn_220_basic_block_79:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_78:s -> fn_220_basic_block_79:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_79:s -> fn_220_basic_block_80:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_80:s -> fn_220_basic_block_82:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_80:s -> fn_220_basic_block_81:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_81:s -> fn_220_basic_block_82:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_82:s -> fn_220_basic_block_96:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_82:s -> fn_220_basic_block_83:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_83:s -> fn_220_basic_block_84:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_83:s -> fn_220_basic_block_94:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_84:s -> fn_220_basic_block_85:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_84:s -> fn_220_basic_block_86:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_85:s -> fn_220_basic_block_87:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_86:s -> fn_220_basic_block_87:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_87:s -> fn_220_basic_block_93:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_87:s -> fn_220_basic_block_88:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_88:s -> fn_220_basic_block_89:n [style="solid,bold",color=black,weight=10,constraint=true,label="[30%]"];
fn_220_basic_block_88:s -> fn_220_basic_block_90:n [style="solid,bold",color=black,weight=10,constraint=true,label="[70%]"];
fn_220_basic_block_89:s -> fn_220_basic_block_93:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_90:s -> fn_220_basic_block_91:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_90:s -> fn_220_basic_block_92:n [style="solid,bold",color=black,weight=10,constraint=true,label="[50%]"];
fn_220_basic_block_91:s -> fn_220_basic_block_92:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_92:s -> fn_220_basic_block_93:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_93:s -> fn_220_basic_block_95:n [style="solid,bold",color=black,weight=10,constraint=true,label="[0%]"];
fn_220_basic_block_93:s -> fn_220_basic_block_94:n [style="solid,bold",color=black,weight=10,constraint=true,label="[99%]"];
fn_220_basic_block_94:s -> fn_220_basic_block_95:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_95:s -> fn_220_basic_block_96:n [style="solid,bold",color=blue,weight=100,constraint=true,label="[100%]"];
fn_220_basic_block_96:s -> fn_220_basic_block_1:n [style="solid,bold",color=black,weight=10,constraint=true,label="[100%]"];
fn_220_basic_block_0:s -> fn_220_basic_block_1:n [style="invis",constraint=true];
}
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@jcrist
Copy link

jcrist commented Jul 22, 2021

Thanks for this excellent writeup! I definitely learned a few things here.

A few questions:

  • Your compiler flags differed from mine, with the addition of -O3 -fno-plt -fno-semantic-interposition -march=x86-64 -mtune=generic. I found that of these, the only one that made any difference (on my hardware) was -fno-plt, which resulted in a measurable speedup on all compilers tested. After reading a bit about this flag, I'm not sure if I should enable it or not? My understanding is it has something to do with how functions in dynamic libraries are called by the code being compiled? (edit: I no longer can reproduce this flag having any affect on benchmarks. May have been measurement error before, or some other change has negated it 🤷)
  • I noticed you only used perf to find hot functions, but not to analyze line-by-line the contents of any specific function. Over the weekend I spent a bit of time trying to use perf report to annotate different versions of the same function to try and gain some insights, and found the line annotations less useful than I would have hoped (though this is likely due to my lack of experience). Do you ever use perf to look at costs within a function, or only to hone in on which functions are hot spots?
  • Google doesn't turn up many resources for how to read the dot graphs above. I think I get the gist of what's going on here, but a resource (if you have one) for how to best use this output would be welcome.

Thanks again for the time you took to look into this and write this up!

@llllllllll
Copy link
Author

Regarding the compiler flags: I usually have set the flags explicitly. The default is "whatever your CPython is compiled with", which might not be optimal for your program. -fno-plt changes how this library will resolve calls to function in other shared objects (CPython), usually making them more efficient. Your library isn't bottlenecked on lots of calls to small functions, so I wouldn't expect to see a huge improvement. As for noise in your tests: make sure you've disabled frequency scaling and try to kill any expensive programs that might be taking up a lot of resources, or may take up resources at a random time. The $ sudo cpupower frequency-set -g performance command is what I use to make sure that my CPU isnot downclocking to save electricity. I also usually watch htop while running benchmarks to make sure that some systemd timer hasn't fired and done some expensive task while I am trying to benchmark things. Even still, I run many runs just to smooth all of this out.

Understanding perf output on a line-by-line basis is not always easy. For gcc, perf reported that the most stalls and the most cycles were spent on if (escape == 0) continue. However, there isn't really anything to optimize there. I thought about some simd lookup table stuff, and other tricks to maybe speed up the escaped lookup, but they didn't really help. Modern CPUs are incredibly complicated and it makes it hard to attribute performance to a single line or even instruction without thinking deeply about the whole execution pipeline. If you are targeting a single architecture it might be worth doing that analysis, but for a library like this it is almost always better to just look at the function as a whole.

I can't find any good resources right now, but I will keep looking and let you know if I find something. I do know that playing around with gcc jit (https://gcc.gnu.org/onlinedocs/jit/) helped me understand a bit about how GCC thinks about program structure. The form shown is the basic block control graph. At this stage, the code will be in SSA (Static Single Assignment https://gcc.gnu.org/onlinedocs/gccint/SSA.html) form. This means that variables always hold a single value (with some rules for passing values between blocks for things like loops). You will also see a bunch of tmp variables because all of the expressions are decomposed in this form. Basic blocks always end by jumping to another block, or returning. They can also conditionally jump as most of these blocks do, but inside a block there is no branching or complex control flow. GCC also implements most control flow as gotos at this point, so you will see something like:

if (a) {
    b;
}
c;

turn into something like:

if (a) {
    goto label_0;
}
else {
    goto label_1;
}
label_0:
b;
goto label_1;
label1:
c;
return;

This is really verbose, but also simple because it means there is only 1 kind of jump to think about. The main insights I get from this representation are:

  • how many branches do we have and what is the basic program structure (after inlining and optimizations which can look very different from the source)
  • how are things being inlined and optimized after inlining
  • what's gcc's guess on the likelihood of various conditions

generally, it's good to aim to minimize the branches because that gives the compiler more room to optimize and also generally is better for the actual processor.

This was fun to look at, and the code looks very good. Happy to chat more about this any time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment