float media(int a[], int dim) {
  int sum = 0;
  int n = 0;
  if (a[dim - 1] < 0) {
    for (int i = 0; i < dim; i++) {
      if (a[i] < 0) {
        sum += a[i];
        n++;
      }
    }
  } else {
    for (int i = 0; i < dim; i++) {
      if (a[i] > 0) {
        sum += a[i];
        n++;
      }
    }
  }
  return (float)sum / n;
}


x86 assembly (clang, -O0):
<media>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    1187 <media+0x87>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1182 <media+0x82>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    116f <media+0x6f>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1174 <media+0x74>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1137 <media+0x37>
jmp    11de <media+0xde>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11d9 <media+0xd9>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jle    11c6 <media+0xc6>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11cb <media+0xcb>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    118e <media+0x8e>
jmp    11de <media+0xde>
cvtsi2ssl -0x10(%rbp),%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
divss  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<media>:
movslq %esi,%rax
cmpl   $0x0,-0x4(%rdi,%rax,4)
js     1125 <media+0x25>
test   %esi,%esi
jle    1141 <media+0x41>
mov    %esi,%r10d
xor    %r9d,%r9d
cmp    $0x8,%esi
jae    114a <media+0x4a>
xor    %r11d,%r11d
xor    %eax,%eax
xor    %esi,%esi
jmp    1290 <media+0x190>
test   %esi,%esi
jle    1141 <media+0x41>
mov    %esi,%r9d
cmp    $0x8,%esi
jae    12b1 <media+0x1b1>
xor    %r10d,%r10d
xor    %eax,%eax
xor    %esi,%esi
jmp    1410 <media+0x310>
xor    %esi,%esi
xor    %eax,%eax
jmp    142b <media+0x32b>
mov    %r10d,%r11d
and    $0xfffffff8,%r11d
lea    -0x8(%r11),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     143e <media+0x33e>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
pxor   %xmm8,%xmm8
xor    %esi,%esi
pxor   %xmm0,%xmm0
pxor   %xmm1,%xmm1
pxor   %xmm6,%xmm6
pxor   %xmm9,%xmm9
nopl   0x0(%rax,%rax,1)
movdqu (%rdi,%rsi,4),%xmm7
movdqu 0x10(%rdi,%rsi,4),%xmm4
movdqu 0x20(%rdi,%rsi,4),%xmm2
movdqu 0x30(%rdi,%rsi,4),%xmm3
movdqa %xmm7,%xmm5
pcmpgtd %xmm8,%xmm5
pand   %xmm5,%xmm7
paddd  %xmm6,%xmm7
movdqa %xmm4,%xmm6
pcmpgtd %xmm8,%xmm6
pand   %xmm6,%xmm4
paddd  %xmm9,%xmm4
psubd  %xmm5,%xmm0
psubd  %xmm6,%xmm1
movdqa %xmm2,%xmm5
pcmpgtd %xmm8,%xmm5
pand   %xmm5,%xmm2
paddd  %xmm7,%xmm2
movdqa %xmm3,%xmm6
pcmpgtd %xmm8,%xmm6
pand   %xmm6,%xmm3
paddd  %xmm4,%xmm3
psubd  %xmm5,%xmm0
psubd  %xmm6,%xmm1
add    $0x10,%rsi
movdqa %xmm2,%xmm6
movdqa %xmm3,%xmm9
add    $0xfffffffffffffffe,%rax
jne    1190 <media+0x90>
test   $0x1,%r8b
je     124c <media+0x14c>
movdqu (%rdi,%rsi,4),%xmm4
movdqu 0x10(%rdi,%rsi,4),%xmm5
pxor   %xmm6,%xmm6
movdqa %xmm4,%xmm7
pcmpgtd %xmm6,%xmm7
pand   %xmm7,%xmm4
paddd  %xmm4,%xmm2
movdqa %xmm5,%xmm4
pcmpgtd %xmm6,%xmm4
pand   %xmm4,%xmm5
paddd  %xmm5,%xmm3
psubd  %xmm7,%xmm0
psubd  %xmm4,%xmm1
paddd  %xmm1,%xmm0
paddd  %xmm3,%xmm2
pshufd $0xee,%xmm2,%xmm1
paddd  %xmm2,%xmm1
pshufd $0x55,%xmm1,%xmm2
paddd  %xmm1,%xmm2
movd   %xmm2,%esi
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
cmp    %r10,%r11
je     142b <media+0x32b>
nopl   0x0(%rax)
mov    (%rdi,%r11,4),%ecx
xor    %edx,%edx
test   %ecx,%ecx
setg   %dl
cmovle %r9d,%ecx
add    %ecx,%esi
add    %edx,%eax
add    $0x1,%r11
cmp    %r11,%r10
jne    1290 <media+0x190>
jmp    142b <media+0x32b>
mov    %r9d,%r10d
and    $0xfffffff8,%r10d
lea    -0x8(%r10),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     145f <media+0x35f>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
pxor   %xmm8,%xmm8
xor    %esi,%esi
pxor   %xmm9,%xmm9
pxor   %xmm1,%xmm1
pxor   %xmm3,%xmm3
nopl   0x0(%rax,%rax,1)
movdqu (%rdi,%rsi,4),%xmm7
movdqu 0x10(%rdi,%rsi,4),%xmm6
movdqu 0x20(%rdi,%rsi,4),%xmm0
movdqu 0x30(%rdi,%rsi,4),%xmm2
pxor   %xmm4,%xmm4
pcmpgtd %xmm7,%xmm4
pand   %xmm7,%xmm4
paddd  %xmm1,%xmm4
pxor   %xmm5,%xmm5
pcmpgtd %xmm6,%xmm5
pand   %xmm6,%xmm5
paddd  %xmm3,%xmm5
psrld  $0x1f,%xmm7
paddd  %xmm8,%xmm7
psrld  $0x1f,%xmm6
paddd  %xmm9,%xmm6
pxor   %xmm1,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm0,%xmm1
paddd  %xmm4,%xmm1
pxor   %xmm3,%xmm3
pcmpgtd %xmm2,%xmm3
pand   %xmm2,%xmm3
paddd  %xmm5,%xmm3
psrld  $0x1f,%xmm0
paddd  %xmm7,%xmm0
psrld  $0x1f,%xmm2
paddd  %xmm6,%xmm2
add    $0x10,%rsi
movdqa %xmm0,%xmm8
movdqa %xmm2,%xmm9
add    $0xfffffffffffffffe,%rax
jne    12f0 <media+0x1f0>
test   $0x1,%r8b
je     13c8 <media+0x2c8>
movdqu (%rdi,%rsi,4),%xmm4
movdqu 0x10(%rdi,%rsi,4),%xmm5
pxor   %xmm6,%xmm6
pxor   %xmm7,%xmm7
pcmpgtd %xmm4,%xmm7
pand   %xmm4,%xmm7
paddd  %xmm7,%xmm1
pcmpgtd %xmm5,%xmm6
pand   %xmm5,%xmm6
paddd  %xmm6,%xmm3
psrld  $0x1f,%xmm4
paddd  %xmm4,%xmm0
psrld  $0x1f,%xmm5
paddd  %xmm5,%xmm2
paddd  %xmm2,%xmm0
paddd  %xmm3,%xmm1
pshufd $0xee,%xmm1,%xmm2
paddd  %xmm1,%xmm2
pshufd $0x55,%xmm2,%xmm1
paddd  %xmm2,%xmm1
movd   %xmm1,%esi
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
cmp    %r9,%r10
je     142b <media+0x32b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rdi,%r10,4),%ecx
mov    %ecx,%edx
sar    $0x1f,%edx
and    %ecx,%edx
add    %edx,%esi
shr    $0x1f,%ecx
add    %ecx,%eax
add    $0x1,%r10
cmp    %r10,%r9
jne    1410 <media+0x310>
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
ret
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
pxor   %xmm2,%xmm2
pxor   %xmm3,%xmm3
test   $0x1,%r8b
jne    1215 <media+0x115>
jmp    124c <media+0x14c>
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm2,%xmm2
pxor   %xmm1,%xmm1
pxor   %xmm3,%xmm3
test   $0x1,%r8b
jne    138b <media+0x28b>
jmp    13c8 <media+0x2c8>

