#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 */
typedef int int64_t;

/* Variables and functions */
void c_sfill(const int64_t N, const float alpha, float *X,
             const int64_t stride) {
  int64_t ix;
  int64_t m;
  int64_t i;
  if (N <= 0) {
    return;
  }
  if (stride == 1) {
    m = N % 8;
    if (m > 0) {
      for (i = 0; i < m; i++) {
        X[i] = alpha;
      }
    }
    if (N < 8) {
      return;
    }
    for (i = m; i < N; i += 8) {
      X[i] = alpha;
      X[i + 1] = alpha;
      X[i + 2] = alpha;
      X[i + 3] = alpha;
      X[i + 4] = alpha;
      X[i + 5] = alpha;
      X[i + 6] = alpha;
      X[i + 7] = alpha;
    }
    return;
  }
  if (stride < 0) {
    ix = (1 - N) * stride;
  } else {
    ix = 0;
  }
  for (i = 0; i < N; i++) {
    X[ix] = alpha;
    ix += stride;
  }
  return;
}


x86 assembly (clang, -O0):
<c_sfill>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movss  %xmm0,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1122 <c_sfill+0x22>
jmp    12c9 <c_sfill+0x1c9>
cmpl   $0x1,-0x14(%rbp)
jne    1263 <c_sfill+0x163>
mov    -0x4(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    117c <c_sfill+0x7c>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1177 <c_sfill+0x77>
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    114b <c_sfill+0x4b>
jmp    117c <c_sfill+0x7c>
cmpl   $0x8,-0x4(%rbp)
jge    118b <c_sfill+0x8b>
jmp    12c9 <c_sfill+0x1c9>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    125e <c_sfill+0x15e>
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x20(%rbp)
jmp    1191 <c_sfill+0x91>
jmp    12c9 <c_sfill+0x1c9>
cmpl   $0x0,-0x14(%rbp)
jge    1281 <c_sfill+0x181>
mov    $0x1,%eax
sub    -0x4(%rbp),%eax
imul   -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
jmp    1288 <c_sfill+0x188>
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12c4 <c_sfill+0x1c4>
movss  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    128f <c_sfill+0x18f>
jmp    12c9 <c_sfill+0x1c9>
pop    %rbp
ret

x86 assembly (clang, -O2):
<c_sfill>:
push   %r14
push   %rbx
test   %edi,%edi
jle    13a2 <c_sfill+0x2a2>
cmp    $0x1,%edx
jne    11c2 <c_sfill+0xc2>
mov    %edi,%eax
and    $0x7,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,(%rsi)
cmp    $0x1,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,0x4(%rsi)
cmp    $0x2,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,0x8(%rsi)
cmp    $0x3,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,0xc(%rsi)
cmp    $0x4,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,0x10(%rsi)
cmp    $0x5,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,0x14(%rsi)
cmp    $0x6,%eax
je     115b <c_sfill+0x5b>
movss  %xmm0,0x18(%rsi)
cmp    $0x8,%edi
jl     13a2 <c_sfill+0x2a2>
mov    %edi,%r10d
lea    0x8(%rax),%rcx
cmp    %r10,%rcx
cmovbe %r10,%rcx
mov    %rax,%r9
not    %r9
add    %rcx,%r9
cmp    $0x18,%r9
jb     1380 <c_sfill+0x280>
shr    $0x3,%r9
add    $0x1,%r9
mov    %r9,%r8
and    $0xfffffffffffffffc,%r8
lea    -0x4(%r8),%rcx
mov    %rcx,%r14
shr    $0x2,%r14
add    $0x1,%r14
mov    %r14d,%r11d
and    $0x3,%r11d
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
cmp    $0xc,%rcx
jae    1254 <c_sfill+0x154>
xor    %edx,%edx
jmp    1337 <c_sfill+0x237>
mov    $0x1,%eax
sub    %edi,%eax
imul   %edx,%eax
movslq %edx,%r8
sar    $0x1f,%edx
and    %eax,%edx
movslq %edx,%rcx
lea    -0x1(%rdi),%ebx
mov    %edi,%eax
xor    %edx,%edx
and    $0x3,%eax
je     11ff <c_sfill+0xff>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movss  %xmm0,(%rsi,%rcx,4)
add    %r8,%rcx
add    $0x1,%edx
cmp    %edx,%eax
jne    11f0 <c_sfill+0xf0>
cmp    $0x3,%ebx
jb     13a2 <c_sfill+0x2a2>
lea    (%rsi,%rcx,4),%rbx
mov    %r8,%r10
shl    $0x4,%r10
lea    0x0(,%r8,4),%rax
lea    (%rax,%rax,2),%r9
add    %r8,%rcx
lea    (%rsi,%rcx,4),%rcx
sub    %edx,%edi
nopl   0x0(%rax,%rax,1)
movss  %xmm0,(%rbx)
movss  %xmm0,(%rcx)
movss  %xmm0,(%rbx,%r8,8)
movss  %xmm0,(%rbx,%r9,1)
add    %r10,%rbx
add    %r10,%rcx
add    $0xfffffffc,%edi
jne    1230 <c_sfill+0x130>
jmp    13a2 <c_sfill+0x2a2>
and    $0xfffffffffffffffc,%r14
xor    %edi,%edi
xor    %edx,%edx
nopl   0x0(%rax)
mov    %rdi,%rcx
or     %rax,%rcx
lea    0x0(,%rcx,4),%rbx
movups %xmm1,0x10(%rsi,%rcx,4)
movups %xmm1,(%rsi,%rcx,4)
movups %xmm1,0x20(%rsi,%rcx,4)
movups %xmm1,0x30(%rsi,%rcx,4)
movups %xmm1,0x40(%rsi,%rcx,4)
movups %xmm1,0x50(%rsi,%rcx,4)
movups %xmm1,0x60(%rsi,%rcx,4)
movups %xmm1,0x70(%rsi,%rcx,4)
mov    %rbx,%rcx
or     $0x80,%rcx
movups %xmm1,0x70(%rsi,%rcx,1)
movups %xmm1,0x40(%rsi,%rcx,1)
movups %xmm1,0x50(%rsi,%rcx,1)
movups %xmm1,0x20(%rsi,%rcx,1)
movups %xmm1,0x30(%rsi,%rcx,1)
movups %xmm1,(%rsi,%rcx,1)
movups %xmm1,0x10(%rsi,%rcx,1)
movups %xmm1,0x60(%rsi,%rcx,1)
mov    %rbx,%rcx
or     $0x100,%rcx
movups %xmm1,0x70(%rsi,%rcx,1)
movups %xmm1,0x40(%rsi,%rcx,1)
movups %xmm1,0x50(%rsi,%rcx,1)
movups %xmm1,0x20(%rsi,%rcx,1)
movups %xmm1,0x30(%rsi,%rcx,1)
movups %xmm1,(%rsi,%rcx,1)
movups %xmm1,0x10(%rsi,%rcx,1)
movups %xmm1,0x60(%rsi,%rcx,1)
or     $0x180,%rbx
movups %xmm1,0x60(%rsi,%rbx,1)
movups %xmm1,0x70(%rsi,%rbx,1)
movups %xmm1,0x40(%rsi,%rbx,1)
movups %xmm1,0x50(%rsi,%rbx,1)
movups %xmm1,0x20(%rsi,%rbx,1)
movups %xmm1,0x30(%rsi,%rbx,1)
movups %xmm1,(%rsi,%rbx,1)
movups %xmm1,0x10(%rsi,%rbx,1)
add    $0x10,%rdx
sub    $0xffffffffffffff80,%rdi
add    $0xfffffffffffffffc,%r14
jne    1260 <c_sfill+0x160>
test   %r11,%r11
je     1377 <c_sfill+0x277>
shl    $0x3,%rdx
mov    %rdx,%rcx
or     %rax,%rcx
movups %xmm1,0x10(%rsi,%rcx,4)
movups %xmm1,(%rsi,%rcx,4)
movups %xmm1,0x20(%rsi,%rcx,4)
movups %xmm1,0x30(%rsi,%rcx,4)
movups %xmm1,0x40(%rsi,%rcx,4)
movups %xmm1,0x50(%rsi,%rcx,4)
movups %xmm1,0x60(%rsi,%rcx,4)
movups %xmm1,0x70(%rsi,%rcx,4)
add    $0x20,%rdx
add    $0xffffffffffffffff,%r11
jne    1340 <c_sfill+0x240>
cmp    %r8,%r9
je     13a2 <c_sfill+0x2a2>
lea    (%rax,%r8,8),%rax
shufps $0x0,%xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movups %xmm0,(%rsi,%rax,4)
movups %xmm0,0x10(%rsi,%rax,4)
add    $0x8,%rax
cmp    %r10,%rax
jb     1390 <c_sfill+0x290>
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @c_sfill(i32 %0, float %1, float* %2, i32 %3) {
%5 = alloca i32
%6 = alloca float
%7 = alloca float*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store i32 %0, i32* %5
store float %1, float* %6
store float* %2, float** %7
store i32 %3, i32* %8
%12 = load i32, i32* %5
%13 = icmp sle i32 %12, 0
br i1 %13, label %14, label %15
14: ; preds = %4
br label %127
15: ; preds = %4
%16 = load i32, i32* %8
%17 = icmp eq i32 %16, 1
br i1 %17, label %18, label %100
18: ; preds = %15
%19 = load i32, i32* %5
%20 = srem i32 %19, 8
store i32 %20, i32* %10
%21 = load i32, i32* %10
%22 = icmp sgt i32 %21, 0
br i1 %22, label %23, label %38
23: ; preds = %18
store i32 0, i32* %11
br label %24
24: ; preds = %34, %23
%25 = load i32, i32* %11
%26 = load i32, i32* %10
%27 = icmp slt i32 %25, %26
br i1 %27, label %28, label %37
28: ; preds = %24
%29 = load float, float* %6
%30 = load float*, float** %7
%31 = load i32, i32* %11
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds float, float* %30, i64 %32
store float %29, float* %33
br label %34
34: ; preds = %28
%35 = load i32, i32* %11
%36 = add nsw i32 %35, 1
store i32 %36, i32* %11
br label %24
37: ; preds = %24
br label %38
38: ; preds = %37, %18
%39 = load i32, i32* %5
%40 = icmp slt i32 %39, 8
br i1 %40, label %41, label %42
41: ; preds = %38
br label %127
42: ; preds = %38
%43 = load i32, i32* %10
store i32 %43, i32* %11
br label %44
44: ; preds = %96, %42
%45 = load i32, i32* %11
%46 = load i32, i32* %5
%47 = icmp slt i32 %45, %46
br i1 %47, label %48, label %99
48: ; preds = %44
%49 = load float, float* %6
%50 = load float*, float** %7
%51 = load i32, i32* %11
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds float, float* %50, i64 %52
store float %49, float* %53
%54 = load float, float* %6
%55 = load float*, float** %7
%56 = load i32, i32* %11
%57 = add nsw i32 %56, 1
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds float, float* %55, i64 %58
store float %54, float* %59
%60 = load float, float* %6
%61 = load float*, float** %7
%62 = load i32, i32* %11
%63 = add nsw i32 %62, 2
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds float, float* %61, i64 %64
store float %60, float* %65
%66 = load float, float* %6
%67 = load float*, float** %7
%68 = load i32, i32* %11
%69 = add nsw i32 %68, 3
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds float, float* %67, i64 %70
store float %66, float* %71
%72 = load float, float* %6
%73 = load float*, float** %7
%74 = load i32, i32* %11
%75 = add nsw i32 %74, 4
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds float, float* %73, i64 %76
store float %72, float* %77
%78 = load float, float* %6
%79 = load float*, float** %7
%80 = load i32, i32* %11
%81 = add nsw i32 %80, 5
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds float, float* %79, i64 %82
store float %78, float* %83
%84 = load float, float* %6
%85 = load float*, float** %7
%86 = load i32, i32* %11
%87 = add nsw i32 %86, 6
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds float, float* %85, i64 %88
store float %84, float* %89
%90 = load float, float* %6
%91 = load float*, float** %7
%92 = load i32, i32* %11
%93 = add nsw i32 %92, 7
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds float, float* %91, i64 %94
store float %90, float* %95
br label %96
96: ; preds = %48
%97 = load i32, i32* %11
%98 = add nsw i32 %97, 8
store i32 %98, i32* %11
br label %44
99: ; preds = %44
br label %127
100: ; preds = %15
%101 = load i32, i32* %8
%102 = icmp slt i32 %101, 0
br i1 %102, label %103, label %108
103: ; preds = %100
%104 = load i32, i32* %5
%105 = sub nsw i32 1, %104
%106 = load i32, i32* %8
%107 = mul nsw i32 %105, %106
store i32 %107, i32* %9
br label %109
108: ; preds = %100
store i32 0, i32* %9
br label %109
109: ; preds = %108, %103
store i32 0, i32* %11
br label %110
110: ; preds = %123, %109
%111 = load i32, i32* %11
%112 = load i32, i32* %5
%113 = icmp slt i32 %111, %112
br i1 %113, label %114, label %126
114: ; preds = %110
%115 = load float, float* %6
%116 = load float*, float** %7
%117 = load i32, i32* %9
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds float, float* %116, i64 %118
store float %115, float* %119
%120 = load i32, i32* %8
%121 = load i32, i32* %9
%122 = add nsw i32 %121, %120
store i32 %122, i32* %9
br label %123
123: ; preds = %114
%124 = load i32, i32* %11
%125 = add nsw i32 %124, 1
store i32 %125, i32* %11
br label %110
126: ; preds = %110
br label %127
127: ; preds = %126, %99, %41, %14
ret void
}

LLVM IR (-O2):
define void @c_sfill(i32 %0, float %1, float* nocapture writeonly %2, i32 %3) {
%5 = icmp slt i32 %0, 1
br i1 %5, label %150, label %6
6: ; preds = %4
%7 = icmp eq i32 %3, 1
br i1 %7, label %8, label %114
8: ; preds = %6
%9 = and i32 %0, 7
%10 = icmp eq i32 %9, 0
br i1 %10, label %30, label %11
11: ; preds = %8
store float %1, float* %2
%12 = icmp eq i32 %9, 1
br i1 %12, label %30, label %13
13: ; preds = %11
%14 = getelementptr inbounds float, float* %2, i64 1
store float %1, float* %14
%15 = icmp eq i32 %9, 2
br i1 %15, label %30, label %16
16: ; preds = %13
%17 = getelementptr inbounds float, float* %2, i64 2
store float %1, float* %17
%18 = icmp eq i32 %9, 3
br i1 %18, label %30, label %19
19: ; preds = %16
%20 = getelementptr inbounds float, float* %2, i64 3
store float %1, float* %20
%21 = icmp eq i32 %9, 4
br i1 %21, label %30, label %22
22: ; preds = %19
%23 = getelementptr inbounds float, float* %2, i64 4
store float %1, float* %23
%24 = icmp eq i32 %9, 5
br i1 %24, label %30, label %25
25: ; preds = %22
%26 = getelementptr inbounds float, float* %2, i64 5
store float %1, float* %26
%27 = icmp eq i32 %9, 6
br i1 %27, label %30, label %28
28: ; preds = %25
%29 = getelementptr inbounds float, float* %2, i64 6
store float %1, float* %29
br label %30
30: ; preds = %11, %13, %16, %19, %22, %25, %28, %8
%31 = icmp sgt i32 %0, 7
br i1 %31, label %32, label %150
32: ; preds = %30
%33 = and i32 %0, 7
%34 = zext i32 %33 to i64
%35 = zext i32 %0 to i64
%36 = or i64 %34, 8
%37 = call i64 @llvm.umax.i64(i64 %36, i64 %35)
%38 = xor i64 %34, -1
%39 = add nsw i64 %37, %38
%40 = lshr i64 %39, 3
%41 = add nuw nsw i64 %40, 1
%42 = icmp ult i64 %39, 24
br i1 %42, label %101, label %43
43: ; preds = %32
%44 = and i64 %41, 4611686018427387900
%45 = shl i64 %44, 3
%46 = or i64 %45, %34
%47 = insertelement <4 x float> poison, float %1, i64 0
%48 = add nsw i64 %44, -4
%49 = lshr exact i64 %48, 2
%50 = add nuw nsw i64 %49, 1
%51 = and i64 %50, 3
%52 = icmp ult i64 %48, 12
br i1 %52, label %84, label %53
53: ; preds = %43
%54 = and i64 %50, 9223372036854775804
%55 = shufflevector <4 x float> %47, <4 x float> poison, <32 x i32> zeroinitializer
%56 = shufflevector <4 x float> %47, <4 x float> poison, <32 x i32> zeroinitializer
%57 = shufflevector <4 x float> %47, <4 x float> poison, <32 x i32> zeroinitializer
%58 = shufflevector <4 x float> %47, <4 x float> poison, <32 x i32> zeroinitializer
br label %59
59: ; preds = %59, %53
%60 = phi i64 [ 0, %53 ], [ %81, %59 ]
%61 = phi i64 [ 0, %53 ], [ %82, %59 ]
%62 = shl i64 %60, 3
%63 = or i64 %62, %34
%64 = getelementptr inbounds float, float* %2, i64 %63
%65 = bitcast float* %64 to <32 x float>*
store <32 x float> %55, <32 x float>* %65
%66 = shl i64 %60, 3
%67 = or i64 %66, %34
%68 = or i64 %67, 32
%69 = getelementptr inbounds float, float* %2, i64 %68
%70 = bitcast float* %69 to <32 x float>*
store <32 x float> %56, <32 x float>* %70
%71 = shl i64 %60, 3
%72 = or i64 %71, %34
%73 = or i64 %72, 64
%74 = getelementptr inbounds float, float* %2, i64 %73
%75 = bitcast float* %74 to <32 x float>*
store <32 x float> %57, <32 x float>* %75
%76 = shl i64 %60, 3
%77 = or i64 %76, %34
%78 = or i64 %77, 96
%79 = getelementptr inbounds float, float* %2, i64 %78
%80 = bitcast float* %79 to <32 x float>*
store <32 x float> %58, <32 x float>* %80
%81 = add nuw i64 %60, 16
%82 = add nuw i64 %61, 4
%83 = icmp eq i64 %82, %54
br i1 %83, label %84, label %59
84: ; preds = %59, %43
%85 = phi i64 [ 0, %43 ], [ %81, %59 ]
%86 = icmp eq i64 %51, 0
br i1 %86, label %99, label %87
87: ; preds = %84
%88 = shufflevector <4 x float> %47, <4 x float> poison, <32 x i32> zeroinitializer
br label %89
89: ; preds = %89, %87
%90 = phi i64 [ %85, %87 ], [ %96, %89 ]
%91 = phi i64 [ 0, %87 ], [ %97, %89 ]
%92 = shl i64 %90, 3
%93 = or i64 %92, %34
%94 = getelementptr inbounds float, float* %2, i64 %93
%95 = bitcast float* %94 to <32 x float>*
store <32 x float> %88, <32 x float>* %95
%96 = add nuw i64 %90, 4
%97 = add i64 %91, 1
%98 = icmp eq i64 %97, %51
br i1 %98, label %99, label %89
99: ; preds = %89, %84
%100 = icmp eq i64 %41, %44
br i1 %100, label %150, label %101
101: ; preds = %32, %99
%102 = phi i64 [ %34, %32 ], [ %46, %99 ]
%103 = insertelement <4 x float> poison, float %1, i64 0
%104 = shufflevector <4 x float> %103, <4 x float> poison, <4 x i32> zeroinitializer
br label %105
105: ; preds = %101, %105
%106 = phi i64 [ %112, %105 ], [ %102, %101 ]
%107 = getelementptr inbounds float, float* %2, i64 %106
%108 = bitcast float* %107 to <4 x float>*
store <4 x float> %104, <4 x float>* %108
%109 = add nuw nsw i64 %106, 4
%110 = getelementptr inbounds float, float* %2, i64 %109
%111 = bitcast float* %110 to <4 x float>*
store <4 x float> %104, <4 x float>* %111
%112 = add nuw nsw i64 %106, 8
%113 = icmp ult i64 %112, %35
br i1 %113, label %105, label %150
114: ; preds = %6
%115 = icmp slt i32 %3, 0
%116 = sub nsw i32 1, %0
%117 = mul nsw i32 %116, %3
%118 = select i1 %115, i32 %117, i32 0
%119 = sext i32 %118 to i64
%120 = sext i32 %3 to i64
%121 = add i32 %0, -1
%122 = and i32 %0, 3
%123 = icmp eq i32 %122, 0
br i1 %123, label %133, label %124
124: ; preds = %114, %124
%125 = phi i64 [ %129, %124 ], [ %119, %114 ]
%126 = phi i32 [ %130, %124 ], [ 0, %114 ]
%127 = phi i32 [ %131, %124 ], [ 0, %114 ]
%128 = getelementptr inbounds float, float* %2, i64 %125
store float %1, float* %128
%129 = add i64 %125, %120
%130 = add nuw nsw i32 %126, 1
%131 = add i32 %127, 1
%132 = icmp eq i32 %131, %122
br i1 %132, label %133, label %124
133: ; preds = %124, %114
%134 = phi i64 [ %119, %114 ], [ %129, %124 ]
%135 = phi i32 [ 0, %114 ], [ %130, %124 ]
%136 = icmp ult i32 %121, 3
br i1 %136, label %150, label %137
137: ; preds = %133, %137
%138 = phi i64 [ %147, %137 ], [ %134, %133 ]
%139 = phi i32 [ %148, %137 ], [ %135, %133 ]
%140 = getelementptr inbounds float, float* %2, i64 %138
store float %1, float* %140
%141 = add i64 %138, %120
%142 = getelementptr inbounds float, float* %2, i64 %141
store float %1, float* %142
%143 = add i64 %141, %120
%144 = getelementptr inbounds float, float* %2, i64 %143
store float %1, float* %144
%145 = add i64 %143, %120
%146 = getelementptr inbounds float, float* %2, i64 %145
store float %1, float* %146
%147 = add i64 %145, %120
%148 = add nuw nsw i32 %139, 4
%149 = icmp eq i32 %148, %0
br i1 %149, label %150, label %137
150: ; preds = %133, %137, %105, %99, %30, %4
ret void
}