#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 */
short instr_q168add(short, short);
int /*<<< orphan*/ printf(char *, ...);
short prog_q168add(short, short);
int rand();
int Q16_8_ADD_AUTOTEST() {
  printf("LAUNCHING THE (Q16_8_SUB) RESOURCE AUTOTEST...\n");
  int i, j;
  for (j = 0; j < 10; j++) {
    short op1 = (rand() % 65536) - 32768;
    short op2 = (rand() % 65536) - 32768;
    short op3 = instr_q168add(op1, op2);
    short op4 = prog_q168add(op1, op2);
    if (op3 != op4) {
      printf("- TEST OF THE (Q16_8_ADD) RESOURCE => FAILED !\n");
      printf("  + %d COMPUTATION(s) BEFORE ERROR...\n", j);
      printf("  + OPERANDE 1 [%d]\n", op1);
      printf("  + OPERANDE 2 [%d]\n", op2);
      printf("  + ASM INSTR. [%d]\n", op3);
      printf("  + REF C CODE [%d]\n", op4);
      return 0;
    }
  }
  printf("- TEST OF THE (Q16_8_ADD) RESOURCE => OK\n");
  return 1;
}


x86 assembly (clang, -O0):
<Q16_8_ADD_AUTOTEST>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
lea    0xeb1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0xc(%rbp)
cmpl   $0xa,-0xc(%rbp)
jge    125d <Q16_8_ADD_AUTOTEST+0x11d>
mov    $0x0,%al
call   1060 <rand@plt>
mov    $0x10000,%ecx
cltd
idiv   %ecx
sub    $0x8000,%edx
mov    %dx,%ax
mov    %ax,-0xe(%rbp)
mov    $0x0,%al
call   1060 <rand@plt>
mov    $0x10000,%ecx
cltd
idiv   %ecx
sub    $0x8000,%edx
mov    %dx,%ax
mov    %ax,-0x10(%rbp)
mov    -0xe(%rbp),%ax
movswl %ax,%edi
movswl -0x10(%rbp),%esi
call   1050 <instr_q168add@plt>
mov    %ax,-0x12(%rbp)
mov    -0xe(%rbp),%ax
movswl %ax,%edi
movswl -0x10(%rbp),%esi
call   1040 <prog_q168add@plt>
mov    %ax,-0x14(%rbp)
movswl -0x12(%rbp),%eax
movswl -0x14(%rbp),%ecx
cmp    %ecx,%eax
je     124a <Q16_8_ADD_AUTOTEST+0x10a>
lea    0xe52(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%esi
lea    0xe71(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movswl -0xe(%rbp),%esi
lea    0xe86(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movswl -0x10(%rbp),%esi
lea    0xe89(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movswl -0x12(%rbp),%esi
lea    0xe8c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movswl -0x14(%rbp),%esi
lea    0xe8f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
jmp    1272 <Q16_8_ADD_AUTOTEST+0x132>
jmp    124f <Q16_8_ADD_AUTOTEST+0x10f>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    115d <Q16_8_ADD_AUTOTEST+0x1d>
lea    0xe77(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Q16_8_ADD_AUTOTEST>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
lea    0xf19(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1453 <Q16_8_ADD_AUTOTEST+0x303>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1458 <Q16_8_ADD_AUTOTEST+0x308>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1460 <Q16_8_ADD_AUTOTEST+0x310>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1468 <Q16_8_ADD_AUTOTEST+0x318>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1470 <Q16_8_ADD_AUTOTEST+0x320>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1478 <Q16_8_ADD_AUTOTEST+0x328>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1480 <Q16_8_ADD_AUTOTEST+0x330>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1488 <Q16_8_ADD_AUTOTEST+0x338>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1490 <Q16_8_ADD_AUTOTEST+0x340>
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r15d
xor    $0xffff8000,%r15d
xor    %eax,%eax
call   1070 <rand@plt>
mov    %eax,%r14d
xor    $0xffff8000,%r14d
movswl %r15w,%ebx
movswl %r14w,%ebp
mov    %ebx,%edi
mov    %ebp,%esi
call   1060 <instr_q168add@plt>
mov    %eax,%r13d
mov    %ebx,%edi
mov    %ebp,%esi
call   1050 <prog_q168add@plt>
cmp    %ax,%r13w
jne    1498 <Q16_8_ADD_AUTOTEST+0x348>
lea    0xc66(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%eax
jmp    1508 <Q16_8_ADD_AUTOTEST+0x3b8>
xor    %r12d,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x1,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x2,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x3,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x4,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x5,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x6,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x7,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x8,%r12d
jmp    149e <Q16_8_ADD_AUTOTEST+0x34e>
mov    $0x9,%r12d
movswl %ax,%ebp
movswl %r13w,%ebx
lea    0xc27(%rip),%rdi
call   1030 <puts@plt>
lea    0xb48(%rip),%rdi
mov    %r12d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
movswl %r15w,%esi
lea    0xb5a(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movswl %r14w,%esi
lea    0xb5d(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xb64(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xb69(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [48 x i8] c"LAUNCHING THE (Q16_8_SUB) RESOURCE AUTOTEST...\0A\00"
@.str.1 = [48 x i8] c"- TEST OF THE (Q16_8_ADD) RESOURCE => FAILED !\0A\00"
@.str.2 = [39 x i8] c" + %d COMPUTATION(s) BEFORE ERROR...\0A\00"
@.str.3 = [21 x i8] c" + OPERANDE 1 [%d]\0A\00"
@.str.4 = [21 x i8] c" + OPERANDE 2 [%d]\0A\00"
@.str.5 = [21 x i8] c" + ASM INSTR. [%d]\0A\00"
@.str.6 = [21 x i8] c" + REF C CODE [%d]\0A\00"
@.str.7 = [42 x i8] c"- TEST OF THE (Q16_8_ADD) RESOURCE => OK\0A\00"
define i32 @Q16_8_ADD_AUTOTEST() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i16
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %3
br label %9
9: ; preds = %49, %0
%10 = load i32, i32* %3
%11 = icmp slt i32 %10, 10
br i1 %11, label %12, label %52
12: ; preds = %9
%13 = call i32 (...) @rand()
%14 = srem i32 %13, 65536
%15 = sub nsw i32 %14, 32768
%16 = trunc i32 %15 to i16
store i16 %16, i16* %4
%17 = call i32 (...) @rand()
%18 = srem i32 %17, 65536
%19 = sub nsw i32 %18, 32768
%20 = trunc i32 %19 to i16
store i16 %20, i16* %5
%21 = load i16, i16* %4
%22 = load i16, i16* %5
%23 = call signext i16 @instr_q168add(i16 signext %21, i16 signext %22)
store i16 %23, i16* %6
%24 = load i16, i16* %4
%25 = load i16, i16* %5
%26 = call signext i16 @prog_q168add(i16 signext %24, i16 signext %25)
store i16 %26, i16* %7
%27 = load i16, i16* %6
%28 = sext i16 %27 to i32
%29 = load i16, i16* %7
%30 = sext i16 %29 to i32
%31 = icmp ne i32 %28, %30
br i1 %31, label %32, label %48
32: ; preds = %12
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.1, i64 0, i64 0))
%34 = load i32, i32* %3
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.2, i64 0, i64 0), i32 %34)
%36 = load i16, i16* %4
%37 = sext i16 %36 to i32
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0), i32 %37)
%39 = load i16, i16* %5
%40 = sext i16 %39 to i32
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.4, i64 0, i64 0), i32 %40)
%42 = load i16, i16* %6
%43 = sext i16 %42 to i32
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0), i32 %43)
%45 = load i16, i16* %7
%46 = sext i16 %45 to i32
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0), i32 %46)
store i32 0, i32* %1
br label %54
48: ; preds = %12
br label %49
49: ; preds = %48
%50 = load i32, i32* %3
%51 = add nsw i32 %50, 1
store i32 %51, i32* %3
br label %9
52: ; preds = %9
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.7, i64 0, i64 0))
store i32 1, i32* %1
br label %54
54: ; preds = %52, %32
%55 = load i32, i32* %1
ret i32 %55
}