LLVM IR (-O0):
define float @media(i32* %0, i32 %1) {
%3 = alloca i32*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32* %0, i32** %3
store i32 %1, i32* %4
store i32 0, i32* %5
store i32 0, i32* %6
%9 = load i32*, i32** %3
%10 = load i32, i32* %4
%11 = sub nsw i32 %10, 1
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds i32, i32* %9, i64 %12
%14 = load i32, i32* %13
%15 = icmp slt i32 %14, 0
br i1 %15, label %16, label %43
16: ; preds = %2
store i32 0, i32* %7
br label %17
17: ; preds = %39, %16
%18 = load i32, i32* %7
%19 = load i32, i32* %4
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %42
21: ; preds = %17
%22 = load i32*, i32** %3
%23 = load i32, i32* %7
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i32, i32* %22, i64 %24
%26 = load i32, i32* %25
%27 = icmp slt i32 %26, 0
br i1 %27, label %28, label %38
28: ; preds = %21
%29 = load i32*, i32** %3
%30 = load i32, i32* %7
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %29, i64 %31
%33 = load i32, i32* %32
%34 = load i32, i32* %5
%35 = add nsw i32 %34, %33
store i32 %35, i32* %5
%36 = load i32, i32* %6
%37 = add nsw i32 %36, 1
store i32 %37, i32* %6
br label %38
38: ; preds = %28, %21
br label %39
39: ; preds = %38
%40 = load i32, i32* %7
%41 = add nsw i32 %40, 1
store i32 %41, i32* %7
br label %17
42: ; preds = %17
br label %70
43: ; preds = %2
store i32 0, i32* %8
br label %44
44: ; preds = %66, %43
%45 = load i32, i32* %8
%46 = load i32, i32* %4
%47 = icmp slt i32 %45, %46
br i1 %47, label %48, label %69
48: ; preds = %44
%49 = load i32*, i32** %3
%50 = load i32, i32* %8
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i32, i32* %49, i64 %51
%53 = load i32, i32* %52
%54 = icmp sgt i32 %53, 0
br i1 %54, label %55, label %65
55: ; preds = %48
%56 = load i32*, i32** %3
%57 = load i32, i32* %8
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i32, i32* %56, i64 %58
%60 = load i32, i32* %59
%61 = load i32, i32* %5
%62 = add nsw i32 %61, %60
store i32 %62, i32* %5
%63 = load i32, i32* %6
%64 = add nsw i32 %63, 1
store i32 %64, i32* %6
br label %65
65: ; preds = %55, %48
br label %66
66: ; preds = %65
%67 = load i32, i32* %8
%68 = add nsw i32 %67, 1
store i32 %68, i32* %8
br label %44
69: ; preds = %44
br label %70
70: ; preds = %69, %42
%71 = load i32, i32* %5
%72 = sitofp i32 %71 to float
%73 = load i32, i32* %6
%74 = sitofp i32 %73 to float
%75 = fdiv float %72, %74
ret float %75
}

