#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*/ test_case(int *, int);
int main(int argc, char *argv[]) {
  (void)argc;
  (void)argv;
  int array[] = {
      0, 4,  72, 0,  4,   0,       4,  5,  6,  7,   6,  45,  3, 6,  6,
      5, 6,  0,  10, 100, 6,       45, 3,  6,  8,   5,  6,   0, 10, 100,
      6, 45, 3,  8,  6,   5,       9,  0,  10, 100, 6,  45,  3, 8,  8,
      5, 6,  0,  10, 100, 6,       45, 7,  8,  6,   5,  6,   0, 10, 100,
      6, 45, 3,  6,  6,   5,       9,  0,  10, 100, 6,  45,  7, 6,  8,
      9, 6,  0,  10, 100, 6,       45, 3,  6,  6,   5,  6,   0, 10, 100,
      6, 45, 3,  6,  6,   5,       9,  0,  10, 100, 6,  45,  7, 9,  8,
      9, 6,  0,  10, 100, 6,       45, 3,  6,  6,   5,  6,   0, 10, 100,
      6, 45, 3,  6,  6,   5,       9,  0,  10, 100, 6,  45,  3, 6,  6,
      5, 6,  0,  10, 100, 1000000, 19, 15, 23, 543, 64, 646, 4, 5,  10};
  test_case(array, 140);
  int array1[] = {1, 0};
  int array2[] = {4, 5, 6, 7};
  int array4[] = {5, 4, 4};
  int array5[] = {4, 4, 5};
  test_case(array, 21);
  test_case(array1, 2);
  test_case(array2, 4);
  test_case(array4, 3);
  test_case(array5, 3);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2b0,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x270(%rbp),%rdi
lea    0xeb9(%rip),%rsi
mov    $0x258,%edx
call   1030 <memcpy@plt>
lea    -0x270(%rbp),%rdi
mov    $0x8c,%esi
call   1040 <test_case@plt>
mov    0x1107(%rip),%rax
mov    %rax,-0x278(%rbp)
mov    0x1109(%rip),%rax
mov    %rax,-0x290(%rbp)
mov    0x1103(%rip),%rax
mov    %rax,-0x288(%rbp)
mov    0x10c5(%rip),%rax
mov    %rax,-0x29c(%rbp)
mov    0x10c0(%rip),%eax
mov    %eax,-0x294(%rbp)
mov    0x10b7(%rip),%rax
mov    %rax,-0x2a8(%rbp)
mov    0x10b2(%rip),%eax
mov    %eax,-0x2a0(%rbp)
lea    -0x270(%rbp),%rdi
mov    $0x15,%esi
call   1040 <test_case@plt>
lea    -0x278(%rbp),%rdi
mov    $0x2,%esi
call   1040 <test_case@plt>
lea    -0x290(%rbp),%rdi
mov    $0x4,%esi
call   1040 <test_case@plt>
lea    -0x29c(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test_case@plt>
lea    -0x2a8(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test_case@plt>
xor    %eax,%eax
add    $0x2b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x2a0,%rsp
lea    0xed1(%rip),%rsi
lea    0x40(%rsp),%rbx
mov    $0x258,%edx
mov    %rbx,%rdi
call   1030 <memcpy@plt>
mov    %rbx,%rdi
mov    $0x8c,%esi
call   1040 <test_case@plt>
movq   $0x1,0x28(%rsp)
movaps 0x1112(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
mov    0x10f7(%rip),%eax
mov    %eax,0x20(%rsp)
mov    0x10e4(%rip),%rax
mov    %rax,0x18(%rsp)
mov    0x10ed(%rip),%eax
mov    %eax,0x10(%rsp)
mov    0x10da(%rip),%rax
mov    %rax,0x8(%rsp)
mov    %rbx,%rdi
mov    $0x15,%esi
call   1040 <test_case@plt>
lea    0x28(%rsp),%rdi
mov    $0x2,%esi
call   1040 <test_case@plt>
lea    0x30(%rsp),%rdi
mov    $0x4,%esi
call   1040 <test_case@plt>
lea    0x18(%rsp),%rdi
mov    $0x3,%esi
call   1040 <test_case@plt>
lea    0x8(%rsp),%rdi
mov    $0x3,%esi
call   1040 <test_case@plt>
xor    %eax,%eax
add    $0x2a0,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.main.array = [150 x i32] [i32 0, i32 4, i32 72, i32 0, i32 4, i32 0, i32 4, i32 5, i32 6, i32 7, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 8, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 8, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 8, i32 8, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 7, i32 8, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 7, i32 6, i32 8, i32 9, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 7, i32 9, i32 8, i32 9, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 1000000, i32 19, i32 15, i32 23, i32 543, i32 64, i32 646, i32 4, i32 5, i32 10]
@__const.main.array1 = [2 x i32] [i32 1, i32 0]
@__const.main.array2 = [4 x i32] [i32 4, i32 5, i32 6, i32 7]
@__const.main.array4 = [3 x i32] [i32 5, i32 4, i32 4]
@__const.main.array5 = [3 x i32] [i32 4, i32 4, i32 5]
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca [150 x i32]
%7 = alloca [2 x i32]
%8 = alloca [4 x i32]
%9 = alloca [3 x i32]
%10 = alloca [3 x i32]
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%11 = load i32, i32* %4
%12 = load i8**, i8*** %5
%13 = bitcast [150 x i32]* %6 to i8*
%14 = getelementptr inbounds [150 x i32], [150 x i32]* %6, i64 0, i64 0
%15 = call i32 @test_case(i32* %14, i32 140)
%16 = bitcast [2 x i32]* %7 to i8*
%17 = bitcast [4 x i32]* %8 to i8*
%18 = bitcast [3 x i32]* %9 to i8*
%19 = bitcast [3 x i32]* %10 to i8*
%20 = getelementptr inbounds [150 x i32], [150 x i32]* %6, i64 0, i64 0
%21 = call i32 @test_case(i32* %20, i32 21)
%22 = getelementptr inbounds [2 x i32], [2 x i32]* %7, i64 0, i64 0
%23 = call i32 @test_case(i32* %22, i32 2)
%24 = getelementptr inbounds [4 x i32], [4 x i32]* %8, i64 0, i64 0
%25 = call i32 @test_case(i32* %24, i32 4)
%26 = getelementptr inbounds [3 x i32], [3 x i32]* %9, i64 0, i64 0
%27 = call i32 @test_case(i32* %26, i32 3)
%28 = getelementptr inbounds [3 x i32], [3 x i32]* %10, i64 0, i64 0
%29 = call i32 @test_case(i32* %28, i32 3)
ret i32 0
}

LLVM IR (-O2):
@__const.main.array = [150 x i32] [i32 0, i32 4, i32 72, i32 0, i32 4, i32 0, i32 4, i32 5, i32 6, i32 7, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 8, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 8, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 8, i32 8, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 7, i32 8, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 7, i32 6, i32 8, i32 9, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 7, i32 9, i32 8, i32 9, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 9, i32 0, i32 10, i32 100, i32 6, i32 45, i32 3, i32 6, i32 6, i32 5, i32 6, i32 0, i32 10, i32 100, i32 1000000, i32 19, i32 15, i32 23, i32 543, i32 64, i32 646, i32 4, i32 5, i32 10]
@__const.main.array2 = [4 x i32] [i32 4, i32 5, i32 6, i32 7]
@__const.main.array4 = [3 x i32] [i32 5, i32 4, i32 4]
@__const.main.array5 = [3 x i32] [i32 4, i32 4, i32 5]
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca [150 x i32]
%4 = alloca i64
%5 = alloca [4 x i32]
%6 = alloca [3 x i32]
%7 = alloca [3 x i32]
%8 = bitcast [150 x i32]* %3 to i8*
%9 = getelementptr inbounds [150 x i32], [150 x i32]* %3, i64 0, i64 0
%10 = call i32 @test_case(i32* %9, i32 140)
%11 = bitcast i64* %4 to i8*
store i64 1, i64* %4
%12 = bitcast [4 x i32]* %5 to i8*
%13 = bitcast [3 x i32]* %6 to i8*
%14 = bitcast [3 x i32]* %7 to i8*
%15 = call i32 @test_case(i32* %9, i32 21)
%16 = bitcast i64* %4 to i32*
%17 = call i32 @test_case(i32* %16, i32 2)
%18 = getelementptr inbounds [4 x i32], [4 x i32]* %5, i64 0, i64 0
%19 = call i32 @test_case(i32* %18, i32 4)
%20 = getelementptr inbounds [3 x i32], [3 x i32]* %6, i64 0, i64 0
%21 = call i32 @test_case(i32* %20, i32 3)
%22 = getelementptr inbounds [3 x i32], [3 x i32]* %7, i64 0, i64 0
%23 = call i32 @test_case(i32* %22, i32 3)
ret i32 0
}