#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 DList {
  int dummy;
};

/* Variables and functions */
struct DList *dlist_create();
int /*<<< orphan*/ dlist_delete(struct DList *);
int dlist_get(struct DList *, int /*<<< orphan*/, int *);
int /*<<< orphan*/ dlist_insert(struct DList *, int /*<<< orphan*/, int);
int dlist_length(struct DList *);
int /*<<< orphan*/ dlist_prepend(struct DList *, int);
scalar_t__ dlist_remove(struct DList *, int);
int /*<<< orphan*/ printf(char *);
int test_dlist() {
  int error = 0;
  struct DList *dlist = dlist_create();
  if (dlist_length(dlist) != 0) {
    printf("dlist_length of empty dlist should be zero\n");
    dlist_delete(dlist);
    return 0;
  }
  dlist_insert(dlist, 0, 101);
  if (dlist_length(dlist) != 1) {
    printf("dlist_length should be 1\n");
    dlist_delete(dlist);
    return 0;
  }
  if (dlist_get(dlist, 0, &error) != 101) {
    printf("dlist_get should return value 101E\n");
    dlist_delete(dlist);
    return 0;
  }
  if (error != 0) {
    printf("error in dlist_get (1)\n");
    dlist_delete(dlist);
    return 0;
  }
  dlist_insert(dlist, 0, 202);
  if (dlist_length(dlist) != 2) {
    printf("dlist_length should return 2\n");
    dlist_delete(dlist);
    return 0;
  }
  if (dlist_get(dlist, 0, &error) != 202) {
    printf("dlist_get should return 202\n");
    dlist_delete(dlist);
    return 0;
  }
  if (error != 0) {
    printf("Error in dlist_length (2)\n");
    dlist_delete(dlist);
    return 0;
  }
  if (dlist_remove(dlist, 1) == 0) {
    printf("Error in dlist_remove\n");
    dlist_delete(dlist);
    return 0;
  }
  if (dlist_length(dlist) != 1) {
    printf("dlist_length should return 1 (after remove)\n");
    dlist_delete(dlist);
    return 0;
  }
  dlist_prepend(dlist, 34);
  if (dlist_length(dlist) != 2) {
    printf("dlist_length should return 2 (after prepend)\n");
    dlist_delete(dlist);
    return 0;
  }
  if (dlist_get(dlist, 0, &error) != 34) {
    printf("dlist_get should return 34 (after prepend)\n");
    dlist_delete(dlist);
    return 0;
  }
  if (error != 0) {
    printf("Error in dlist_prepend (could not get value)\n");
    dlist_delete(dlist);
    return 0;
  }
  dlist_delete(dlist);
  return 1;
}