LLVM IR (-O2):
define float @media(i32* nocapture %0, i32 %1) {
%3 = add nsw i32 %1, -1
%4 = sext i32 %3 to i64
%5 = getelementptr inbounds i32, i32* %0, i64 %4
%6 = load i32, i32* %5
%7 = icmp slt i32 %6, 0
%8 = icmp sgt i32 %1, 0
br i1 %7, label %107, label %9
9: ; preds = %2
br i1 %8, label %10, label %231
10: ; preds = %9
%11 = zext i32 %1 to i64
%12 = icmp ult i32 %1, 8
br i1 %12, label %103, label %13
13: ; preds = %10
%14 = and i64 %11, 4294967288
%15 = add nsw i64 %14, -8
%16 = lshr exact i64 %15, 3
%17 = add nuw nsw i64 %16, 1
%18 = and i64 %17, 1
%19 = icmp eq i64 %15, 0
br i1 %19, label %65, label %20
20: ; preds = %13
%21 = and i64 %17, 4611686018427387902
br label %22
22: ; preds = %22, %20
%23 = phi i64 [ 0, %20 ], [ %62, %22 ]
%24 = phi <4 x i32> [ zeroinitializer, %20 ], [ %60, %22 ]
%25 = phi <4 x i32> [ zeroinitializer, %20 ], [ %61, %22 ]
%26 = phi <4 x i32> [ zeroinitializer, %20 ], [ %56, %22 ]
%27 = phi <4 x i32> [ zeroinitializer, %20 ], [ %57, %22 ]
%28 = phi i64 [ 0, %20 ], [ %63, %22 ]
%29 = getelementptr inbounds i32, i32* %0, i64 %23
%30 = bitcast i32* %29 to <4 x i32>*
%31 = load <4 x i32>, <4 x i32>* %30
%32 = getelementptr inbounds i32, i32* %29, i64 4
%33 = bitcast i32* %32 to <4 x i32>*
%34 = load <4 x i32>, <4 x i32>* %33
%35 = icmp sgt <4 x i32> %31, zeroinitializer
%36 = icmp sgt <4 x i32> %34, zeroinitializer
%37 = select <4 x i1> %35, <4 x i32> %31, <4 x i32> zeroinitializer
%38 = select <4 x i1> %36, <4 x i32> %34, <4 x i32> zeroinitializer
%39 = add <4 x i32> %37, %26
%40 = add <4 x i32> %38, %27
%41 = zext <4 x i1> %35 to <4 x i32>
%42 = zext <4 x i1> %36 to <4 x i32>
%43 = add <4 x i32> %24, %41
%44 = add <4 x i32> %25, %42
%45 = or i64 %23, 8
%46 = getelementptr inbounds i32, i32* %0, i64 %45
%47 = bitcast i32* %46 to <4 x i32>*
%48 = load <4 x i32>, <4 x i32>* %47
%49 = getelementptr inbounds i32, i32* %46, i64 4
%50 = bitcast i32* %49 to <4 x i32>*
%51 = load <4 x i32>, <4 x i32>* %50
%52 = icmp sgt <4 x i32> %48, zeroinitializer
%53 = icmp sgt <4 x i32> %51, zeroinitializer
%54 = select <4 x i1> %52, <4 x i32> %48, <4 x i32> zeroinitializer
%55 = select <4 x i1> %53, <4 x i32> %51, <4 x i32> zeroinitializer
%56 = add <4 x i32> %54, %39
%57 = add <4 x i32> %55, %40
%58 = zext <4 x i1> %52 to <4 x i32>
%59 = zext <4 x i1> %53 to <4 x i32>
%60 = add <4 x i32> %43, %58
%61 = add <4 x i32> %44, %59
%62 = add nuw i64 %23, 16
%63 = add i64 %28, 2
%64 = icmp eq i64 %63, %21
br i1 %64, label %65, label %22
65: ; preds = %22, %13
%66 = phi <4 x i32> [ undef, %13 ], [ %56, %22 ]
%67 = phi <4 x i32> [ undef, %13 ], [ %57, %22 ]
%68 = phi <4 x i32> [ undef, %13 ], [ %60, %22 ]
%69 = phi <4 x i32> [ undef, %13 ], [ %61, %22 ]
%70 = phi i64 [ 0, %13 ], [ %62, %22 ]
%71 = phi <4 x i32> [ zeroinitializer, %13 ], [ %60, %22 ]
%72 = phi <4 x i32> [ zeroinitializer, %13 ], [ %61, %22 ]
%73 = phi <4 x i32> [ zeroinitializer, %13 ], [ %56, %22 ]
%74 = phi <4 x i32> [ zeroinitializer, %13 ], [ %57, %22 ]
%75 = icmp eq i64 %18, 0
br i1 %75, label %93, label %76
76: ; preds = %65
%77 = getelementptr inbounds i32, i32* %0, i64 %70
%78 = bitcast i32* %77 to <4 x i32>*
%79 = load <4 x i32>, <4 x i32>* %78
%80 = getelementptr inbounds i32, i32* %77, i64 4
%81 = bitcast i32* %80 to <4 x i32>*
%82 = load <4 x i32>, <4 x i32>* %81
%83 = icmp sgt <4 x i32> %79, zeroinitializer
%84 = icmp sgt <4 x i32> %82, zeroinitializer
%85 = select <4 x i1> %83, <4 x i32> %79, <4 x i32> zeroinitializer
%86 = select <4 x i1> %84, <4 x i32> %82, <4 x i32> zeroinitializer
%87 = add <4 x i32> %85, %73
%88 = add <4 x i32> %86, %74
%89 = zext <4 x i1> %83 to <4 x i32>
%90 = zext <4 x i1> %84 to <4 x i32>
%91 = add <4 x i32> %71, %89
%92 = add <4 x i32> %72, %90
br label %93
93: ; preds = %65, %76
%94 = phi <4 x i32> [ %66, %65 ], [ %87, %76 ]
%95 = phi <4 x i32> [ %67, %65 ], [ %88, %76 ]
%96 = phi <4 x i32> [ %68, %65 ], [ %91, %76 ]
%97 = phi <4 x i32> [ %69, %65 ], [ %92, %76 ]
%98 = add <4 x i32> %95, %94
%99 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %98)
%100 = add <4 x i32> %97, %96
%101 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %100)
%102 = icmp eq i64 %14, %11
br i1 %102, label %231, label %103
103: ; preds = %10, %93
%104 = phi i64 [ 0, %10 ], [ %14, %93 ]
%105 = phi i32 [ 0, %10 ], [ %101, %93 ]
%106 = phi i32 [ 0, %10 ], [ %99, %93 ]
br label %218
107: ; preds = %2
br i1 %8, label %108, label %231
108: ; preds = %107
%109 = zext i32 %1 to i64
%110 = icmp ult i32 %1, 8
br i1 %110, label %201, label %111
111: ; preds = %108
%112 = and i64 %109, 4294967288
%113 = add nsw i64 %112, -8
%114 = lshr exact i64 %113, 3
%115 = add nuw nsw i64 %114, 1
%116 = and i64 %115, 1
%117 = icmp eq i64 %113, 0
br i1 %117, label %163, label %118
118: ; preds = %111
%119 = and i64 %115, 4611686018427387902
br label %120
120: ; preds = %120, %118
%121 = phi i64 [ 0, %118 ], [ %160, %120 ]
%122 = phi <4 x i32> [ zeroinitializer, %118 ], [ %158, %120 ]
%123 = phi <4 x i32> [ zeroinitializer, %118 ], [ %159, %120 ]
%124 = phi <4 x i32> [ zeroinitializer, %118 ], [ %154, %120 ]
%125 = phi <4 x i32> [ zeroinitializer, %118 ], [ %155, %120 ]
%126 = phi i64 [ 0, %118 ], [ %161, %120 ]
%127 = getelementptr inbounds i32, i32* %0, i64 %121
%128 = bitcast i32* %127 to <4 x i32>*
%129 = load <4 x i32>, <4 x i32>* %128
%130 = getelementptr inbounds i32, i32* %127, i64 4
%131 = bitcast i32* %130 to <4 x i32>*
%132 = load <4 x i32>, <4 x i32>* %131
%133 = icmp slt <4 x i32> %129, zeroinitializer
%134 = icmp slt <4 x i32> %132, zeroinitializer
%135 = select <4 x i1> %133, <4 x i32> %129, <4 x i32> zeroinitializer
%136 = select <4 x i1> %134, <4 x i32> %132, <4 x i32> zeroinitializer
%137 = add <4 x i32> %135, %124
%138 = add <4 x i32> %136, %125
%139 = lshr <4 x i32> %129, <i32 31, i32 31, i32 31, i32 31>
%140 = lshr <4 x i32> %132, <i32 31, i32 31, i32 31, i32 31>
%141 = add <4 x i32> %139, %122
%142 = add <4 x i32> %140, %123
%143 = or i64 %121, 8
%144 = getelementptr inbounds i32, i32* %0, i64 %143
%145 = bitcast i32* %144 to <4 x i32>*
%146 = load <4 x i32>, <4 x i32>* %145
%147 = getelementptr inbounds i32, i32* %144, i64 4
%148 = bitcast i32* %147 to <4 x i32>*
%149 = load <4 x i32>, <4 x i32>* %148
%150 = icmp slt <4 x i32> %146, zeroinitializer
%151 = icmp slt <4 x i32> %149, zeroinitializer
%152 = select <4 x i1> %150, <4 x i32> %146, <4 x i32> zeroinitializer
%153 = select <4 x i1> %151, <4 x i32> %149, <4 x i32> zeroinitializer
%154 = add <4 x i32> %152, %137
%155 = add <4 x i32> %153, %138
%156 = lshr <4 x i32> %146, <i32 31, i32 31, i32 31, i32 31>
%157 = lshr <4 x i32> %149, <i32 31, i32 31, i32 31, i32 31>
%158 = add <4 x i32> %156, %141
%159 = add <4 x i32> %157, %142
%160 = add nuw i64 %121, 16
%161 = add i64 %126, 2
%162 = icmp eq i64 %161, %119
br i1 %162, label %163, label %120
163: ; preds = %120, %111
%164 = phi <4 x i32> [ undef, %111 ], [ %154, %120 ]
%165 = phi <4 x i32> [ undef, %111 ], [ %155, %120 ]
%166 = phi <4 x i32> [ undef, %111 ], [ %158, %120 ]
%167 = phi <4 x i32> [ undef, %111 ], [ %159, %120 ]
%168 = phi i64 [ 0, %111 ], [ %160, %120 ]
%169 = phi <4 x i32> [ zeroinitializer, %111 ], [ %158, %120 ]
%170 = phi <4 x i32> [ zeroinitializer, %111 ], [ %159, %120 ]
%171 = phi <4 x i32> [ zeroinitializer, %111 ], [ %154, %120 ]
%172 = phi <4 x i32> [ zeroinitializer, %111 ], [ %155, %120 ]
%173 = icmp eq i64 %116, 0
br i1 %173, label %191, label %174
174: ; preds = %163
%175 = getelementptr inbounds i32, i32* %0, i64 %168
%176 = bitcast i32* %175 to <4 x i32>*
%177 = load <4 x i32>, <4 x i32>* %176
%178 = getelementptr inbounds i32, i32* %175, i64 4
%179 = bitcast i32* %178 to <4 x i32>*
%180 = load <4 x i32>, <4 x i32>* %179
%181 = icmp slt <4 x i32> %177, zeroinitializer
%182 = icmp slt <4 x i32> %180, zeroinitializer
%183 = select <4 x i1> %181, <4 x i32> %177, <4 x i32> zeroinitializer
%184 = select <4 x i1> %182, <4 x i32> %180, <4 x i32> zeroinitializer
%185 = add <4 x i32> %183, %171
%186 = add <4 x i32> %184, %172
%187 = lshr <4 x i32> %177, <i32 31, i32 31, i32 31, i32 31>
%188 = lshr <4 x i32> %180, <i32 31, i32 31, i32 31, i32 31>
%189 = add <4 x i32> %187, %169
%190 = add <4 x i32> %188, %170
br label %191
191: ; preds = %163, %174
%192 = phi <4 x i32> [ %164, %163 ], [ %185, %174 ]
%193 = phi <4 x i32> [ %165, %163 ], [ %186, %174 ]
%194 = phi <4 x i32> [ %166, %163 ], [ %189, %174 ]
%195 = phi <4 x i32> [ %167, %163 ], [ %190, %174 ]
%196 = add <4 x i32> %193, %192
%197 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %196)
%198 = add <4 x i32> %195, %194
%199 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %198)
%200 = icmp eq i64 %112, %109
br i1 %200, label %231, label %201
201: ; preds = %108, %191
%202 = phi i64 [ 0, %108 ], [ %112, %191 ]
%203 = phi i32 [ 0, %108 ], [ %199, %191 ]
%204 = phi i32 [ 0, %108 ], [ %197, %191 ]
br label %205
205: ; preds = %201, %205
%206 = phi i64 [ %216, %205 ], [ %202, %201 ]
%207 = phi i32 [ %215, %205 ], [ %203, %201 ]
%208 = phi i32 [ %213, %205 ], [ %204, %201 ]
%209 = getelementptr inbounds i32, i32* %0, i64 %206
%210 = load i32, i32* %209
%211 = icmp slt i32 %210, 0
%212 = select i1 %211, i32 %210, i32 0
%213 = add nsw i32 %212, %208
%214 = lshr i32 %210, 31
%215 = add nuw nsw i32 %214, %207
%216 = add nuw nsw i64 %206, 1
%217 = icmp eq i64 %216, %109
br i1 %217, label %231, label %205
218: ; preds = %103, %218
%219 = phi i64 [ %229, %218 ], [ %104, %103 ]
%220 = phi i32 [ %228, %218 ], [ %105, %103 ]
%221 = phi i32 [ %226, %218 ], [ %106, %103 ]
%222 = getelementptr inbounds i32, i32* %0, i64 %219
%223 = load i32, i32* %222
%224 = icmp sgt i32 %223, 0
%225 = select i1 %224, i32 %223, i32 0
%226 = add nuw nsw i32 %225, %221
%227 = zext i1 %224 to i32
%228 = add nuw nsw i32 %220, %227
%229 = add nuw nsw i64 %219, 1
%230 = icmp eq i64 %229, %11
br i1 %230, label %231, label %218
231: ; preds = %218, %205, %93, %191, %9, %107
%232 = phi i32 [ 0, %107 ], [ 0, %9 ], [ %197, %191 ], [ %99, %93 ], [ %213, %205 ], [ %226, %218 ]
%233 = phi i32 [ 0, %107 ], [ 0, %9 ], [ %199, %191 ], [ %101, %93 ], [ %215, %205 ], [ %228, %218 ]
%234 = sitofp i32 %232 to float
%235 = sitofp i32 %233 to float
%236 = fdiv float %234, %235
ret float %236
}