#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*/ fprintf(int /*<<< orphan*/, char *, ...);
int /*<<< orphan*/ stderr;
scalar_t__ strstr(char *, char *);
int verify(char *bmname, double rnm2) {
  double verify_value = 0.0;
  double epsilon = 1.0E-8;
  char cls = 'A';
  int verified = -1;
  if (cls != 'U') {
    if (cls == 'S') {
      if (strstr(bmname, "BH")) {
        verify_value = 30892725.0;
      } else if (strstr(bmname, "WH")) {
        verify_value = 67349758.0;
      } else if (strstr(bmname, "SH")) {
        verify_value = 58875767.0;
      } else {
        fprintf(stderr, "No such benchmark as %s.\n", bmname);
      }
      verified = 0;
    } else if (cls == 'W') {
      if (strstr(bmname, "BH")) {
        verify_value = 4102461.0;
      } else if (strstr(bmname, "WH")) {
        verify_value = 204280762.0;
      } else if (strstr(bmname, "SH")) {
        verify_value = 186944764.0;
      } else {
        fprintf(stderr, "No such benchmark as %s.\n", bmname);
      }
      verified = 0;
    } else if (cls == 'A') {
      if (strstr(bmname, "BH")) {
        verify_value = 17809491.0;
      } else if (strstr(bmname, "WH")) {
        verify_value = 1289925229.0;
      } else if (strstr(bmname, "SH")) {
        verify_value = 610856482.0;
      } else {
        fprintf(stderr, "No such benchmark as %s.\n", bmname);
      }
      verified = 0;
    } else if (cls == 'B') {
      if (strstr(bmname, "BH")) {
        verify_value = 4317114.0;
      } else if (strstr(bmname, "WH")) {
        verify_value = 7877279917.0;
      } else if (strstr(bmname, "SH")) {
        verify_value = 1836863082.0;
      } else {
        fprintf(stderr, "No such benchmark as %s.\n", bmname);
        verified = 0;
      }
    } else if (cls == 'C') {
      if (strstr(bmname, "BH")) {
        verify_value = 0.0;
      } else if (strstr(bmname, "WH")) {
        verify_value = 0.0;
      } else if (strstr(bmname, "SH")) {
        verify_value = 0.0;
      } else {
        fprintf(stderr, "No such benchmark as %s.\n", bmname);
        verified = -1;
      }
    } else if (cls == 'D') {
      if (strstr(bmname, "BH")) {
        verify_value = 0.0;
      } else if (strstr(bmname, "WH")) {
        verify_value = 0.0;
      } else if (strstr(bmname, "SH")) {
        verify_value = 0.0;
      } else {
        fprintf(stderr, "No such benchmark as %s.\n", bmname);
      }
      verified = -1;
    } else {
      fprintf(stderr, "No such class as %c.\n", cls);
    }
    fprintf(stderr, " %s L2 Norm = %f\n", bmname, rnm2);
    if (verified == -1) {
      fprintf(stderr, " No verification was performed.\n");
    } else if (rnm2 - verify_value < epsilon &&
               rnm2 - verify_value > -epsilon) {
      verified = 1;
      fprintf(stderr, " Deviation = %f\n", (rnm2 - verify_value));
    } else {
      verified = 0;
      fprintf(stderr, " The correct verification value = %f\n", verify_value);
      fprintf(stderr, " Got value = %f\n", rnm2);
    }
  } else {
    verified = -1;
  }
  return verified;
}