x86 assembly (clang, -O0):
<test_dlist>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x8(%rbp)
mov    $0x0,%al
call   1060 <dlist_create@plt>
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1090 <dlist_length@plt>
cmp    $0x0,%eax
je     11cd <test_dlist+0x4d>
lea    0xe4d(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
mov    $0x65,%edx
call   10a0 <dlist_insert@plt>
mov    -0x10(%rbp),%rdi
call   1090 <dlist_length@plt>
cmp    $0x1,%eax
je     1210 <test_dlist+0x90>
lea    0xe36(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
lea    -0x8(%rbp),%rdx
call   1030 <dlist_get@plt>
cmp    $0x65,%eax
je     1249 <test_dlist+0xc9>
lea    0xe17(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
cmpl   $0x0,-0x8(%rbp)
je     1274 <test_dlist+0xf4>
lea    0xe10(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
mov    $0xca,%edx
call   10a0 <dlist_insert@plt>
mov    -0x10(%rbp),%rdi
call   1090 <dlist_length@plt>
cmp    $0x2,%eax
je     12b7 <test_dlist+0x137>
lea    0xde5(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
lea    -0x8(%rbp),%rdx
call   1030 <dlist_get@plt>
cmp    $0xca,%eax
je     12f2 <test_dlist+0x172>
lea    0xdc8(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
cmpl   $0x0,-0x8(%rbp)
je     131d <test_dlist+0x19d>
lea    0xdba(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
mov    $0x1,%esi
call   1040 <dlist_remove@plt>
cmp    $0x0,%rax
jne    1356 <test_dlist+0x1d6>
lea    0xd9c(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
call   1090 <dlist_length@plt>
cmp    $0x1,%eax
je     1389 <test_dlist+0x209>
lea    0xd80(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
mov    $0x22,%esi
call   1080 <dlist_prepend@plt>
mov    -0x10(%rbp),%rdi
call   1090 <dlist_length@plt>
cmp    $0x2,%eax
je     13ca <test_dlist+0x24a>
lea    0xd6c(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
lea    -0x8(%rbp),%rdx
call   1030 <dlist_get@plt>
cmp    $0x22,%eax
je     1403 <test_dlist+0x283>
lea    0xd61(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
cmpl   $0x0,-0x8(%rbp)
je     142e <test_dlist+0x2ae>
lea    0xd62(%rip),%rdi
call   1050 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x0,-0x4(%rbp)
jmp    143e <test_dlist+0x2be>
mov    -0x10(%rbp),%rdi
call   1070 <dlist_delete@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_dlist>:
push   %rbp
push   %rbx
push   %rax
movl   $0x0,0x4(%rsp)
xor    %ebp,%ebp
xor    %eax,%eax
call   1060 <dlist_create@plt>
mov    %rax,%rbx
mov    %rax,%rdi
call   1090 <dlist_length@plt>
test   %eax,%eax
je     11ac <test_dlist+0x2c>
lea    0xfc3(%rip),%rdi
jmp    1200 <test_dlist+0x80>
xor    %ebp,%ebp
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x65,%edx
call   10a0 <dlist_insert@plt>
mov    %rbx,%rdi
call   1090 <dlist_length@plt>
cmp    $0x1,%eax
jne    11f0 <test_dlist+0x70>
xor    %ebp,%ebp
lea    0x4(%rsp),%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1040 <dlist_get@plt>
cmp    $0x65,%eax
jne    11f9 <test_dlist+0x79>
cmpl   $0x0,0x4(%rsp)
je     1216 <test_dlist+0x96>
lea    0xf2c(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xf5d(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xf31(%rip),%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1070 <dlist_delete@plt>
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret
xor    %ebp,%ebp
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0xca,%edx
call   10a0 <dlist_insert@plt>
mov    %rbx,%rdi
call   1090 <dlist_length@plt>
cmp    $0x2,%eax
jne    125c <test_dlist+0xdc>
xor    %ebp,%ebp
lea    0x4(%rsp),%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1040 <dlist_get@plt>
cmp    $0xca,%eax
jne    1265 <test_dlist+0xe5>
cmpl   $0x0,0x4(%rsp)
je     126e <test_dlist+0xee>
lea    0xe6d(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xe9a(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xe75(%rip),%rdi
jmp    1200 <test_dlist+0x80>
mov    %rbx,%rdi
mov    $0x1,%esi
call   1050 <dlist_remove@plt>
test   %rax,%rax
je     12d0 <test_dlist+0x150>
mov    %rbx,%rdi
call   1090 <dlist_length@plt>
cmp    $0x1,%eax
jne    12dc <test_dlist+0x15c>
mov    %rbx,%rdi
mov    $0x22,%esi
call   1080 <dlist_prepend@plt>
mov    %rbx,%rdi
call   1090 <dlist_length@plt>
cmp    $0x2,%eax
jne    12e8 <test_dlist+0x168>
xor    %ebp,%ebp
lea    0x4(%rsp),%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1040 <dlist_get@plt>
cmp    $0x22,%eax
jne    12f4 <test_dlist+0x174>
cmpl   $0x0,0x4(%rsp)
je     1300 <test_dlist+0x180>
lea    0xd35(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xdda(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xda2(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xd69(%rip),%rdi
jmp    1200 <test_dlist+0x80>
lea    0xd32(%rip),%rdi
jmp    1200 <test_dlist+0x80>
mov    %rbx,%rdi
call   1070 <dlist_delete@plt>
mov    $0x1,%ebp
jmp    120d <test_dlist+0x8d>

LLVM IR (-O0):
%struct.DList = type { i32 }
@.str = [44 x i8] c"dlist_length of empty dlist should be zero\0A\00"
@.str.1 = [26 x i8] c"dlist_length should be 1\0A\00"
@.str.2 = [36 x i8] c"dlist_get should return value 101E\0A\00"
@.str.3 = [24 x i8] c"error in dlist_get (1)\0A\00"
@.str.4 = [30 x i8] c"dlist_length should return 2\0A\00"
@.str.5 = [29 x i8] c"dlist_get should return 202\0A\00"
@.str.6 = [27 x i8] c"Error in dlist_length (2)\0A\00"
@.str.7 = [23 x i8] c"Error in dlist_remove\0A\00"
@.str.8 = [45 x i8] c"dlist_length should return 1 (after remove)\0A\00"
@.str.9 = [46 x i8] c"dlist_length should return 2 (after prepend)\0A\00"
@.str.10 = [44 x i8] c"dlist_get should return 34 (after prepend)\0A\00"
@.str.11 = [46 x i8] c"Error in dlist_prepend (could not get value)\0A\00"
define i32 @test_dlist() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca %struct.DList*
store i32 0, i32* %2
%4 = call %struct.DList* (...) @dlist_create()
store %struct.DList* %4, %struct.DList** %3
%5 = load %struct.DList*, %struct.DList** %3
%6 = call i32 @dlist_length(%struct.DList* %5)
%7 = icmp ne i32 %6, 0
br i1 %7, label %8, label %12
8: ; preds = %0
%9 = call i32 @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str, i64 0, i64 0))
%10 = load %struct.DList*, %struct.DList** %3
%11 = call i32 @dlist_delete(%struct.DList* %10)
store i32 0, i32* %1
br label %106
12: ; preds = %0
%13 = load %struct.DList*, %struct.DList** %3
%14 = call i32 @dlist_insert(%struct.DList* %13, i32 0, i32 101)
%15 = load %struct.DList*, %struct.DList** %3
%16 = call i32 @dlist_length(%struct.DList* %15)
%17 = icmp ne i32 %16, 1
br i1 %17, label %18, label %22
18: ; preds = %12
%19 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.1, i64 0, i64 0))
%20 = load %struct.DList*, %struct.DList** %3
%21 = call i32 @dlist_delete(%struct.DList* %20)
store i32 0, i32* %1
br label %106
22: ; preds = %12
%23 = load %struct.DList*, %struct.DList** %3
%24 = call i32 @dlist_get(%struct.DList* %23, i32 0, i32* %2)
%25 = icmp ne i32 %24, 101
br i1 %25, label %26, label %30
26: ; preds = %22
%27 = call i32 @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0))
%28 = load %struct.DList*, %struct.DList** %3
%29 = call i32 @dlist_delete(%struct.DList* %28)
store i32 0, i32* %1
br label %106
30: ; preds = %22
%31 = load i32, i32* %2
%32 = icmp ne i32 %31, 0
br i1 %32, label %33, label %37
33: ; preds = %30
%34 = call i32 @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0))
%35 = load %struct.DList*, %struct.DList** %3
%36 = call i32 @dlist_delete(%struct.DList* %35)
store i32 0, i32* %1
br label %106
37: ; preds = %30
%38 = load %struct.DList*, %struct.DList** %3
%39 = call i32 @dlist_insert(%struct.DList* %38, i32 0, i32 202)
%40 = load %struct.DList*, %struct.DList** %3
%41 = call i32 @dlist_length(%struct.DList* %40)
%42 = icmp ne i32 %41, 2
br i1 %42, label %43, label %47
43: ; preds = %37
%44 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.4, i64 0, i64 0))
%45 = load %struct.DList*, %struct.DList** %3
%46 = call i32 @dlist_delete(%struct.DList* %45)
store i32 0, i32* %1
br label %106
47: ; preds = %37
%48 = load %struct.DList*, %struct.DList** %3
%49 = call i32 @dlist_get(%struct.DList* %48, i32 0, i32* %2)
%50 = icmp ne i32 %49, 202
br i1 %50, label %51, label %55
51: ; preds = %47
%52 = call i32 @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.5, i64 0, i64 0))
%53 = load %struct.DList*, %struct.DList** %3
%54 = call i32 @dlist_delete(%struct.DList* %53)
store i32 0, i32* %1
br label %106
55: ; preds = %47
%56 = load i32, i32* %2
%57 = icmp ne i32 %56, 0
br i1 %57, label %58, label %62
58: ; preds = %55
%59 = call i32 @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.6, i64 0, i64 0))
%60 = load %struct.DList*, %struct.DList** %3
%61 = call i32 @dlist_delete(%struct.DList* %60)
store i32 0, i32* %1
br label %106
62: ; preds = %55
%63 = load %struct.DList*, %struct.DList** %3
%64 = call i64 @dlist_remove(%struct.DList* %63, i32 1)
%65 = icmp eq i64 %64, 0
br i1 %65, label %66, label %70
66: ; preds = %62
%67 = call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.7, i64 0, i64 0))
%68 = load %struct.DList*, %struct.DList** %3
%69 = call i32 @dlist_delete(%struct.DList* %68)
store i32 0, i32* %1
br label %106
70: ; preds = %62
%71 = load %struct.DList*, %struct.DList** %3
%72 = call i32 @dlist_length(%struct.DList* %71)
%73 = icmp ne i32 %72, 1
br i1 %73, label %74, label %78
74: ; preds = %70
%75 = call i32 @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.8, i64 0, i64 0))
%76 = load %struct.DList*, %struct.DList** %3
%77 = call i32 @dlist_delete(%struct.DList* %76)
store i32 0, i32* %1
br label %106
78: ; preds = %70
%79 = load %struct.DList*, %struct.DList** %3
%80 = call i32 @dlist_prepend(%struct.DList* %79, i32 34)
%81 = load %struct.DList*, %struct.DList** %3
%82 = call i32 @dlist_length(%struct.DList* %81)
%83 = icmp ne i32 %82, 2
br i1 %83, label %84, label %88
84: ; preds = %78
%85 = call i32 @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.9, i64 0, i64 0))
%86 = load %struct.DList*, %struct.DList** %3
%87 = call i32 @dlist_delete(%struct.DList* %86)
store i32 0, i32* %1
br label %106
88: ; preds = %78
%89 = load %struct.DList*, %struct.DList** %3
%90 = call i32 @dlist_get(%struct.DList* %89, i32 0, i32* %2)
%91 = icmp ne i32 %90, 34
br i1 %91, label %92, label %96
92: ; preds = %88
%93 = call i32 @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.10, i64 0, i64 0))
%94 = load %struct.DList*, %struct.DList** %3
%95 = call i32 @dlist_delete(%struct.DList* %94)
store i32 0, i32* %1
br label %106
96: ; preds = %88
%97 = load i32, i32* %2
%98 = icmp ne i32 %97, 0
br i1 %98, label %99, label %103
99: ; preds = %96
%100 = call i32 @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0))
%101 = load %struct.DList*, %struct.DList** %3
%102 = call i32 @dlist_delete(%struct.DList* %101)
store i32 0, i32* %1
br label %106
103: ; preds = %96
%104 = load %struct.DList*, %struct.DList** %3
%105 = call i32 @dlist_delete(%struct.DList* %104)
store i32 1, i32* %1
br label %106
106: ; preds = %103, %99, %92, %84, %74, %66, %58, %51, %43, %33, %26, %18, %8
%107 = load i32, i32* %1
ret i32 %107
}

