#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 */
struct s_dfrag {
  int dummy;
};

/* Variables and functions */
int dfragAssemble(struct s_dfrag *, int, int, int, unsigned char const *,
                  int const, int, int);
int /*<<< orphan*/ dfragClear(struct s_dfrag *, int);
int /*<<< orphan*/ dfragGet(struct s_dfrag *, int);
int dfragLength(struct s_dfrag *, int);
scalar_t__ memcmp(unsigned char const *, unsigned char *, int const);
int /*<<< orphan*/ memcpy(unsigned char *, int /*<<< orphan*/, int);
int /*<<< orphan*/ memset(unsigned char *, int /*<<< orphan*/, int const);
int /*<<< orphan*/ printf(char *);
int dfragTestsuiteRun(struct s_dfrag *dfrag, const int fragsize,
                      const unsigned char *cmpstr, unsigned char *mystr,
                      const int str_len) {
  int ret;
  int len;
  int i, j, k;
  int pos;
  int msgid;
  int order[] = {0, 1, 2, 3, 0, 1, 3, 2, 0, 2, 1, 3, 0, 2, 3, 1, 0, 3, 1, 2,
                 0, 3, 2, 1, 1, 0, 2, 3, 1, 0, 3, 2, 1, 2, 0, 3, 1, 2, 3, 0,
                 1, 3, 0, 2, 1, 3, 2, 0, 2, 1, 0, 3, 2, 1, 3, 0, 2, 0, 1, 3,
                 2, 0, 3, 1, 2, 3, 1, 0, 2, 3, 0, 1, 3, 1, 2, 0, 3, 1, 0, 2,
                 3, 2, 1, 0, 3, 2, 0, 1, 3, 0, 1, 2, 3, 0, 2, 1, 0};
  for (k = 0; k < 64; k++) {
    for (j = 0; j < 24; j++) {
      memset(mystr, 0, str_len);
      for (i = 0; i < 4; i++) {
        pos = order[(4 * j) + i];
        msgid = (pos / 2);
        ret = dfragAssemble(dfrag, k, k, msgid,
                            &cmpstr[((k * fragsize * 4) + (pos * fragsize))],
                            fragsize, (pos - (msgid * 2)), 2);
        if (!(ret < 0)) {
          len = dfragLength(dfrag, ret);
          if (len > 0 && len <= (fragsize * 2)) {
            memcpy(&mystr[(msgid * fragsize * 2)], dfragGet(dfrag, ret), len);
          }
          dfragClear(dfrag, ret);
        }
      }
      for (i = 0; i < 2; i++) {
        if (memcmp(&cmpstr[((k * fragsize * 4) + (i * fragsize * 2))],
                   &mystr[(i * fragsize * 2)], (fragsize * 2)) != 0) {
          return 0;
        }
      }
    }
  }
  printf("success!\n");
  return 1;
}