LLVM IR (-O2):
@.str.2 = [39 x i8] c" + %d COMPUTATION(s) BEFORE ERROR...\0A\00"
@.str.3 = [21 x i8] c" + OPERANDE 1 [%d]\0A\00"
@.str.4 = [21 x i8] c" + OPERANDE 2 [%d]\0A\00"
@.str.5 = [21 x i8] c" + ASM INSTR. [%d]\0A\00"
@.str.6 = [21 x i8] c" + REF C CODE [%d]\0A\00"
@str = [47 x i8] c"LAUNCHING THE (Q16_8_SUB) RESOURCE AUTOTEST...\00"
@str.8 = [41 x i8] c"- TEST OF THE (Q16_8_ADD) RESOURCE => OK\00"
@str.9 = [47 x i8] c"- TEST OF THE (Q16_8_ADD) RESOURCE => FAILED !\00"
define i32 @Q16_8_ADD_AUTOTEST() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 (...) @rand()
%3 = trunc i32 %2 to i16
%4 = xor i16 %3, -32768
%5 = tail call i32 (...) @rand()
%6 = trunc i32 %5 to i16
%7 = xor i16 %6, -32768
%8 = tail call signext i16 @instr_q168add(i16 signext %4, i16 signext %7)
%9 = tail call signext i16 @prog_q168add(i16 signext %4, i16 signext %7)
%10 = icmp eq i16 %8, %9
br i1 %10, label %27, label %11
11: ; preds = %107, %97, %87, %77, %67, %57, %47, %37, %27, %0
%12 = phi i32 [ 0, %0 ], [ 1, %27 ], [ 2, %37 ], [ 3, %47 ], [ 4, %57 ], [ 5, %67 ], [ 6, %77 ], [ 7, %87 ], [ 8, %97 ], [ 9, %107 ]
%13 = phi i16 [ %4, %0 ], [ %30, %27 ], [ %40, %37 ], [ %50, %47 ], [ %60, %57 ], [ %70, %67 ], [ %80, %77 ], [ %90, %87 ], [ %100, %97 ], [ %110, %107 ]
%14 = phi i16 [ %7, %0 ], [ %33, %27 ], [ %43, %37 ], [ %53, %47 ], [ %63, %57 ], [ %73, %67 ], [ %83, %77 ], [ %93, %87 ], [ %103, %97 ], [ %113, %107 ]
%15 = phi i16 [ %8, %0 ], [ %34, %27 ], [ %44, %37 ], [ %54, %47 ], [ %64, %57 ], [ %74, %67 ], [ %84, %77 ], [ %94, %87 ], [ %104, %97 ], [ %114, %107 ]
%16 = phi i16 [ %9, %0 ], [ %35, %27 ], [ %45, %37 ], [ %55, %47 ], [ %65, %57 ], [ %75, %67 ], [ %85, %77 ], [ %95, %87 ], [ %105, %97 ], [ %115, %107 ]
%17 = sext i16 %16 to i32
%18 = sext i16 %15 to i32
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str.9, i64 0, i64 0))
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.2, i64 0, i64 0), i32 %12)
%21 = sext i16 %13 to i32
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0), i32 %21)
%23 = sext i16 %14 to i32
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.4, i64 0, i64 0), i32 %23)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0), i32 %18)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0), i32 %17)
br label %119
27: ; preds = %0
%28 = tail call i32 (...) @rand()
%29 = trunc i32 %28 to i16
%30 = xor i16 %29, -32768
%31 = tail call i32 (...) @rand()
%32 = trunc i32 %31 to i16
%33 = xor i16 %32, -32768
%34 = tail call signext i16 @instr_q168add(i16 signext %30, i16 signext %33)
%35 = tail call signext i16 @prog_q168add(i16 signext %30, i16 signext %33)
%36 = icmp eq i16 %34, %35
br i1 %36, label %37, label %11
37: ; preds = %27
%38 = tail call i32 (...) @rand()
%39 = trunc i32 %38 to i16
%40 = xor i16 %39, -32768
%41 = tail call i32 (...) @rand()
%42 = trunc i32 %41 to i16
%43 = xor i16 %42, -32768
%44 = tail call signext i16 @instr_q168add(i16 signext %40, i16 signext %43)
%45 = tail call signext i16 @prog_q168add(i16 signext %40, i16 signext %43)
%46 = icmp eq i16 %44, %45
br i1 %46, label %47, label %11
47: ; preds = %37
%48 = tail call i32 (...) @rand()
%49 = trunc i32 %48 to i16
%50 = xor i16 %49, -32768
%51 = tail call i32 (...) @rand()
%52 = trunc i32 %51 to i16
%53 = xor i16 %52, -32768
%54 = tail call signext i16 @instr_q168add(i16 signext %50, i16 signext %53)
%55 = tail call signext i16 @prog_q168add(i16 signext %50, i16 signext %53)
%56 = icmp eq i16 %54, %55
br i1 %56, label %57, label %11
57: ; preds = %47
%58 = tail call i32 (...) @rand()
%59 = trunc i32 %58 to i16
%60 = xor i16 %59, -32768
%61 = tail call i32 (...) @rand()
%62 = trunc i32 %61 to i16
%63 = xor i16 %62, -32768
%64 = tail call signext i16 @instr_q168add(i16 signext %60, i16 signext %63)
%65 = tail call signext i16 @prog_q168add(i16 signext %60, i16 signext %63)
%66 = icmp eq i16 %64, %65
br i1 %66, label %67, label %11
67: ; preds = %57
%68 = tail call i32 (...) @rand()
%69 = trunc i32 %68 to i16
%70 = xor i16 %69, -32768
%71 = tail call i32 (...) @rand()
%72 = trunc i32 %71 to i16
%73 = xor i16 %72, -32768
%74 = tail call signext i16 @instr_q168add(i16 signext %70, i16 signext %73)
%75 = tail call signext i16 @prog_q168add(i16 signext %70, i16 signext %73)
%76 = icmp eq i16 %74, %75
br i1 %76, label %77, label %11
77: ; preds = %67
%78 = tail call i32 (...) @rand()
%79 = trunc i32 %78 to i16
%80 = xor i16 %79, -32768
%81 = tail call i32 (...) @rand()
%82 = trunc i32 %81 to i16
%83 = xor i16 %82, -32768
%84 = tail call signext i16 @instr_q168add(i16 signext %80, i16 signext %83)
%85 = tail call signext i16 @prog_q168add(i16 signext %80, i16 signext %83)
%86 = icmp eq i16 %84, %85
br i1 %86, label %87, label %11
87: ; preds = %77
%88 = tail call i32 (...) @rand()
%89 = trunc i32 %88 to i16
%90 = xor i16 %89, -32768
%91 = tail call i32 (...) @rand()
%92 = trunc i32 %91 to i16
%93 = xor i16 %92, -32768
%94 = tail call signext i16 @instr_q168add(i16 signext %90, i16 signext %93)
%95 = tail call signext i16 @prog_q168add(i16 signext %90, i16 signext %93)
%96 = icmp eq i16 %94, %95
br i1 %96, label %97, label %11
97: ; preds = %87
%98 = tail call i32 (...) @rand()
%99 = trunc i32 %98 to i16
%100 = xor i16 %99, -32768
%101 = tail call i32 (...) @rand()
%102 = trunc i32 %101 to i16
%103 = xor i16 %102, -32768
%104 = tail call signext i16 @instr_q168add(i16 signext %100, i16 signext %103)
%105 = tail call signext i16 @prog_q168add(i16 signext %100, i16 signext %103)
%106 = icmp eq i16 %104, %105
br i1 %106, label %107, label %11
107: ; preds = %97
%108 = tail call i32 (...) @rand()
%109 = trunc i32 %108 to i16
%110 = xor i16 %109, -32768
%111 = tail call i32 (...) @rand()
%112 = trunc i32 %111 to i16
%113 = xor i16 %112, -32768
%114 = tail call signext i16 @instr_q168add(i16 signext %110, i16 signext %113)
%115 = tail call signext i16 @prog_q168add(i16 signext %110, i16 signext %113)
%116 = icmp eq i16 %114, %115
br i1 %116, label %117, label %11
117: ; preds = %107
%118 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.8, i64 0, i64 0))
br label %119
119: ; preds = %11, %117
%120 = phi i32 [ 0, %11 ], [ 1, %117 ]
ret i32 %120
}