#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*/ bar(unsigned int *);
void fn1(void) {
  unsigned int a[128];
  int i;
  for (i = 0; i < 128; ++i)
    a[i] = i * 0x02000001;
  bar(a);
}


x86 assembly (clang, -O0):
<fn1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x210,%rsp
movl   $0x0,-0x204(%rbp)
cmpl   $0x80,-0x204(%rbp)
jge    1161 <fn1+0x51>
imul   $0x2000001,-0x204(%rbp),%ecx
movslq -0x204(%rbp),%rax
mov    %ecx,-0x200(%rbp,%rax,4)
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    1125 <fn1+0x15>
lea    -0x200(%rbp),%rdi
call   1030 <bar@plt>
add    $0x210,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fn1>:
sub    $0x208,%rsp
movaps 0xee2(%rip),%xmm0
movaps %xmm0,(%rsp)
movaps 0xee7(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xeeb(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xeef(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xef3(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xef7(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xefb(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0xeff(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
movaps 0xf03(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
movaps 0xf04(%rip),%xmm0
movaps %xmm0,0x90(%rsp)
movaps 0xf05(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0xf06(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
movaps 0xf07(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps 0xf08(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xf09(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xf0a(%rip),%xmm0
movaps %xmm0,0xf0(%rsp)
movaps 0xf0b(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0xf0c(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0xf0d(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0xf0e(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0xf0f(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0xf10(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0xf11(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0xf12(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0xf13(%rip),%xmm0
movaps %xmm0,0x180(%rsp)
movaps 0xf14(%rip),%xmm0
movaps %xmm0,0x190(%rsp)
movaps 0xf15(%rip),%xmm0
movaps %xmm0,0x1a0(%rsp)
movaps 0xf16(%rip),%xmm0
movaps %xmm0,0x1b0(%rsp)
movaps 0xf17(%rip),%xmm0
movaps %xmm0,0x1c0(%rsp)
movaps 0xf18(%rip),%xmm0
movaps %xmm0,0x1d0(%rsp)
movaps 0xf19(%rip),%xmm0
movaps %xmm0,0x1e0(%rsp)
movaps 0xf1a(%rip),%xmm0
movaps %xmm0,0x1f0(%rsp)
mov    %rsp,%rdi
call   1030 <bar@plt>
add    $0x208,%rsp
ret

LLVM IR (-O0):
define void @fn1() {
%1 = alloca [128 x i32]
%2 = alloca i32
store i32 0, i32* %2
br label %3
3: ; preds = %12, %0
%4 = load i32, i32* %2
%5 = icmp slt i32 %4, 128
br i1 %5, label %6, label %15
6: ; preds = %3
%7 = load i32, i32* %2
%8 = mul nsw i32 %7, 33554433
%9 = load i32, i32* %2
%10 = sext i32 %9 to i64
%11 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 %10
store i32 %8, i32* %11
br label %12
12: ; preds = %6
%13 = load i32, i32* %2
%14 = add nsw i32 %13, 1
store i32 %14, i32* %2
br label %3
15: ; preds = %3
%16 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 0
%17 = call i32 @bar(i32* %16)
ret void
}

LLVM IR (-O2):
define void @fn1() {
%1 = alloca [128 x i32]
%2 = bitcast [128 x i32]* %1 to i8*
%3 = bitcast [128 x i32]* %1 to <4 x i32>*
store <4 x i32> <i32 0, i32 33554433, i32 67108866, i32 100663299>, <4 x i32>* %3
%4 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 4
%5 = bitcast i32* %4 to <4 x i32>*
store <4 x i32> <i32 134217732, i32 167772165, i32 201326598, i32 234881031>, <4 x i32>* %5
%6 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 8
%7 = bitcast i32* %6 to <4 x i32>*
store <4 x i32> <i32 268435464, i32 301989897, i32 335544330, i32 369098763>, <4 x i32>* %7
%8 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 12
%9 = bitcast i32* %8 to <4 x i32>*
store <4 x i32> <i32 402653196, i32 436207629, i32 469762062, i32 503316495>, <4 x i32>* %9
%10 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 16
%11 = bitcast i32* %10 to <4 x i32>*
store <4 x i32> <i32 536870928, i32 570425361, i32 603979794, i32 637534227>, <4 x i32>* %11
%12 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 20
%13 = bitcast i32* %12 to <4 x i32>*
store <4 x i32> <i32 671088660, i32 704643093, i32 738197526, i32 771751959>, <4 x i32>* %13
%14 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 24
%15 = bitcast i32* %14 to <4 x i32>*
store <4 x i32> <i32 805306392, i32 838860825, i32 872415258, i32 905969691>, <4 x i32>* %15
%16 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 28
%17 = bitcast i32* %16 to <4 x i32>*
store <4 x i32> <i32 939524124, i32 973078557, i32 1006632990, i32 1040187423>, <4 x i32>* %17
%18 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 32
%19 = bitcast i32* %18 to <4 x i32>*
store <4 x i32> <i32 1073741856, i32 1107296289, i32 1140850722, i32 1174405155>, <4 x i32>* %19
%20 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 36
%21 = bitcast i32* %20 to <4 x i32>*
store <4 x i32> <i32 1207959588, i32 1241514021, i32 1275068454, i32 1308622887>, <4 x i32>* %21
%22 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 40
%23 = bitcast i32* %22 to <4 x i32>*
store <4 x i32> <i32 1342177320, i32 1375731753, i32 1409286186, i32 1442840619>, <4 x i32>* %23
%24 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 44
%25 = bitcast i32* %24 to <4 x i32>*
store <4 x i32> <i32 1476395052, i32 1509949485, i32 1543503918, i32 1577058351>, <4 x i32>* %25
%26 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 48
%27 = bitcast i32* %26 to <4 x i32>*
store <4 x i32> <i32 1610612784, i32 1644167217, i32 1677721650, i32 1711276083>, <4 x i32>* %27
%28 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 52
%29 = bitcast i32* %28 to <4 x i32>*
store <4 x i32> <i32 1744830516, i32 1778384949, i32 1811939382, i32 1845493815>, <4 x i32>* %29
%30 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 56
%31 = bitcast i32* %30 to <4 x i32>*
store <4 x i32> <i32 1879048248, i32 1912602681, i32 1946157114, i32 1979711547>, <4 x i32>* %31
%32 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 60
%33 = bitcast i32* %32 to <4 x i32>*
store <4 x i32> <i32 2013265980, i32 2046820413, i32 2080374846, i32 2113929279>, <4 x i32>* %33
%34 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 64
%35 = bitcast i32* %34 to <4 x i32>*
store <4 x i32> <i32 -2147483584, i32 -2113929151, i32 -2080374718, i32 -2046820285>, <4 x i32>* %35
%36 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 68
%37 = bitcast i32* %36 to <4 x i32>*
store <4 x i32> <i32 -2013265852, i32 -1979711419, i32 -1946156986, i32 -1912602553>, <4 x i32>* %37
%38 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 72
%39 = bitcast i32* %38 to <4 x i32>*
store <4 x i32> <i32 -1879048120, i32 -1845493687, i32 -1811939254, i32 -1778384821>, <4 x i32>* %39
%40 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 76
%41 = bitcast i32* %40 to <4 x i32>*
store <4 x i32> <i32 -1744830388, i32 -1711275955, i32 -1677721522, i32 -1644167089>, <4 x i32>* %41
%42 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 80
%43 = bitcast i32* %42 to <4 x i32>*
store <4 x i32> <i32 -1610612656, i32 -1577058223, i32 -1543503790, i32 -1509949357>, <4 x i32>* %43
%44 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 84
%45 = bitcast i32* %44 to <4 x i32>*
store <4 x i32> <i32 -1476394924, i32 -1442840491, i32 -1409286058, i32 -1375731625>, <4 x i32>* %45
%46 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 88
%47 = bitcast i32* %46 to <4 x i32>*
store <4 x i32> <i32 -1342177192, i32 -1308622759, i32 -1275068326, i32 -1241513893>, <4 x i32>* %47
%48 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 92
%49 = bitcast i32* %48 to <4 x i32>*
store <4 x i32> <i32 -1207959460, i32 -1174405027, i32 -1140850594, i32 -1107296161>, <4 x i32>* %49
%50 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 96
%51 = bitcast i32* %50 to <4 x i32>*
store <4 x i32> <i32 -1073741728, i32 -1040187295, i32 -1006632862, i32 -973078429>, <4 x i32>* %51
%52 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 100
%53 = bitcast i32* %52 to <4 x i32>*
store <4 x i32> <i32 -939523996, i32 -905969563, i32 -872415130, i32 -838860697>, <4 x i32>* %53
%54 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 104
%55 = bitcast i32* %54 to <4 x i32>*
store <4 x i32> <i32 -805306264, i32 -771751831, i32 -738197398, i32 -704642965>, <4 x i32>* %55
%56 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 108
%57 = bitcast i32* %56 to <4 x i32>*
store <4 x i32> <i32 -671088532, i32 -637534099, i32 -603979666, i32 -570425233>, <4 x i32>* %57
%58 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 112
%59 = bitcast i32* %58 to <4 x i32>*
store <4 x i32> <i32 -536870800, i32 -503316367, i32 -469761934, i32 -436207501>, <4 x i32>* %59
%60 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 116
%61 = bitcast i32* %60 to <4 x i32>*
store <4 x i32> <i32 -402653068, i32 -369098635, i32 -335544202, i32 -301989769>, <4 x i32>* %61
%62 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 120
%63 = bitcast i32* %62 to <4 x i32>*
store <4 x i32> <i32 -268435336, i32 -234880903, i32 -201326470, i32 -167772037>, <4 x i32>* %63
%64 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 124
%65 = bitcast i32* %64 to <4 x i32>*
store <4 x i32> <i32 -134217604, i32 -100663171, i32 -67108738, i32 -33554305>, <4 x i32>* %65
%66 = getelementptr inbounds [128 x i32], [128 x i32]* %1, i64 0, i64 0
%67 = call i32 @bar(i32* %66)
ret void
}