LLVM IR (-O2):
%struct.DList = type { i32 }
@str = [45 x i8] c"Error in dlist_prepend (could not get value)\00"
@str.12 = [43 x i8] c"dlist_get should return 34 (after prepend)\00"
@str.13 = [45 x i8] c"dlist_length should return 2 (after prepend)\00"
@str.14 = [44 x i8] c"dlist_length should return 1 (after remove)\00"
@str.15 = [22 x i8] c"Error in dlist_remove\00"
@str.16 = [26 x i8] c"Error in dlist_length (2)\00"
@str.17 = [28 x i8] c"dlist_get should return 202\00"
@str.18 = [29 x i8] c"dlist_length should return 2\00"
@str.19 = [23 x i8] c"error in dlist_get (1)\00"
@str.20 = [35 x i8] c"dlist_get should return value 101E\00"
@str.21 = [25 x i8] c"dlist_length should be 1\00"
@str.22 = [43 x i8] c"dlist_length of empty dlist should be zero\00"
define i32 @test_dlist() {
%1 = alloca i32
%2 = bitcast i32* %1 to i8*
store i32 0, i32* %1
%3 = tail call %struct.DList* (...) @dlist_create()
%4 = tail call i32 @dlist_length(%struct.DList* %3)
%5 = icmp eq i32 %4, 0
br i1 %5, label %9, label %6
6: ; preds = %0
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.22, i64 0, i64 0))
%8 = tail call i32 @dlist_delete(%struct.DList* %3)
br label %80
9: ; preds = %0
%10 = tail call i32 @dlist_insert(%struct.DList* %3, i32 0, i32 101)
%11 = tail call i32 @dlist_length(%struct.DList* %3)
%12 = icmp eq i32 %11, 1
br i1 %12, label %16, label %13
13: ; preds = %9
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.21, i64 0, i64 0))
%15 = tail call i32 @dlist_delete(%struct.DList* %3)
br label %80
16: ; preds = %9
%17 = call i32 @dlist_get(%struct.DList* %3, i32 0, i32* %1)
%18 = icmp eq i32 %17, 101
br i1 %18, label %22, label %19
19: ; preds = %16
%20 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.20, i64 0, i64 0))
%21 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
22: ; preds = %16
%23 = load i32, i32* %1
%24 = icmp eq i32 %23, 0
br i1 %24, label %28, label %25
25: ; preds = %22
%26 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.19, i64 0, i64 0))
%27 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
28: ; preds = %22
%29 = call i32 @dlist_insert(%struct.DList* %3, i32 0, i32 202)
%30 = call i32 @dlist_length(%struct.DList* %3)
%31 = icmp eq i32 %30, 2
br i1 %31, label %35, label %32
32: ; preds = %28
%33 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.18, i64 0, i64 0))
%34 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
35: ; preds = %28
%36 = call i32 @dlist_get(%struct.DList* %3, i32 0, i32* %1)
%37 = icmp eq i32 %36, 202
br i1 %37, label %41, label %38
38: ; preds = %35
%39 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.17, i64 0, i64 0))
%40 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
41: ; preds = %35
%42 = load i32, i32* %1
%43 = icmp eq i32 %42, 0
br i1 %43, label %47, label %44
44: ; preds = %41
%45 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.16, i64 0, i64 0))
%46 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
47: ; preds = %41
%48 = call i64 @dlist_remove(%struct.DList* %3, i32 1)
%49 = icmp eq i64 %48, 0
br i1 %49, label %50, label %53
50: ; preds = %47
%51 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @str.15, i64 0, i64 0))
%52 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
53: ; preds = %47
%54 = call i32 @dlist_length(%struct.DList* %3)
%55 = icmp eq i32 %54, 1
br i1 %55, label %59, label %56
56: ; preds = %53
%57 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @str.14, i64 0, i64 0))
%58 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
59: ; preds = %53
%60 = call i32 @dlist_prepend(%struct.DList* %3, i32 34)
%61 = call i32 @dlist_length(%struct.DList* %3)
%62 = icmp eq i32 %61, 2
br i1 %62, label %66, label %63
63: ; preds = %59
%64 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.13, i64 0, i64 0))
%65 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
66: ; preds = %59
%67 = call i32 @dlist_get(%struct.DList* %3, i32 0, i32* %1)
%68 = icmp eq i32 %67, 34
br i1 %68, label %72, label %69
69: ; preds = %66
%70 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.12, i64 0, i64 0))
%71 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
72: ; preds = %66
%73 = load i32, i32* %1
%74 = icmp eq i32 %73, 0
br i1 %74, label %78, label %75
75: ; preds = %72
%76 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str, i64 0, i64 0))
%77 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
78: ; preds = %72
%79 = call i32 @dlist_delete(%struct.DList* %3)
br label %80
80: ; preds = %78, %75, %69, %63, %56, %50, %44, %38, %32, %25, %19, %13, %6
%81 = phi i32 [ 0, %6 ], [ 0, %13 ], [ 0, %19 ], [ 0, %25 ], [ 0, %32 ], [ 0, %38 ], [ 0, %44 ], [ 0, %50 ], [ 0, %56 ], [ 0, %63 ], [ 0, %69 ], [ 0, %75 ], [ 1, %78 ]
ret i32 %81
}