#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ inssort(char ***, unsigned int, int);
void *med3func(char ***, unsigned int, unsigned int, int, int);
int /*<<< orphan*/ swap(char ***, int, int);
int /*<<< orphan*/ vecswap(char ***, int, unsigned int, int);
void twrqs(char ***a, unsigned n, int depth) {
  if (n < 10) {
    inssort(a, n, depth);
    return;
  }
  unsigned pl = 0, pm = n >> 1, d;
  int le, lt, gt, ge, r, v, pn = n - 1;
  if (n > 50) {
    d = n >> 3;
    pl = med3func(a, pl, pl + d, pl + (d << 1), depth);
    pm = med3func(a, pm - d, pm, pm + d, depth);
    pn = med3func(a, pn - (d << 1), pn - d, pn, depth);
  }
  pm = med3func(a, pl, pm, pn, depth);
  swap(a, 0, pm);
  v = *(**(a + 0) + depth);
  for (le = 1; le < n && *(**(a + le) + depth) == v; le++)
    ;
  if (le == n) {
    if (v != 0)
      twrqs(a, n, depth + 1);
    return;
  }
  lt = le;
  gt = ge = n - 1;
  for (;;) {
    for (; lt <= gt && *(**(a + lt) + depth) <= v; lt++)
      if (*(**(a + lt) + depth) == v)
        swap(a, le++, lt);
    for (; lt <= gt && *(**(a + gt) + depth) >= v; gt--)
      if (*(**(a + gt) + depth) == v)
        swap(a, gt, ge--);
    if (lt > gt)
      break;
    swap(a, lt++, gt--);
  }
  r = ((le) <= (lt - le) ? (le) : (lt - le));
  vecswap(a, 0, lt - r, r);
  r = ((ge - gt) <= (n - ge - 1) ? (ge - gt) : (n - ge - 1));
  vecswap(a, lt, n - r, r);
  twrqs(a, lt - le, depth);
  if (v != 0)
    twrqs(a + lt - le, le + n - ge - 1, depth + 1);
  twrqs(a + n - (ge - gt), ge - gt, depth);
}