x86 assembly (clang, -O0):
<verify>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movb   $0x41,-0x21(%rbp)
movl   $0xffffffff,-0x28(%rbp)
movsbl -0x21(%rbp),%eax
cmp    $0x55,%eax
je     1705 <verify+0x5e5>
movsbl -0x21(%rbp),%eax
cmp    $0x53,%eax
jne    1220 <verify+0x100>
mov    -0x8(%rbp),%rdi
lea    0xef2(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1197 <verify+0x77>
movsd  0xed3(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1214 <verify+0xf4>
mov    -0x8(%rbp),%rdi
lea    0xec9(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     11c3 <verify+0xa3>
movsd  0xe9f(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    120f <verify+0xef>
mov    -0x8(%rbp),%rdi
lea    0xea0(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     11ef <verify+0xcf>
movsd  0xe6b(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    120a <verify+0xea>
mov    0x2dea(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xe6e(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
jmp    120f <verify+0xef>
jmp    1214 <verify+0xf4>
movl   $0x0,-0x28(%rbp)
jmp    1600 <verify+0x4e0>
movsbl -0x21(%rbp),%eax
cmp    $0x57,%eax
jne    12e2 <verify+0x1c2>
mov    -0x8(%rbp),%rdi
lea    0xe30(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1259 <verify+0x139>
movsd  0xdf9(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    12d6 <verify+0x1b6>
mov    -0x8(%rbp),%rdi
lea    0xe07(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1285 <verify+0x165>
movsd  0xdc5(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    12d1 <verify+0x1b1>
mov    -0x8(%rbp),%rdi
lea    0xdde(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     12b1 <verify+0x191>
movsd  0xd91(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    12cc <verify+0x1ac>
mov    0x2d28(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xdac(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
jmp    12d1 <verify+0x1b1>
jmp    12d6 <verify+0x1b6>
movl   $0x0,-0x28(%rbp)
jmp    15fb <verify+0x4db>
movsbl -0x21(%rbp),%eax
cmp    $0x41,%eax
jne    13a4 <verify+0x284>
mov    -0x8(%rbp),%rdi
lea    0xd6e(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     131b <verify+0x1fb>
movsd  0xd1f(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1398 <verify+0x278>
mov    -0x8(%rbp),%rdi
lea    0xd45(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1347 <verify+0x227>
movsd  0xceb(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1393 <verify+0x273>
mov    -0x8(%rbp),%rdi
lea    0xd1c(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1373 <verify+0x253>
movsd  0xcb7(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    138e <verify+0x26e>
mov    0x2c66(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xcea(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
jmp    1393 <verify+0x273>
jmp    1398 <verify+0x278>
movl   $0x0,-0x28(%rbp)
jmp    15f6 <verify+0x4d6>
movsbl -0x21(%rbp),%eax
cmp    $0x42,%eax
jne    1466 <verify+0x346>
mov    -0x8(%rbp),%rdi
lea    0xcac(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     13dd <verify+0x2bd>
movsd  0xc45(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1461 <verify+0x341>
mov    -0x8(%rbp),%rdi
lea    0xc83(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1409 <verify+0x2e9>
movsd  0xc11(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    145c <verify+0x33c>
mov    -0x8(%rbp),%rdi
lea    0xc5a(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1435 <verify+0x315>
movsd  0xbdd(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1457 <verify+0x337>
mov    0x2ba4(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xc28(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
movl   $0x0,-0x28(%rbp)
jmp    145c <verify+0x33c>
jmp    1461 <verify+0x341>
jmp    15f1 <verify+0x4d1>
movsbl -0x21(%rbp),%eax
cmp    $0x43,%eax
jne    1519 <verify+0x3f9>
mov    -0x8(%rbp),%rdi
lea    0xbea(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     149a <verify+0x37a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1514 <verify+0x3f4>
mov    -0x8(%rbp),%rdi
lea    0xbc6(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     14c1 <verify+0x3a1>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    150f <verify+0x3ef>
mov    -0x8(%rbp),%rdi
lea    0xba2(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     14e8 <verify+0x3c8>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    150a <verify+0x3ea>
mov    0x2af1(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xb75(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
movl   $0xffffffff,-0x28(%rbp)
jmp    150f <verify+0x3ef>
jmp    1514 <verify+0x3f4>
jmp    15ec <verify+0x4cc>
movsbl -0x21(%rbp),%eax
cmp    $0x44,%eax
jne    15cc <verify+0x4ac>
mov    -0x8(%rbp),%rdi
lea    0xb37(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     154d <verify+0x42d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    15c0 <verify+0x4a0>
mov    -0x8(%rbp),%rdi
lea    0xb13(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1574 <verify+0x454>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    15bb <verify+0x49b>
mov    -0x8(%rbp),%rdi
lea    0xaef(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     159b <verify+0x47b>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    15b6 <verify+0x496>
mov    0x2a3e(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xac2(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
jmp    15bb <verify+0x49b>
jmp    15c0 <verify+0x4a0>
movl   $0xffffffff,-0x28(%rbp)
jmp    15e7 <verify+0x4c7>
mov    0x2a0d(%rip),%rax
mov    (%rax),%edi
movsbl -0x21(%rbp),%edx
lea    0xaab(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
jmp    15ec <verify+0x4cc>
jmp    15f1 <verify+0x4d1>
jmp    15f6 <verify+0x4d6>
jmp    15fb <verify+0x4db>
jmp    1600 <verify+0x4e0>
mov    0x29d9(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
movsd  -0x10(%rbp),%xmm0
lea    0xa88(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
cmpl   $0xffffffff,-0x28(%rbp)
jne    1646 <verify+0x526>
mov    0x29af(%rip),%rax
mov    (%rax),%edi
lea    0xa79(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
jmp    1700 <verify+0x5e0>
movsd  -0x10(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    16bc <verify+0x59c>
movsd  -0x10(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jbe    16bc <verify+0x59c>
movl   $0x1,-0x28(%rbp)
mov    0x2943(%rip),%rax
mov    (%rax),%edi
movsd  -0x10(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
lea    0xa24(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
jmp    16fb <verify+0x5db>
movl   $0x0,-0x28(%rbp)
mov    0x2916(%rip),%rax
mov    (%rax),%edi
movsd  -0x18(%rbp),%xmm0
lea    0xa0d(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
mov    0x28fa(%rip),%rax
mov    (%rax),%edi
movsd  -0x10(%rbp),%xmm0
lea    0xa17(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
jmp    1700 <verify+0x5e0>
jmp    170c <verify+0x5ec>
movl   $0xffffffff,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<verify>:
push   %r14
push   %rbx
sub    $0x18,%rsp
movsd  %xmm0,0x10(%rsp)
mov    %rdi,%rbx
lea    0xef1(%rip),%rsi
call   1040 <strstr@plt>
test   %rax,%rax
je     114b <verify+0x2b>
movsd  0xeb7(%rip),%xmm0
jmp    11a4 <verify+0x84>
lea    0xed9(%rip),%rsi
mov    %rbx,%rdi
call   1040 <strstr@plt>
test   %rax,%rax
je     1169 <verify+0x49>
movsd  0xea1(%rip),%xmm0
jmp    11a4 <verify+0x84>
lea    0xebe(%rip),%rsi
mov    %rbx,%rdi
call   1040 <strstr@plt>
test   %rax,%rax
je     1187 <verify+0x67>
movsd  0xe8b(%rip),%xmm0
jmp    11a4 <verify+0x84>
mov    0x2e52(%rip),%rax
mov    (%rax),%edi
lea    0xe9a(%rip),%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1030 <fprintf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
mov    0x2e2f(%rip),%r14
mov    (%r14),%edi
lea    0xe90(%rip),%rsi
mov    %rbx,%rdx
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <fprintf@plt>
movsd  0x10(%rsp),%xmm0
movsd  0x8(%rsp),%xmm2
subsd  %xmm2,%xmm0
movsd  0xe35(%rip),%xmm1
ucomisd %xmm0,%xmm1
mov    (%r14),%edi
movapd %xmm2,%xmm1
jbe    120f <verify+0xef>
ucomisd 0xe28(%rip),%xmm0
jbe    120f <verify+0xef>
lea    0xe5c(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
mov    $0x1,%eax
jmp    123a <verify+0x11a>
lea    0xe58(%rip),%rsi
movapd %xmm1,%xmm0
mov    $0x1,%al
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xe69(%rip),%rsi
movsd  0x10(%rsp),%xmm0
mov    $0x1,%al
call   1030 <fprintf@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [3 x i8] c"BH\00"
@.str.1 = [3 x i8] c"WH\00"
@.str.2 = [3 x i8] c"SH\00"
@stderr = global i32 0
@.str.3 = [26 x i8] c"No such benchmark as %s.\0A\00"
@.str.4 = [22 x i8] c"No such class as %c.\0A\00"
@.str.5 = [18 x i8] c" %s L2 Norm = %f\0A\00"
@.str.6 = [33 x i8] c" No verification was performed.\0A\00"
@.str.7 = [17 x i8] c" Deviation = %f\0A\00"
@.str.8 = [38 x i8] c" The correct verification value = %f\0A\00"
@.str.9 = [17 x i8] c" Got value = %f\0A\00"
define i32 @verify(i8* %0, double %1) {
%3 = alloca i8*
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca i8
%8 = alloca i32
store i8* %0, i8** %3
store double %1, double* %4
store double 0.000000e+00, double* %5
store double 1.000000e-08, double* %6
store i8 65, i8* %7
store i32 -1, i32* %8
%9 = load i8, i8* %7
%10 = sext i8 %9 to i32
%11 = icmp ne i32 %10, 85
br i1 %11, label %12, label %216
12: ; preds = %2
%13 = load i8, i8* %7
%14 = sext i8 %13 to i32
%15 = icmp eq i32 %14, 83
br i1 %15, label %16, label %38
16: ; preds = %12
%17 = load i8*, i8** %3
%18 = call i64 @strstr(i8* %17, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%19 = icmp ne i64 %18, 0
br i1 %19, label %20, label %21
20: ; preds = %16
store double 0x417D762B50000000, double* %5
br label %37
21: ; preds = %16
%22 = load i8*, i8** %3
%23 = call i64 @strstr(i8* %22, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%24 = icmp ne i64 %23, 0
br i1 %24, label %25, label %26
25: ; preds = %21
store double 0x41900EB3F8000000, double* %5
br label %36
26: ; preds = %21
%27 = load i8*, i8** %3
%28 = call i64 @strstr(i8* %27, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%29 = icmp ne i64 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %26
store double 0x418C12FBB8000000, double* %5
br label %35
31: ; preds = %26
%32 = load i32, i32* @stderr
%33 = load i8*, i8** %3
%34 = call i32 (i32, i8*, ...) @fprintf(i32 %32, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %33)
br label %35
35: ; preds = %31, %30
br label %36
36: ; preds = %35, %25
br label %37
37: ; preds = %36, %20
store i32 0, i32* %8
br label %178
38: ; preds = %12
%39 = load i8, i8* %7
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, 87
br i1 %41, label %42, label %64
42: ; preds = %38
%43 = load i8*, i8** %3
%44 = call i64 @strstr(i8* %43, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%45 = icmp ne i64 %44, 0
br i1 %45, label %46, label %47
46: ; preds = %42
store double 0x414F4C9E80000000, double* %5
br label %63
47: ; preds = %42
%48 = load i8*, i8** %3
%49 = call i64 @strstr(i8* %48, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%50 = icmp ne i64 %49, 0
br i1 %50, label %51, label %52
51: ; preds = %47
store double 0x41A85A2774000000, double* %5
br label %62
52: ; preds = %47
%53 = load i8*, i8** %3
%54 = call i64 @strstr(i8* %53, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%55 = icmp ne i64 %54, 0
br i1 %55, label %56, label %57
56: ; preds = %52
store double 0x41A64919F8000000, double* %5
br label %61
57: ; preds = %52
%58 = load i32, i32* @stderr
%59 = load i8*, i8** %3
%60 = call i32 (i32, i8*, ...) @fprintf(i32 %58, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %59)
br label %61
61: ; preds = %57, %56
br label %62
62: ; preds = %61, %51
br label %63
63: ; preds = %62, %46
store i32 0, i32* %8
br label %177
64: ; preds = %38
%65 = load i8, i8* %7
%66 = sext i8 %65 to i32
%67 = icmp eq i32 %66, 65
br i1 %67, label %68, label %90
68: ; preds = %64
%69 = load i8*, i8** %3
%70 = call i64 @strstr(i8* %69, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%71 = icmp ne i64 %70, 0
br i1 %71, label %72, label %73
72: ; preds = %68
store double 0x4170FC0530000000, double* %5
br label %89
73: ; preds = %68
%74 = load i8*, i8** %3
%75 = call i64 @strstr(i8* %74, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%76 = icmp ne i64 %75, 0
br i1 %76, label %77, label %78
77: ; preds = %73
store double 0x41D338AC9B400000, double* %5
br label %88
78: ; preds = %73
%79 = load i8*, i8** %3
%80 = call i64 @strstr(i8* %79, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%81 = icmp ne i64 %80, 0
br i1 %81, label %82, label %83
82: ; preds = %78
store double 0x41C2347711000000, double* %5
br label %87
83: ; preds = %78
%84 = load i32, i32* @stderr
%85 = load i8*, i8** %3
%86 = call i32 (i32, i8*, ...) @fprintf(i32 %84, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %85)
br label %87
87: ; preds = %83, %82
br label %88
88: ; preds = %87, %77
br label %89
89: ; preds = %88, %72
store i32 0, i32* %8
br label %176
90: ; preds = %64
%91 = load i8, i8* %7
%92 = sext i8 %91 to i32
%93 = icmp eq i32 %92, 66
br i1 %93, label %94, label %116
94: ; preds = %90
%95 = load i8*, i8** %3
%96 = call i64 @strstr(i8* %95, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%97 = icmp ne i64 %96, 0
br i1 %97, label %98, label %99
98: ; preds = %94
store double 0x415077EE80000000, double* %5
br label %115
99: ; preds = %94
%100 = load i8*, i8** %3
%101 = call i64 @strstr(i8* %100, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%102 = icmp ne i64 %101, 0
br i1 %102, label %103, label %104
103: ; preds = %99
store double 0x41FD585C0AD00000, double* %5
br label %114
104: ; preds = %99
%105 = load i8*, i8** %3
%106 = call i64 @strstr(i8* %105, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%107 = icmp ne i64 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %104
store double 0x41DB5F139A800000, double* %5
br label %113
109: ; preds = %104
%110 = load i32, i32* @stderr
%111 = load i8*, i8** %3
%112 = call i32 (i32, i8*, ...) @fprintf(i32 %110, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %111)
store i32 0, i32* %8
br label %113
113: ; preds = %109, %108
br label %114
114: ; preds = %113, %103
br label %115
115: ; preds = %114, %98
br label %175
116: ; preds = %90
%117 = load i8, i8* %7
%118 = sext i8 %117 to i32
%119 = icmp eq i32 %118, 67
br i1 %119, label %120, label %142
120: ; preds = %116
%121 = load i8*, i8** %3
%122 = call i64 @strstr(i8* %121, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%123 = icmp ne i64 %122, 0
br i1 %123, label %124, label %125
124: ; preds = %120
store double 0.000000e+00, double* %5
br label %141
125: ; preds = %120
%126 = load i8*, i8** %3
%127 = call i64 @strstr(i8* %126, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%128 = icmp ne i64 %127, 0
br i1 %128, label %129, label %130
129: ; preds = %125
store double 0.000000e+00, double* %5
br label %140
130: ; preds = %125
%131 = load i8*, i8** %3
%132 = call i64 @strstr(i8* %131, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%133 = icmp ne i64 %132, 0
br i1 %133, label %134, label %135
134: ; preds = %130
store double 0.000000e+00, double* %5
br label %139
135: ; preds = %130
%136 = load i32, i32* @stderr
%137 = load i8*, i8** %3
%138 = call i32 (i32, i8*, ...) @fprintf(i32 %136, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %137)
store i32 -1, i32* %8
br label %139
139: ; preds = %135, %134
br label %140
140: ; preds = %139, %129
br label %141
141: ; preds = %140, %124
br label %174
142: ; preds = %116
%143 = load i8, i8* %7
%144 = sext i8 %143 to i32
%145 = icmp eq i32 %144, 68
br i1 %145, label %146, label %168
146: ; preds = %142
%147 = load i8*, i8** %3
%148 = call i64 @strstr(i8* %147, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%149 = icmp ne i64 %148, 0
br i1 %149, label %150, label %151
150: ; preds = %146
store double 0.000000e+00, double* %5
br label %167
151: ; preds = %146
%152 = load i8*, i8** %3
%153 = call i64 @strstr(i8* %152, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%154 = icmp ne i64 %153, 0
br i1 %154, label %155, label %156
155: ; preds = %151
store double 0.000000e+00, double* %5
br label %166
156: ; preds = %151
%157 = load i8*, i8** %3
%158 = call i64 @strstr(i8* %157, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%159 = icmp ne i64 %158, 0
br i1 %159, label %160, label %161
160: ; preds = %156
store double 0.000000e+00, double* %5
br label %165
161: ; preds = %156
%162 = load i32, i32* @stderr
%163 = load i8*, i8** %3
%164 = call i32 (i32, i8*, ...) @fprintf(i32 %162, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %163)
br label %165
165: ; preds = %161, %160
br label %166
166: ; preds = %165, %155
br label %167
167: ; preds = %166, %150
store i32 -1, i32* %8
br label %173
168: ; preds = %142
%169 = load i32, i32* @stderr
%170 = load i8, i8* %7
%171 = sext i8 %170 to i32
%172 = call i32 (i32, i8*, ...) @fprintf(i32 %169, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.4, i64 0, i64 0), i32 %171)
br label %173
173: ; preds = %168, %167
br label %174
174: ; preds = %173, %141
br label %175
175: ; preds = %174, %115
br label %176
176: ; preds = %175, %89
br label %177
177: ; preds = %176, %63
br label %178
178: ; preds = %177, %37
%179 = load i32, i32* @stderr
%180 = load i8*, i8** %3
%181 = load double, double* %4
%182 = call i32 (i32, i8*, ...) @fprintf(i32 %179, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.5, i64 0, i64 0), i8* %180, double %181)
%183 = load i32, i32* %8
%184 = icmp eq i32 %183, -1
br i1 %184, label %185, label %188
185: ; preds = %178
%186 = load i32, i32* @stderr
%187 = call i32 (i32, i8*, ...) @fprintf(i32 %186, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.6, i64 0, i64 0))
br label %215
188: ; preds = %178
%189 = load double, double* %4
%190 = load double, double* %5
%191 = fsub double %189, %190
%192 = load double, double* %6
%193 = fcmp olt double %191, %192
br i1 %193, label %194, label %207
194: ; preds = %188
%195 = load double, double* %4
%196 = load double, double* %5
%197 = fsub double %195, %196
%198 = load double, double* %6
%199 = fneg double %198
%200 = fcmp ogt double %197, %199
br i1 %200, label %201, label %207
201: ; preds = %194
store i32 1, i32* %8
%202 = load i32, i32* @stderr
%203 = load double, double* %4
%204 = load double, double* %5
%205 = fsub double %203, %204
%206 = call i32 (i32, i8*, ...) @fprintf(i32 %202, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.7, i64 0, i64 0), double %205)
br label %214
207: ; preds = %194, %188
store i32 0, i32* %8
%208 = load i32, i32* @stderr
%209 = load double, double* %5
%210 = call i32 (i32, i8*, ...) @fprintf(i32 %208, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0), double %209)
%211 = load i32, i32* @stderr
%212 = load double, double* %4
%213 = call i32 (i32, i8*, ...) @fprintf(i32 %211, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.9, i64 0, i64 0), double %212)
br label %214
214: ; preds = %207, %201
br label %215
215: ; preds = %214, %185
br label %217
216: ; preds = %2
store i32 -1, i32* %8
br label %217
217: ; preds = %216, %215
%218 = load i32, i32* %8
ret i32 %218
}

LLVM IR (-O2):
@.str = [3 x i8] c"BH\00"
@.str.1 = [3 x i8] c"WH\00"
@.str.2 = [3 x i8] c"SH\00"
@stderr = global i32 0
@.str.3 = [26 x i8] c"No such benchmark as %s.\0A\00"
@.str.5 = [18 x i8] c" %s L2 Norm = %f\0A\00"
@.str.7 = [17 x i8] c" Deviation = %f\0A\00"
@.str.8 = [38 x i8] c" The correct verification value = %f\0A\00"
@.str.9 = [17 x i8] c" Got value = %f\0A\00"
define i32 @verify(i8* %0, double %1) {
%3 = tail call i64 @strstr(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0))
%4 = icmp eq i64 %3, 0
br i1 %4, label %5, label %14
5: ; preds = %2
%6 = tail call i64 @strstr(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%7 = icmp eq i64 %6, 0
br i1 %7, label %8, label %14
8: ; preds = %5
%9 = tail call i64 @strstr(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%10 = icmp eq i64 %9, 0
br i1 %10, label %11, label %14
11: ; preds = %8
%12 = load i32, i32* @stderr
%13 = tail call i32 (i32, i8*, ...) @fprintf(i32 %12, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.3, i64 0, i64 0), i8* %0)
br label %14
14: ; preds = %11, %2, %5, %8
%15 = phi double [ 0.000000e+00, %11 ], [ 0x4170FC0530000000, %2 ], [ 0x41D338AC9B400000, %5 ], [ 0x41C2347711000000, %8 ]
%16 = load i32, i32* @stderr
%17 = tail call i32 (i32, i8*, ...) @fprintf(i32 %16, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.5, i64 0, i64 0), i8* %0, double %1)
%18 = fsub double %1, %15
%19 = fcmp olt double %18, 1.000000e-08
%20 = fcmp ogt double %18, -1.000000e-08
%21 = and i1 %19, %20
%22 = load i32, i32* @stderr
br i1 %21, label %23, label %25
23: ; preds = %14
%24 = tail call i32 (i32, i8*, ...) @fprintf(i32 %22, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.7, i64 0, i64 0), double %18)
br label %29
25: ; preds = %14
%26 = tail call i32 (i32, i8*, ...) @fprintf(i32 %22, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0), double %15)
%27 = load i32, i32* @stderr
%28 = tail call i32 (i32, i8*, ...) @fprintf(i32 %27, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.9, i64 0, i64 0), double %1)
br label %29
29: ; preds = %25, %23
%30 = phi i32 [ 1, %23 ], [ 0, %25 ]
ret i32 %30
}