x86 assembly (clang, -O0):
<dfragTestsuiteRun>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1f0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8d,-0x2c(%rbp)
lea    -0x1d0(%rbp),%rdi
lea    0xe54(%rip),%rsi
mov    $0x184,%edx
call   1070 <memcpy@plt>
movl   $0x0,-0x40(%rbp)
cmpl   $0x40,-0x40(%rbp)
jge    1393 <dfragTestsuiteRun+0x213>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x18,-0x3c(%rbp)
jge    1380 <dfragTestsuiteRun+0x200>
mov    -0x28(%rbp),%rdi
mov    -0x2c(%rbp),%edx
xor    %esi,%esi
call   1050 <memset@plt>
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    12f6 <dfragTestsuiteRun+0x176>
mov    -0x3c(%rbp),%eax
shl    $0x2,%eax
add    -0x38(%rbp),%eax
cltq
mov    -0x1d0(%rbp,%rax,4),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x48(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x40(%rbp),%esi
mov    -0x40(%rbp),%edx
mov    -0x48(%rbp),%ecx
mov    -0x20(%rbp),%r8
mov    -0x40(%rbp),%eax
imul   -0x14(%rbp),%eax
shl    $0x2,%eax
mov    -0x44(%rbp),%r9d
imul   -0x14(%rbp),%r9d
add    %r9d,%eax
cltq
add    %rax,%r8
mov    -0x14(%rbp),%r9d
mov    -0x44(%rbp),%eax
mov    -0x48(%rbp),%r10d
shl    $0x1,%r10d
sub    %r10d,%eax
mov    %eax,(%rsp)
movl   $0x2,0x8(%rsp)
call   1030 <dfragAssemble@plt>
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jl     12e3 <dfragTestsuiteRun+0x163>
mov    -0x10(%rbp),%rdi
mov    -0x30(%rbp),%esi
call   1080 <dfragLength@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jle    12d7 <dfragTestsuiteRun+0x157>
mov    -0x34(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jg     12d7 <dfragTestsuiteRun+0x157>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x14(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x1d8(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x30(%rbp),%esi
call   10a0 <dfragGet@plt>
mov    -0x1d8(%rbp),%rdi
mov    %eax,%esi
mov    -0x34(%rbp),%edx
call   1070 <memcpy@plt>
mov    -0x10(%rbp),%rdi
mov    -0x30(%rbp),%esi
call   1090 <dfragClear@plt>
jmp    12e8 <dfragTestsuiteRun+0x168>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11ed <dfragTestsuiteRun+0x6d>
movl   $0x0,-0x38(%rbp)
cmpl   $0x2,-0x38(%rbp)
jge    136d <dfragTestsuiteRun+0x1ed>
mov    -0x20(%rbp),%rdi
mov    -0x40(%rbp),%eax
imul   -0x14(%rbp),%eax
shl    $0x2,%eax
mov    -0x38(%rbp),%ecx
imul   -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
cltq
add    %rax,%rdi
mov    -0x28(%rbp),%rsi
mov    -0x38(%rbp),%eax
imul   -0x14(%rbp),%eax
shl    $0x1,%eax
cltq
add    %rax,%rsi
mov    -0x14(%rbp),%edx
shl    $0x1,%edx
call   1060 <memcmp@plt>
cmp    $0x0,%rax
je     135a <dfragTestsuiteRun+0x1da>
movl   $0x0,-0x4(%rbp)
jmp    13a6 <dfragTestsuiteRun+0x226>
jmp    135f <dfragTestsuiteRun+0x1df>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    12fd <dfragTestsuiteRun+0x17d>
jmp    1372 <dfragTestsuiteRun+0x1f2>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11ce <dfragTestsuiteRun+0x4e>
jmp    1385 <dfragTestsuiteRun+0x205>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11bd <dfragTestsuiteRun+0x3d>
lea    0xdea(%rip),%rdi
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1f0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dfragTestsuiteRun>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r8d,0x14(%rsp)
mov    %rdx,0x18(%rsp)
mov    %rdi,%rbx
mov    %rsi,0x20(%rsp)
lea    (%rsi,%rsi,1),%r14d
movslq %r14d,%rdx
mov    %rcx,0x8(%rsp)
lea    (%rcx,%rdx,1),%rax
mov    %rax,0x38(%rsp)
xor    %ebp,%ebp
lea    0xe42(%rip),%rcx
mov    %r14d,0x4(%rsp)
mov    %rdx,0x30(%rsp)
mov    %ebp,%eax
imul   0x20(%rsp),%eax
shl    $0x2,%eax
movslq %eax,%rsi
lea    0x0(,%rbp,4),%eax
mov    %rax,0x60(%rsp)
mov    0x18(%rsp),%rax
lea    (%rax,%rsi,1),%rdi
mov    %rdi,0x48(%rsp)
add    %rdx,%rsi
add    %rax,%rsi
mov    %rsi,0x40(%rsp)
mov    %rcx,0x28(%rsp)
xor    %eax,%eax
mov    %rbp,0x58(%rsp)
cs nopw 0x0(%rax,%rax,1)
mov    %rax,0x50(%rsp)
mov    0x8(%rsp),%rdi
xor    %esi,%esi
mov    0x14(%rsp),%edx
call   1050 <memset@plt>
xor    %r14d,%r14d
jmp    1251 <dfragTestsuiteRun+0xd1>
nopw   0x0(%rax,%rax,1)
mov    %rbp,%rbx
mov    %rbp,%rdi
mov    %r13d,%esi
call   1090 <dfragClear@plt>
mov    0x58(%rsp),%rbp
add    $0x1,%r14
cmp    $0x4,%r14
je     12f0 <dfragTestsuiteRun+0x170>
mov    0x28(%rsp),%rax
mov    (%rax,%r14,4),%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %eax,%ecx
mov    %ecx,%r15d
sar    %r15d
mov    0x60(%rsp),%rdx
add    %eax,%edx
mov    0x20(%rsp),%r9
imul   %r9d,%edx
movslq %edx,%r8
add    0x18(%rsp),%r8
and    $0xfffffffe,%ecx
sub    %ecx,%eax
mov    %rbx,%rdi
mov    %ebp,%esi
mov    %ebp,%edx
mov    %r15d,%ecx
push   $0x2
push   %rax
call   1040 <dfragAssemble@plt>
add    $0x10,%rsp
test   %eax,%eax
js     1243 <dfragTestsuiteRun+0xc3>
mov    %eax,%r13d
mov    %rbx,%rbp
mov    %rbx,%rdi
mov    %eax,%esi
call   1080 <dfragLength@plt>
test   %eax,%eax
jle    1230 <dfragTestsuiteRun+0xb0>
mov    %eax,%r12d
cmp    0x4(%rsp),%eax
jg     1230 <dfragTestsuiteRun+0xb0>
imul   0x4(%rsp),%r15d
movslq %r15d,%rbx
add    0x8(%rsp),%rbx
mov    %rbp,%rdi
mov    %r13d,%esi
call   10a0 <dfragGet@plt>
mov    %rbx,%rdi
mov    %eax,%esi
mov    %r12d,%edx
call   1070 <memcpy@plt>
jmp    1230 <dfragTestsuiteRun+0xb0>
xchg   %ax,%ax
mov    0x48(%rsp),%rdi
mov    0x8(%rsp),%rsi
mov    0x4(%rsp),%r14d
mov    %r14d,%edx
call   1060 <memcmp@plt>
xor    %r15d,%r15d
test   %rax,%rax
jne    136b <dfragTestsuiteRun+0x1eb>
mov    0x40(%rsp),%rdi
mov    0x38(%rsp),%rsi
mov    %r14d,%edx
call   1060 <memcmp@plt>
test   %rax,%rax
jne    136b <dfragTestsuiteRun+0x1eb>
mov    0x50(%rsp),%rax
add    $0x1,%rax
addq   $0x10,0x28(%rsp)
cmp    $0x18,%rax
jne    1210 <dfragTestsuiteRun+0x90>
add    $0x1,%rbp
cmp    $0x40,%rbp
mov    0x30(%rsp),%rdx
lea    0xcad(%rip),%rcx
jne    11c8 <dfragTestsuiteRun+0x48>
lea    0xe24(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%r15d
mov    %r15d,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.s_dfrag = type { i32 }
@__const.dfragTestsuiteRun.order = [97 x i32] [i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 3, i32 2, i32 0, i32 2, i32 1, i32 3, i32 0, i32 2, i32 3, i32 1, i32 0, i32 3, i32 1, i32 2, i32 0, i32 3, i32 2, i32 1, i32 1, i32 0, i32 2, i32 3, i32 1, i32 0, i32 3, i32 2, i32 1, i32 2, i32 0, i32 3, i32 1, i32 2, i32 3, i32 0, i32 1, i32 3, i32 0, i32 2, i32 1, i32 3, i32 2, i32 0, i32 2, i32 1, i32 0, i32 3, i32 2, i32 1, i32 3, i32 0, i32 2, i32 0, i32 1, i32 3, i32 2, i32 0, i32 3, i32 1, i32 2, i32 3, i32 1, i32 0, i32 2, i32 3, i32 0, i32 1, i32 3, i32 1, i32 2, i32 0, i32 3, i32 1, i32 0, i32 2, i32 3, i32 2, i32 1, i32 0, i32 3, i32 2, i32 0, i32 1, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 2, i32 1, i32 0]
@.str = [10 x i8] c"success!\0A\00"
define i32 @dfragTestsuiteRun(%struct.s_dfrag* %0, i32 %1, i8* %2, i8* %3, i32 %4) {
%6 = alloca i32
%7 = alloca %struct.s_dfrag*
%8 = alloca i32
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca [97 x i32]
store %struct.s_dfrag* %0, %struct.s_dfrag** %7
store i32 %1, i32* %8
store i8* %2, i8** %9
store i8* %3, i8** %10
store i32 %4, i32* %11
%20 = bitcast [97 x i32]* %19 to i8*
store i32 0, i32* %16
br label %21
21: ; preds = %138, %5
%22 = load i32, i32* %16
%23 = icmp slt i32 %22, 64
br i1 %23, label %24, label %141
24: ; preds = %21
store i32 0, i32* %15
br label %25
25: ; preds = %134, %24
%26 = load i32, i32* %15
%27 = icmp slt i32 %26, 24
br i1 %27, label %28, label %137
28: ; preds = %25
%29 = load i8*, i8** %10
%30 = load i32, i32* %11
%31 = call i32 @memset(i8* %29, i32 0, i32 %30)
store i32 0, i32* %14
br label %32
32: ; preds = %97, %28
%33 = load i32, i32* %14
%34 = icmp slt i32 %33, 4
br i1 %34, label %35, label %100
35: ; preds = %32
%36 = load i32, i32* %15
%37 = mul nsw i32 4, %36
%38 = load i32, i32* %14
%39 = add nsw i32 %37, %38
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [97 x i32], [97 x i32]* %19, i64 0, i64 %40
%42 = load i32, i32* %41
store i32 %42, i32* %17
%43 = load i32, i32* %17
%44 = sdiv i32 %43, 2
store i32 %44, i32* %18
%45 = load %struct.s_dfrag*, %struct.s_dfrag** %7
%46 = load i32, i32* %16
%47 = load i32, i32* %16
%48 = load i32, i32* %18
%49 = load i8*, i8** %9
%50 = load i32, i32* %16
%51 = load i32, i32* %8
%52 = mul nsw i32 %50, %51
%53 = mul nsw i32 %52, 4
%54 = load i32, i32* %17
%55 = load i32, i32* %8
%56 = mul nsw i32 %54, %55
%57 = add nsw i32 %53, %56
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %49, i64 %58
%60 = load i32, i32* %8
%61 = load i32, i32* %17
%62 = load i32, i32* %18
%63 = mul nsw i32 %62, 2
%64 = sub nsw i32 %61, %63
%65 = call i32 @dfragAssemble(%struct.s_dfrag* %45, i32 %46, i32 %47, i32 %48, i8* %59, i32 %60, i32 %64, i32 2)
store i32 %65, i32* %12
%66 = load i32, i32* %12
%67 = icmp slt i32 %66, 0
br i1 %67, label %96, label %68
68: ; preds = %35
%69 = load %struct.s_dfrag*, %struct.s_dfrag** %7
%70 = load i32, i32* %12
%71 = call i32 @dfragLength(%struct.s_dfrag* %69, i32 %70)
store i32 %71, i32* %13
%72 = load i32, i32* %13
%73 = icmp sgt i32 %72, 0
br i1 %73, label %74, label %92
74: ; preds = %68
%75 = load i32, i32* %13
%76 = load i32, i32* %8
%77 = mul nsw i32 %76, 2
%78 = icmp sle i32 %75, %77
br i1 %78, label %79, label %92
79: ; preds = %74
%80 = load i8*, i8** %10
%81 = load i32, i32* %18
%82 = load i32, i32* %8
%83 = mul nsw i32 %81, %82
%84 = mul nsw i32 %83, 2
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %80, i64 %85
%87 = load %struct.s_dfrag*, %struct.s_dfrag** %7
%88 = load i32, i32* %12
%89 = call i32 @dfragGet(%struct.s_dfrag* %87, i32 %88)
%90 = load i32, i32* %13
%91 = call i32 @memcpy(i8* %86, i32 %89, i32 %90)
br label %92
92: ; preds = %79, %74, %68
%93 = load %struct.s_dfrag*, %struct.s_dfrag** %7
%94 = load i32, i32* %12
%95 = call i32 @dfragClear(%struct.s_dfrag* %93, i32 %94)
br label %96
96: ; preds = %92, %35
br label %97
97: ; preds = %96
%98 = load i32, i32* %14
%99 = add nsw i32 %98, 1
store i32 %99, i32* %14
br label %32
100: ; preds = %32
store i32 0, i32* %14
br label %101
101: ; preds = %130, %100
%102 = load i32, i32* %14
%103 = icmp slt i32 %102, 2
br i1 %103, label %104, label %133
104: ; preds = %101
%105 = load i8*, i8** %9
%106 = load i32, i32* %16
%107 = load i32, i32* %8
%108 = mul nsw i32 %106, %107
%109 = mul nsw i32 %108, 4
%110 = load i32, i32* %14
%111 = load i32, i32* %8
%112 = mul nsw i32 %110, %111
%113 = mul nsw i32 %112, 2
%114 = add nsw i32 %109, %113
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds i8, i8* %105, i64 %115
%117 = load i8*, i8** %10
%118 = load i32, i32* %14
%119 = load i32, i32* %8
%120 = mul nsw i32 %118, %119
%121 = mul nsw i32 %120, 2
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %117, i64 %122
%124 = load i32, i32* %8
%125 = mul nsw i32 %124, 2
%126 = call i64 @memcmp(i8* %116, i8* %123, i32 %125)
%127 = icmp ne i64 %126, 0
br i1 %127, label %128, label %129
128: ; preds = %104
store i32 0, i32* %6
br label %143
129: ; preds = %104
br label %130
130: ; preds = %129
%131 = load i32, i32* %14
%132 = add nsw i32 %131, 1
store i32 %132, i32* %14
br label %101
133: ; preds = %101
br label %134
134: ; preds = %133
%135 = load i32, i32* %15
%136 = add nsw i32 %135, 1
store i32 %136, i32* %15
br label %25
137: ; preds = %25
br label %138
138: ; preds = %137
%139 = load i32, i32* %16
%140 = add nsw i32 %139, 1
store i32 %140, i32* %16
br label %21
141: ; preds = %21
%142 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %6
br label %143
143: ; preds = %141, %128
%144 = load i32, i32* %6
ret i32 %144
}

LLVM IR (-O2):
%struct.s_dfrag = type { i32 }
@__const.dfragTestsuiteRun.order = [97 x i32] [i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 3, i32 2, i32 0, i32 2, i32 1, i32 3, i32 0, i32 2, i32 3, i32 1, i32 0, i32 3, i32 1, i32 2, i32 0, i32 3, i32 2, i32 1, i32 1, i32 0, i32 2, i32 3, i32 1, i32 0, i32 3, i32 2, i32 1, i32 2, i32 0, i32 3, i32 1, i32 2, i32 3, i32 0, i32 1, i32 3, i32 0, i32 2, i32 1, i32 3, i32 2, i32 0, i32 2, i32 1, i32 0, i32 3, i32 2, i32 1, i32 3, i32 0, i32 2, i32 0, i32 1, i32 3, i32 2, i32 0, i32 3, i32 1, i32 2, i32 3, i32 1, i32 0, i32 2, i32 3, i32 0, i32 1, i32 3, i32 1, i32 2, i32 0, i32 3, i32 1, i32 0, i32 2, i32 3, i32 2, i32 1, i32 0, i32 3, i32 2, i32 0, i32 1, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 2, i32 1, i32 0]
@str = [9 x i8] c"success!\00"
define i32 @dfragTestsuiteRun(%struct.s_dfrag* %0, i32 %1, i8* %2, i8* %3, i32 %4) {
%6 = shl i32 %1, 1
%7 = sext i32 %6 to i64
%8 = getelementptr inbounds i8, i8* %3, i64 %7
br label %9
9: ; preds = %5, %64
%10 = phi i64 [ 0, %5 ], [ %65, %64 ]
%11 = trunc i64 %10 to i32
%12 = mul i32 %11, %1
%13 = shl nsw i32 %12, 2
%14 = sext i32 %13 to i64
%15 = trunc i64 %10 to i32
%16 = shl i32 %15, 2
%17 = trunc i64 %10 to i32
%18 = getelementptr inbounds i8, i8* %2, i64 %14
%19 = add nsw i64 %7, %14
%20 = getelementptr inbounds i8, i8* %2, i64 %19
br label %21
21: ; preds = %9, %61
%22 = phi i64 [ 0, %9 ], [ %62, %61 ]
%23 = tail call i32 @memset(i8* %3, i32 0, i32 %4)
%24 = shl nsw i64 %22, 2
br label %25
25: ; preds = %21, %52
%26 = phi i64 [ 0, %21 ], [ %53, %52 ]
%27 = add nuw nsw i64 %26, %24
%28 = getelementptr inbounds [97 x i32], [97 x i32]* @__const.dfragTestsuiteRun.order, i64 0, i64 %27
%29 = load i32, i32* %28
%30 = sdiv i32 %29, 2
%31 = add i32 %29, %16
%32 = mul i32 %31, %1
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %2, i64 %33
%35 = mul i32 %30, -2
%36 = add i32 %35, %29
%37 = tail call i32 @dfragAssemble(%struct.s_dfrag* %0, i32 %17, i32 %17, i32 %30, i8* %34, i32 %1, i32 %36, i32 2)
%38 = icmp slt i32 %37, 0
br i1 %38, label %52, label %39
39: ; preds = %25
%40 = tail call i32 @dfragLength(%struct.s_dfrag* %0, i32 %37)
%41 = icmp slt i32 %40, 1
%42 = icmp sgt i32 %40, %6
%43 = or i1 %41, %42
br i1 %43, label %50, label %44
44: ; preds = %39
%45 = mul i32 %6, %30
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i8, i8* %3, i64 %46
%48 = tail call i32 @dfragGet(%struct.s_dfrag* %0, i32 %37)
%49 = tail call i32 @memcpy(i8* %47, i32 %48, i32 %40)
br label %50
50: ; preds = %44, %39
%51 = tail call i32 @dfragClear(%struct.s_dfrag* %0, i32 %37)
br label %52
52: ; preds = %25, %50
%53 = add nuw nsw i64 %26, 1
%54 = icmp eq i64 %53, 4
br i1 %54, label %55, label %25
55: ; preds = %52
%56 = tail call i64 @memcmp(i8* %18, i8* %3, i32 %6)
%57 = icmp eq i64 %56, 0
br i1 %57, label %58, label %69
58: ; preds = %55
%59 = tail call i64 @memcmp(i8* %20, i8* %8, i32 %6)
%60 = icmp eq i64 %59, 0
br i1 %60, label %61, label %69
61: ; preds = %58
%62 = add nuw nsw i64 %22, 1
%63 = icmp eq i64 %62, 24
br i1 %63, label %64, label %21
64: ; preds = %61
%65 = add nuw nsw i64 %10, 1
%66 = icmp eq i64 %65, 64
br i1 %66, label %67, label %9
67: ; preds = %64
%68 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str, i64 0, i64 0))
br label %69
69: ; preds = %55, %58, %67
%70 = phi i32 [ 1, %67 ], [ 0, %58 ], [ 0, %55 ]
ret i32 %70
}