x86 assembly (clang, -O0):
<twrqs>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
cmpl   $0xa,-0xc(%rbp)
jae    1180 <twrqs+0x30>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
call   1050 <inssort@plt>
jmp    154c <twrqs+0x3fc>
movl   $0x0,-0x14(%rbp)
mov    -0xc(%rbp),%eax
shr    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x32,-0xc(%rbp)
jbe    1213 <twrqs+0xc3>
mov    -0xc(%rbp),%eax
shr    $0x3,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x14(%rbp),%edx
add    -0x1c(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
add    %eax,%ecx
mov    -0x10(%rbp),%r8d
call   1030 <med3func@plt>
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x18(%rbp),%esi
sub    -0x1c(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x18(%rbp),%ecx
add    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%r8d
call   1030 <med3func@plt>
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x38(%rbp),%esi
mov    -0x1c(%rbp),%eax
shl    $0x1,%eax
sub    %eax,%esi
mov    -0x38(%rbp),%edx
sub    -0x1c(%rbp),%edx
mov    -0x38(%rbp),%ecx
mov    -0x10(%rbp),%r8d
call   1030 <med3func@plt>
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x38(%rbp),%ecx
mov    -0x10(%rbp),%r8d
call   1030 <med3func@plt>
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x18(%rbp),%edx
xor    %esi,%esi
call   1070 <swap@plt>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    (%rax),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x39(%rbp)
jae    1287 <twrqs+0x137>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    (%rax),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    -0x34(%rbp),%eax
sete   %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    1297 <twrqs+0x147>
jmp    12aa <twrqs+0x15a>
jmp    129c <twrqs+0x14c>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1256 <twrqs+0x106>
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    12d7 <twrqs+0x187>
cmpl   $0x0,-0x34(%rbp)
je     12d2 <twrqs+0x182>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
add    $0x1,%edx
call   1040 <twrqs@plt>
jmp    154c <twrqs+0x3fc>
mov    -0x20(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    %eax,-0x28(%rbp)
jmp    12ee <twrqs+0x19e>
mov    -0x24(%rbp),%ecx
xor    %eax,%eax
cmp    -0x28(%rbp),%ecx
mov    %al,-0x3a(%rbp)
jg     131f <twrqs+0x1cf>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    (%rax),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    -0x34(%rbp),%eax
setle  %al
mov    %al,-0x3a(%rbp)
mov    -0x3a(%rbp),%al
test   $0x1,%al
jne    132f <twrqs+0x1df>
jmp    1379 <twrqs+0x229>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    (%rax),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    -0x34(%rbp),%eax
jne    1366 <twrqs+0x216>
mov    -0x8(%rbp),%rdi
mov    -0x20(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%edx
call   1070 <swap@plt>
jmp    136b <twrqs+0x21b>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12ee <twrqs+0x19e>
jmp    137e <twrqs+0x22e>
mov    -0x24(%rbp),%ecx
xor    %eax,%eax
cmp    -0x28(%rbp),%ecx
mov    %al,-0x3b(%rbp)
jg     13af <twrqs+0x25f>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    (%rax),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    -0x34(%rbp),%eax
setge  %al
mov    %al,-0x3b(%rbp)
mov    -0x3b(%rbp),%al
test   $0x1,%al
jne    13bf <twrqs+0x26f>
jmp    1409 <twrqs+0x2b9>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    (%rax),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    -0x34(%rbp),%eax
jne    13f6 <twrqs+0x2a6>
mov    -0x8(%rbp),%rdi
mov    -0x28(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    %edx,%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
call   1070 <swap@plt>
jmp    13fb <twrqs+0x2ab>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    137e <twrqs+0x22e>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    141a <twrqs+0x2ca>
jmp    143e <twrqs+0x2ee>
mov    -0x8(%rbp),%rdi
mov    -0x24(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%edx
mov    %edx,%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
call   1070 <swap@plt>
jmp    12e9 <twrqs+0x199>
mov    -0x20(%rbp),%eax
mov    -0x24(%rbp),%ecx
sub    -0x20(%rbp),%ecx
cmp    %ecx,%eax
jg     145a <twrqs+0x30a>
mov    -0x20(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    1463 <twrqs+0x313>
mov    -0x24(%rbp),%eax
sub    -0x20(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x24(%rbp),%edx
sub    -0x30(%rbp),%edx
mov    -0x30(%rbp),%ecx
xor    %esi,%esi
call   1060 <vecswap@plt>
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
ja     14a2 <twrqs+0x352>
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    14ae <twrqs+0x35e>
mov    -0xc(%rbp),%eax
sub    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x24(%rbp),%esi
mov    -0xc(%rbp),%edx
sub    -0x30(%rbp),%edx
mov    -0x30(%rbp),%ecx
call   1060 <vecswap@plt>
mov    -0x8(%rbp),%rdi
mov    -0x24(%rbp),%esi
sub    -0x20(%rbp),%esi
mov    -0x10(%rbp),%edx
call   1040 <twrqs@plt>
cmpl   $0x0,-0x34(%rbp)
je     151b <twrqs+0x3cb>
mov    -0x8(%rbp),%rdi
movslq -0x24(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rdi
movslq -0x20(%rbp),%rcx
xor    %eax,%eax
sub    %rcx,%rax
shl    $0x3,%rax
add    %rax,%rdi
mov    -0x20(%rbp),%esi
add    -0xc(%rbp),%esi
sub    -0x2c(%rbp),%esi
sub    $0x1,%esi
mov    -0x10(%rbp),%edx
add    $0x1,%edx
call   1040 <twrqs@plt>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%eax
shl    $0x3,%rax
add    %rax,%rdi
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
movslq %eax,%rcx
xor    %eax,%eax
sub    %rcx,%rax
shl    $0x3,%rax
add    %rax,%rdi
mov    -0x2c(%rbp),%esi
sub    -0x28(%rbp),%esi
mov    -0x10(%rbp),%edx
call   1040 <twrqs@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<twrqs>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %edx,%r12d
mov    %rdi,%r14
mov    %rsi,%r15
cmp    $0xa,%esi
jae    1190 <twrqs+0x40>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <inssort@plt>
nopl   0x0(%rax,%rax,1)
mov    %r15d,%ecx
shr    %ecx
lea    -0x1(%r15),%edx
mov    %r15d,%r13d
shr    $0x3,%r15d
lea    (%r15,%r15,1),%esi
mov    %ecx,%edi
sub    %r15d,%edi
mov    %edi,0x20(%rsp)
mov    %rcx,0x8(%rsp)
add    %r15d,%ecx
mov    %ecx,0x10(%rsp)
mov    %edx,%ecx
mov    %esi,0x28(%rsp)
sub    %esi,%ecx
mov    %ecx,0x34(%rsp)
mov    %edx,%ecx
mov    %r15,0x18(%rsp)
sub    %r15d,%ecx
mov    %ecx,0x30(%rsp)
movslq %r12d,%r12
cs nopw 0x0(%rax,%rax,1)
xor    %ebx,%ebx
mov    0x8(%rsp),%rbp
mov    %rdx,%r15
mov    %edx,%ecx
cmp    $0x33,%r13d
jb     123f <twrqs+0xef>
mov    %r14,%rdi
xor    %esi,%esi
mov    0x18(%rsp),%rdx
mov    0x28(%rsp),%ecx
mov    %r12d,%r8d
call   1030 <med3func@plt>
mov    %rax,%rbx
mov    %r14,%rdi
mov    0x20(%rsp),%esi
mov    0x8(%rsp),%rdx
mov    0x10(%rsp),%ecx
mov    %r12d,%r8d
call   1030 <med3func@plt>
mov    %rax,%rbp
mov    %r14,%rdi
mov    0x34(%rsp),%esi
mov    0x30(%rsp),%edx
mov    %r15d,%ecx
mov    %r12d,%r8d
call   1030 <med3func@plt>
mov    %rax,%rcx
mov    %r14,%rdi
mov    %ebx,%esi
mov    %ebp,%edx
mov    %r12d,%r8d
call   1030 <med3func@plt>
mov    %r14,%rdi
xor    %esi,%esi
mov    %eax,%edx
call   1070 <swap@plt>
mov    (%r14),%rax
mov    (%rax),%rax
mov    (%rax,%r12,1),%bpl
mov    $0x1,%ebx
mov    %r15,%rdx
nopl   0x0(%rax)
mov    (%r14,%rbx,8),%rax
mov    (%rax),%rax
cmp    %bpl,(%rax,%r12,1)
jne    1290 <twrqs+0x140>
add    $0x1,%rbx
cmp    %rbx,%r13
jne    1270 <twrqs+0x120>
jmp    1295 <twrqs+0x145>
nopl   0x0(%rax,%rax,1)
cmp    %ebx,%r13d
jne    12b0 <twrqs+0x160>
test   %bpl,%bpl
je     14bb <twrqs+0x36b>
add    $0x1,%r12
jmp    11e0 <twrqs+0x90>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%r8d
mov    %edx,%ecx
mov    %rdx,%rax
movslq %eax,%rdx
cmp    %eax,%r8d
jle    12d0 <twrqs+0x180>
mov    %rax,%r15
jmp    134a <twrqs+0x1fa>
nopl   0x0(%rax,%rax,1)
movslq %r8d,%rsi
mov    %rax,%r15
add    $0x1,%eax
mov    %eax,0x20(%rsp)
add    $0xffffffffffffffff,%rsi
mov    %rcx,0x10(%rsp)
mov    %rdx,0x8(%rsp)
jmp    12fd <twrqs+0x1ad>
nopl   (%rax)
add    $0x1,%r8d
add    $0x1,%rsi
cmp    %rdx,%rsi
jge    1343 <twrqs+0x1f3>
mov    0x8(%r14,%rsi,8),%rax
mov    (%rax),%rax
cmp    %bpl,(%rax,%r12,1)
jg     134a <twrqs+0x1fa>
jne    12f0 <twrqs+0x1a0>
lea    0x1(%rbx),%eax
mov    %eax,0x28(%rsp)
mov    %r14,%rdi
mov    %rsi,0x18(%rsp)
mov    %ebx,%esi
mov    %r8d,%edx
mov    %r8,%rbx
call   1070 <swap@plt>
mov    0x18(%rsp),%rsi
mov    0x8(%rsp),%rdx
mov    %rbx,%r8
mov    0x10(%rsp),%rcx
mov    0x28(%rsp),%eax
mov    %eax,%ebx
jmp    12f0 <twrqs+0x1a0>
mov    0x20(%rsp),%eax
mov    %eax,%r8d
movslq %r8d,%rsi
cmp    %r15d,%r8d
mov    %rsi,%rax
mov    %rsi,0x20(%rsp)
mov    %r8,0x28(%rsp)
jg     1410 <twrqs+0x2c0>
add    $0x1,%rdx
jmp    1381 <twrqs+0x231>
nopl   0x0(%rax)
add    $0xffffffff,%r15d
add    $0xffffffffffffffff,%rdx
cmp    %rsi,%rdx
jle    1410 <twrqs+0x2c0>
mov    -0x8(%r14,%rdx,8),%rax
mov    (%rax),%rax
cmp    %bpl,(%rax,%r12,1)
jl     13d0 <twrqs+0x280>
jne    1370 <twrqs+0x220>
lea    -0x1(%rcx),%eax
mov    %eax,0x18(%rsp)
mov    %r14,%rdi
mov    %r15d,%esi
mov    %rdx,0x8(%rsp)
mov    %ecx,%edx
call   1070 <swap@plt>
mov    0x20(%rsp),%rsi
mov    0x8(%rsp),%rdx
mov    0x28(%rsp),%r8
mov    0x18(%rsp),%eax
mov    %eax,%ecx
jmp    1370 <twrqs+0x220>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    0x1(%r8),%eax
mov    %eax,0x8(%rsp)
lea    -0x1(%r15),%eax
mov    %eax,0x18(%rsp)
mov    %r14,%rdi
mov    %r8d,%esi
mov    %r15d,%edx
mov    %rcx,%r15
call   1070 <swap@plt>
mov    %r15,%rcx
mov    0x8(%rsp),%eax
mov    %eax,%r8d
mov    0x18(%rsp),%eax
mov    %eax,%edx
jmp    12b5 <twrqs+0x165>
cs nopw 0x0(%rax,%rax,1)
mov    %rcx,0x10(%rsp)
mov    %r8d,%eax
sub    %ebx,%eax
mov    %eax,0x8(%rsp)
cmp    %eax,%ebx
mov    %ebx,%ecx
cmovg  %eax,%ecx
mov    %r8d,%edx
sub    %ecx,%edx
mov    %r14,%rdi
xor    %esi,%esi
call   1060 <vecswap@plt>
mov    0x10(%rsp),%rdx
mov    %edx,%eax
sub    %r15d,%eax
not    %edx
add    %r13d,%edx
cmp    %edx,%eax
mov    %rax,%r15
mov    %eax,%ecx
mov    %rdx,0x10(%rsp)
cmova  %edx,%ecx
mov    %r13d,%edx
sub    %ecx,%edx
mov    %r14,%rdi
mov    0x28(%rsp),%rsi
call   1060 <vecswap@plt>
mov    %r14,%rdi
mov    0x8(%rsp),%esi
mov    %r12d,%edx
call   1040 <twrqs@plt>
test   %bpl,%bpl
je     149c <twrqs+0x34c>
mov    0x20(%rsp),%rax
lea    (%r14,%rax,8),%rdi
movslq %ebx,%rax
shl    $0x3,%rax
sub    %rax,%rdi
mov    0x10(%rsp),%rsi
add    %ebx,%esi
lea    0x1(%r12),%edx
call   1040 <twrqs@plt>
lea    (%r14,%r13,8),%r14
mov    %r15,%rcx
movslq %ecx,%rax
shl    $0x3,%rax
sub    %rax,%r14
cmp    $0xa,%ecx
jae    1190 <twrqs+0x40>
jmp    116c <twrqs+0x1c>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @twrqs(i8*** %0, i32 %1, i32 %2) {
%4 = alloca i8***
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
store i8*** %0, i8**** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
%17 = load i32, i32* %5
%18 = icmp ult i32 %17, 10
br i1 %18, label %19, label %24
19: ; preds = %3
%20 = load i8***, i8**** %4
%21 = load i32, i32* %5
%22 = load i32, i32* %6
%23 = call i32 @inssort(i8*** %20, i32 %21, i32 %22)
br label %317
24: ; preds = %3
store i32 0, i32* %7
%25 = load i32, i32* %5
%26 = lshr i32 %25, 1
store i32 %26, i32* %8
%27 = load i32, i32* %5
%28 = sub i32 %27, 1
store i32 %28, i32* %16
%29 = load i32, i32* %5
%30 = icmp ugt i32 %29, 50
br i1 %30, label %31, label %69
31: ; preds = %24
%32 = load i32, i32* %5
%33 = lshr i32 %32, 3
store i32 %33, i32* %9
%34 = load i8***, i8**** %4
%35 = load i32, i32* %7
%36 = load i32, i32* %7
%37 = load i32, i32* %9
%38 = add i32 %36, %37
%39 = load i32, i32* %7
%40 = load i32, i32* %9
%41 = shl i32 %40, 1
%42 = add i32 %39, %41
%43 = load i32, i32* %6
%44 = call i8* @med3func(i8*** %34, i32 %35, i32 %38, i32 %42, i32 %43)
%45 = ptrtoint i8* %44 to i32
store i32 %45, i32* %7
%46 = load i8***, i8**** %4
%47 = load i32, i32* %8
%48 = load i32, i32* %9
%49 = sub i32 %47, %48
%50 = load i32, i32* %8
%51 = load i32, i32* %8
%52 = load i32, i32* %9
%53 = add i32 %51, %52
%54 = load i32, i32* %6
%55 = call i8* @med3func(i8*** %46, i32 %49, i32 %50, i32 %53, i32 %54)
%56 = ptrtoint i8* %55 to i32
store i32 %56, i32* %8
%57 = load i8***, i8**** %4
%58 = load i32, i32* %16
%59 = load i32, i32* %9
%60 = shl i32 %59, 1
%61 = sub i32 %58, %60
%62 = load i32, i32* %16
%63 = load i32, i32* %9
%64 = sub i32 %62, %63
%65 = load i32, i32* %16
%66 = load i32, i32* %6
%67 = call i8* @med3func(i8*** %57, i32 %61, i32 %64, i32 %65, i32 %66)
%68 = ptrtoint i8* %67 to i32
store i32 %68, i32* %16
br label %69
69: ; preds = %31, %24
%70 = load i8***, i8**** %4
%71 = load i32, i32* %7
%72 = load i32, i32* %8
%73 = load i32, i32* %16
%74 = load i32, i32* %6
%75 = call i8* @med3func(i8*** %70, i32 %71, i32 %72, i32 %73, i32 %74)
%76 = ptrtoint i8* %75 to i32
store i32 %76, i32* %8
%77 = load i8***, i8**** %4
%78 = load i32, i32* %8
%79 = call i32 @swap(i8*** %77, i32 0, i32 %78)
%80 = load i8***, i8**** %4
%81 = getelementptr inbounds i8**, i8*** %80, i64 0
%82 = load i8**, i8*** %81
%83 = load i8*, i8** %82
%84 = load i32, i32* %6
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %83, i64 %85
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
store i32 %88, i32* %15
store i32 1, i32* %10
br label %89
89: ; preds = %110, %69
%90 = load i32, i32* %10
%91 = load i32, i32* %5
%92 = icmp ult i32 %90, %91
br i1 %92, label %93, label %107
93: ; preds = %89
%94 = load i8***, i8**** %4
%95 = load i32, i32* %10
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8**, i8*** %94, i64 %96
%98 = load i8**, i8*** %97
%99 = load i8*, i8** %98
%100 = load i32, i32* %6
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds i8, i8* %99, i64 %101
%103 = load i8, i8* %102
%104 = sext i8 %103 to i32
%105 = load i32, i32* %15
%106 = icmp eq i32 %104, %105
br label %107
107: ; preds = %93, %89
%108 = phi i1 [ false, %89 ], [ %106, %93 ]
br i1 %108, label %109, label %113
109: ; preds = %107
br label %110
110: ; preds = %109
%111 = load i32, i32* %10
%112 = add nsw i32 %111, 1
store i32 %112, i32* %10
br label %89
113: ; preds = %107
%114 = load i32, i32* %10
%115 = load i32, i32* %5
%116 = icmp eq i32 %114, %115
br i1 %116, label %117, label %126
117: ; preds = %113
%118 = load i32, i32* %15
%119 = icmp ne i32 %118, 0
br i1 %119, label %120, label %125
120: ; preds = %117
%121 = load i8***, i8**** %4
%122 = load i32, i32* %5
%123 = load i32, i32* %6
%124 = add nsw i32 %123, 1
br label %125
125: ; preds = %120, %117
br label %317
126: ; preds = %113
%127 = load i32, i32* %10
store i32 %127, i32* %11
%128 = load i32, i32* %5
%129 = sub i32 %128, 1
store i32 %129, i32* %13
store i32 %129, i32* %12
br label %130
130: ; preds = %225, %126
br label %131
131: ; preds = %172, %130
%132 = load i32, i32* %11
%133 = load i32, i32* %12
%134 = icmp sle i32 %132, %133
br i1 %134, label %135, label %149
135: ; preds = %131
%136 = load i8***, i8**** %4
%137 = load i32, i32* %11
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8**, i8*** %136, i64 %138
%140 = load i8**, i8*** %139
%141 = load i8*, i8** %140
%142 = load i32, i32* %6
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i8, i8* %141, i64 %143
%145 = load i8, i8* %144
%146 = sext i8 %145 to i32
%147 = load i32, i32* %15
%148 = icmp sle i32 %146, %147
br label %149
149: ; preds = %135, %131
%150 = phi i1 [ false, %131 ], [ %148, %135 ]
br i1 %150, label %151, label %175
151: ; preds = %149
%152 = load i8***, i8**** %4
%153 = load i32, i32* %11
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds i8**, i8*** %152, i64 %154
%156 = load i8**, i8*** %155
%157 = load i8*, i8** %156
%158 = load i32, i32* %6
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds i8, i8* %157, i64 %159
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = load i32, i32* %15
%164 = icmp eq i32 %162, %163
br i1 %164, label %165, label %171
165: ; preds = %151
%166 = load i8***, i8**** %4
%167 = load i32, i32* %10
%168 = add nsw i32 %167, 1
store i32 %168, i32* %10
%169 = load i32, i32* %11
%170 = call i32 @swap(i8*** %166, i32 %167, i32 %169)
br label %171
171: ; preds = %165, %151
br label %172
172: ; preds = %171
%173 = load i32, i32* %11
%174 = add nsw i32 %173, 1
store i32 %174, i32* %11
br label %131
175: ; preds = %149
br label %176
176: ; preds = %217, %175
%177 = load i32, i32* %11
%178 = load i32, i32* %12
%179 = icmp sle i32 %177, %178
br i1 %179, label %180, label %194
180: ; preds = %176
%181 = load i8***, i8**** %4
%182 = load i32, i32* %12
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds i8**, i8*** %181, i64 %183
%185 = load i8**, i8*** %184
%186 = load i8*, i8** %185
%187 = load i32, i32* %6
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds i8, i8* %186, i64 %188
%190 = load i8, i8* %189
%191 = sext i8 %190 to i32
%192 = load i32, i32* %15
%193 = icmp sge i32 %191, %192
br label %194
194: ; preds = %180, %176
%195 = phi i1 [ false, %176 ], [ %193, %180 ]
br i1 %195, label %196, label %220
196: ; preds = %194
%197 = load i8***, i8**** %4
%198 = load i32, i32* %12
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i8**, i8*** %197, i64 %199
%201 = load i8**, i8*** %200
%202 = load i8*, i8** %201
%203 = load i32, i32* %6
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds i8, i8* %202, i64 %204
%206 = load i8, i8* %205
%207 = sext i8 %206 to i32
%208 = load i32, i32* %15
%209 = icmp eq i32 %207, %208
br i1 %209, label %210, label %216
210: ; preds = %196
%211 = load i8***, i8**** %4
%212 = load i32, i32* %12
%213 = load i32, i32* %13
%214 = add nsw i32 %213, -1
store i32 %214, i32* %13
%215 = call i32 @swap(i8*** %211, i32 %212, i32 %213)
br label %216
216: ; preds = %210, %196
br label %217
217: ; preds = %216
%218 = load i32, i32* %12
%219 = add nsw i32 %218, -1
store i32 %219, i32* %12
br label %176
220: ; preds = %194
%221 = load i32, i32* %11
%222 = load i32, i32* %12
%223 = icmp sgt i32 %221, %222
br i1 %223, label %224, label %225
224: ; preds = %220
br label %232
225: ; preds = %220
%226 = load i8***, i8**** %4
%227 = load i32, i32* %11
%228 = add nsw i32 %227, 1
store i32 %228, i32* %11
%229 = load i32, i32* %12
%230 = add nsw i32 %229, -1
store i32 %230, i32* %12
%231 = call i32 @swap(i8*** %226, i32 %227, i32 %229)
br label %130
232: ; preds = %224
%233 = load i32, i32* %10
%234 = load i32, i32* %11
%235 = load i32, i32* %10
%236 = sub nsw i32 %234, %235
%237 = icmp sle i32 %233, %236
br i1 %237, label %238, label %240
238: ; preds = %232
%239 = load i32, i32* %10
br label %244
240: ; preds = %232
%241 = load i32, i32* %11
%242 = load i32, i32* %10
%243 = sub nsw i32 %241, %242
br label %244
244: ; preds = %240, %238
%245 = phi i32 [ %239, %238 ], [ %243, %240 ]
store i32 %245, i32* %14
%246 = load i8***, i8**** %4
%247 = load i32, i32* %11
%248 = load i32, i32* %14
%249 = sub nsw i32 %247, %248
%250 = load i32, i32* %14
%251 = call i32 @vecswap(i8*** %246, i32 0, i32 %249, i32 %250)
%252 = load i32, i32* %13
%253 = load i32, i32* %12
%254 = sub nsw i32 %252, %253
%255 = load i32, i32* %5
%256 = load i32, i32* %13
%257 = sub i32 %255, %256
%258 = sub i32 %257, 1
%259 = icmp ule i32 %254, %258
br i1 %259, label %260, label %264
260: ; preds = %244
%261 = load i32, i32* %13
%262 = load i32, i32* %12
%263 = sub nsw i32 %261, %262
br label %269
264: ; preds = %244
%265 = load i32, i32* %5
%266 = load i32, i32* %13
%267 = sub i32 %265, %266
%268 = sub i32 %267, 1
br label %269
269: ; preds = %264, %260
%270 = phi i32 [ %263, %260 ], [ %268, %264 ]
store i32 %270, i32* %14
%271 = load i8***, i8**** %4
%272 = load i32, i32* %11
%273 = load i32, i32* %5
%274 = load i32, i32* %14
%275 = sub i32 %273, %274
%276 = load i32, i32* %14
%277 = call i32 @vecswap(i8*** %271, i32 %272, i32 %275, i32 %276)
%278 = load i8***, i8**** %4
%279 = load i32, i32* %11
%280 = load i32, i32* %10
%281 = sub nsw i32 %279, %280
%282 = load i32, i32* %6
%283 = load i32, i32* %15
%284 = icmp ne i32 %283, 0
br i1 %284, label %285, label %302
285: ; preds = %269
%286 = load i8***, i8**** %4
%287 = load i32, i32* %11
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds i8**, i8*** %286, i64 %288
%290 = load i32, i32* %10
%291 = sext i32 %290 to i64
%292 = sub i64 0, %291
%293 = getelementptr inbounds i8**, i8*** %289, i64 %292
%294 = load i32, i32* %10
%295 = load i32, i32* %5
%296 = add i32 %294, %295
%297 = load i32, i32* %13
%298 = sub i32 %296, %297
%299 = sub i32 %298, 1
%300 = load i32, i32* %6
%301 = add nsw i32 %300, 1
br label %302
302: ; preds = %285, %269
%303 = load i8***, i8**** %4
%304 = load i32, i32* %5
%305 = zext i32 %304 to i64
%306 = getelementptr inbounds i8**, i8*** %303, i64 %305
%307 = load i32, i32* %13
%308 = load i32, i32* %12
%309 = sub nsw i32 %307, %308
%310 = sext i32 %309 to i64
%311 = sub i64 0, %310
%312 = getelementptr inbounds i8**, i8*** %306, i64 %311
%313 = load i32, i32* %13
%314 = load i32, i32* %12
%315 = sub nsw i32 %313, %314
%316 = load i32, i32* %6
br label %317
317: ; preds = %302, %125, %19
ret void
}

LLVM IR (-O2):
define void @twrqs(i8*** %0, i32 %1, i32 %2) {
%4 = icmp ult i32 %1, 10
br i1 %4, label %22, label %5
5: ; preds = %3, %161
%6 = phi i32 [ %67, %161 ], [ %2, %3 ]
%7 = phi i32 [ %145, %161 ], [ %1, %3 ]
%8 = phi i8*** [ %166, %161 ], [ %0, %3 ]
%9 = lshr i32 %7, 1
%10 = add i32 %7, -1
%11 = icmp ugt i32 %7, 50
%12 = lshr i32 %7, 3
%13 = shl nuw nsw i32 %12, 1
%14 = sub nsw i32 %9, %12
%15 = add nuw i32 %9, %12
%16 = sub i32 %10, %13
%17 = sub i32 %10, %12
%18 = sext i32 %6 to i64
%19 = zext i32 %7 to i64
br label %27
20: ; preds = %161
%21 = trunc i64 %28 to i32
br label %22
22: ; preds = %20, %3
%23 = phi i8*** [ %0, %3 ], [ %166, %20 ]
%24 = phi i32 [ %1, %3 ], [ %145, %20 ]
%25 = phi i32 [ %2, %3 ], [ %21, %20 ]
%26 = tail call i32 @inssort(i8*** %23, i32 %24, i32 %25)
br label %168
27: ; preds = %71, %5
%28 = phi i64 [ %18, %5 ], [ %72, %71 ]
%29 = trunc i64 %28 to i32
br i1 %11, label %30, label %40
30: ; preds = %27
%31 = tail call i8* @med3func(i8*** %8, i32 0, i32 %12, i32 %13, i32 %29)
%32 = ptrtoint i8* %31 to i64
%33 = trunc i64 %32 to i32
%34 = tail call i8* @med3func(i8*** %8, i32 %14, i32 %9, i32 %15, i32 %29)
%35 = ptrtoint i8* %34 to i64
%36 = trunc i64 %35 to i32
%37 = tail call i8* @med3func(i8*** %8, i32 %16, i32 %17, i32 %10, i32 %29)
%38 = ptrtoint i8* %37 to i64
%39 = trunc i64 %38 to i32
br label %40
40: ; preds = %27, %30
%41 = phi i32 [ %36, %30 ], [ %9, %27 ]
%42 = phi i32 [ %33, %30 ], [ 0, %27 ]
%43 = phi i32 [ %39, %30 ], [ %10, %27 ]
%44 = tail call i8* @med3func(i8*** %8, i32 %42, i32 %41, i32 %43, i32 %29)
%45 = ptrtoint i8* %44 to i64
%46 = trunc i64 %45 to i32
%47 = tail call i32 @swap(i8*** %8, i32 0, i32 %46)
%48 = load i8**, i8*** %8
%49 = load i8*, i8** %48
%50 = getelementptr inbounds i8, i8* %49, i64 %28
%51 = load i8, i8* %50
br label %52
52: ; preds = %40, %60
%53 = phi i64 [ 1, %40 ], [ %61, %60 ]
%54 = getelementptr inbounds i8**, i8*** %8, i64 %53
%55 = load i8**, i8*** %54
%56 = load i8*, i8** %55
%57 = getelementptr inbounds i8, i8* %56, i64 %28
%58 = load i8, i8* %57
%59 = icmp eq i8 %58, %51
br i1 %59, label %60, label %63
60: ; preds = %52
%61 = add nuw nsw i64 %53, 1
%62 = icmp eq i64 %61, %19
br i1 %62, label %69, label %52
63: ; preds = %52
%64 = trunc i64 %53 to i32
%65 = icmp eq i32 %7, %64
br i1 %65, label %69, label %66
66: ; preds = %63
%67 = trunc i64 %28 to i32
%68 = trunc i64 %53 to i32
br label %73
69: ; preds = %60, %63
%70 = icmp eq i8 %51, 0
br i1 %70, label %168, label %71
71: ; preds = %69
%72 = add i64 %28, 1
br label %27
73: ; preds = %66, %130
%74 = phi i32 [ %105, %130 ], [ %68, %66 ]
%75 = phi i32 [ %132, %130 ], [ %68, %66 ]
%76 = phi i32 [ %133, %130 ], [ %10, %66 ]
%77 = phi i32 [ %113, %130 ], [ %10, %66 ]
%78 = icmp sgt i32 %75, %76
br i1 %78, label %104, label %79
79: ; preds = %73
%80 = sext i32 %75 to i64
%81 = sext i32 %76 to i64
%82 = add i32 %76, 1
br label %83
83: ; preds = %79, %98
%84 = phi i64 [ %80, %79 ], [ %100, %98 ]
%85 = phi i32 [ %74, %79 ], [ %99, %98 ]
%86 = getelementptr inbounds i8**, i8*** %8, i64 %84
%87 = load i8**, i8*** %86
%88 = load i8*, i8** %87
%89 = getelementptr inbounds i8, i8* %88, i64 %28
%90 = load i8, i8* %89
%91 = icmp sgt i8 %90, %51
%92 = trunc i64 %84 to i32
br i1 %91, label %102, label %93
93: ; preds = %83
%94 = icmp eq i8 %90, %51
br i1 %94, label %95, label %98
95: ; preds = %93
%96 = add nsw i32 %85, 1
%97 = tail call i32 @swap(i8*** %8, i32 %85, i32 %92)
br label %98
98: ; preds = %93, %95
%99 = phi i32 [ %96, %95 ], [ %85, %93 ]
%100 = add nsw i64 %84, 1
%101 = icmp slt i64 %84, %81
br i1 %101, label %83, label %104
102: ; preds = %83
%103 = trunc i64 %84 to i32
br label %104
104: ; preds = %98, %102, %73
%105 = phi i32 [ %74, %73 ], [ %85, %102 ], [ %99, %98 ]
%106 = phi i32 [ %75, %73 ], [ %103, %102 ], [ %82, %98 ]
%107 = icmp sgt i32 %106, %76
br i1 %107, label %137, label %108
108: ; preds = %104
%109 = sext i32 %76 to i64
%110 = sext i32 %106 to i64
br label %111
111: ; preds = %108, %126
%112 = phi i64 [ %109, %108 ], [ %128, %126 ]
%113 = phi i32 [ %77, %108 ], [ %127, %126 ]
%114 = getelementptr inbounds i8**, i8*** %8, i64 %112
%115 = load i8**, i8*** %114
%116 = load i8*, i8** %115
%117 = getelementptr inbounds i8, i8* %116, i64 %28
%118 = load i8, i8* %117
%119 = icmp slt i8 %118, %51
br i1 %119, label %130, label %120
120: ; preds = %111
%121 = icmp eq i8 %118, %51
br i1 %121, label %122, label %126
122: ; preds = %120
%123 = add nsw i32 %113, -1
%124 = trunc i64 %112 to i32
%125 = tail call i32 @swap(i8*** %8, i32 %124, i32 %113)
br label %126
126: ; preds = %120, %122
%127 = phi i32 [ %123, %122 ], [ %113, %120 ]
%128 = add nsw i64 %112, -1
%129 = icmp sgt i64 %112, %110
br i1 %129, label %111, label %135
130: ; preds = %111
%131 = trunc i64 %112 to i32
%132 = add nsw i32 %106, 1
%133 = add nsw i32 %131, -1
%134 = tail call i32 @swap(i8*** %8, i32 %106, i32 %131)
br label %73
135: ; preds = %126
%136 = trunc i64 %128 to i32
br label %137
137: ; preds = %104, %135
%138 = phi i32 [ %136, %135 ], [ %76, %104 ]
%139 = phi i32 [ %127, %135 ], [ %77, %104 ]
%140 = sub nsw i32 %106, %105
%141 = icmp sgt i32 %105, %140
%142 = select i1 %141, i32 %140, i32 %105
%143 = sub nsw i32 %106, %142
%144 = tail call i32 @vecswap(i8*** %8, i32 0, i32 %143, i32 %142)
%145 = sub nsw i32 %139, %138
%146 = xor i32 %139, -1
%147 = add i32 %7, %146
%148 = icmp ugt i32 %145, %147
%149 = select i1 %148, i32 %147, i32 %145
%150 = sub i32 %7, %149
%151 = tail call i32 @vecswap(i8*** %8, i32 %106, i32 %150, i32 %149)
tail call void @twrqs(i8*** %8, i32 %140, i32 %67)
%152 = icmp eq i8 %51, 0
br i1 %152, label %161, label %153
153: ; preds = %137
%154 = sext i32 %106 to i64
%155 = getelementptr inbounds i8**, i8*** %8, i64 %154
%156 = sext i32 %105 to i64
%157 = sub nsw i64 0, %156
%158 = getelementptr inbounds i8**, i8*** %155, i64 %157
%159 = add i32 %147, %105
%160 = add nsw i32 %67, 1
tail call void @twrqs(i8*** %158, i32 %159, i32 %160)
br label %161
161: ; preds = %153, %137
%162 = zext i32 %7 to i64
%163 = getelementptr inbounds i8**, i8*** %8, i64 %162
%164 = sext i32 %145 to i64
%165 = sub nsw i64 0, %164
%166 = getelementptr inbounds i8**, i8*** %163, i64 %165
%167 = icmp ult i32 %145, 10
br i1 %167, label %20, label %5
168: ; preds = %69, %22
ret void
}