void init_zero(float A[128][128], float B[128][128]) {
  int i, j, s = -1;
  for (i = 0; i < 128; i++)
    for (j = 0; j < 128; j++) {
      A[i][j] = 0;
      B[i][j] = 0;
    }
}


x86 assembly (clang, -O0):
<init_zero>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0xffffffff,-0x1c(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x80,-0x14(%rbp)
jge    1192 <init_zero+0x92>
movl   $0x0,-0x18(%rbp)
cmpl   $0x80,-0x18(%rbp)
jge    117f <init_zero+0x7f>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x9,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x9,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    112e <init_zero+0x2e>
jmp    1184 <init_zero+0x84>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    111a <init_zero+0x1a>
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_zero>:
lea    0x4(%rdi),%r10
lea    0x4(%rsi),%rcx
xor    %r8d,%r8d
xorps  %xmm0,%xmm0
jmp    1309 <init_zero+0x209>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups %xmm0,(%rdi,%rdx,1)
movups %xmm0,0x10(%rdi,%rdx,1)
movups %xmm0,(%rsi,%rdx,1)
movups %xmm0,0x10(%rsi,%rdx,1)
movups %xmm0,0x20(%rdi,%rdx,1)
movups %xmm0,0x30(%rdi,%rdx,1)
movups %xmm0,0x20(%rsi,%rdx,1)
movups %xmm0,0x30(%rsi,%rdx,1)
movups %xmm0,0x40(%rdi,%rdx,1)
movups %xmm0,0x50(%rdi,%rdx,1)
movups %xmm0,0x40(%rsi,%rdx,1)
movups %xmm0,0x50(%rsi,%rdx,1)
movups %xmm0,0x60(%rdi,%rdx,1)
movups %xmm0,0x70(%rdi,%rdx,1)
movups %xmm0,0x60(%rsi,%rdx,1)
movups %xmm0,0x70(%rsi,%rdx,1)
movups %xmm0,0x80(%rdi,%rdx,1)
movups %xmm0,0x90(%rdi,%rdx,1)
movups %xmm0,0x80(%rsi,%rdx,1)
movups %xmm0,0x90(%rsi,%rdx,1)
movups %xmm0,0xa0(%rdi,%rdx,1)
movups %xmm0,0xb0(%rdi,%rdx,1)
movups %xmm0,0xa0(%rsi,%rdx,1)
movups %xmm0,0xb0(%rsi,%rdx,1)
movups %xmm0,0xc0(%rdi,%rdx,1)
movups %xmm0,0xd0(%rdi,%rdx,1)
movups %xmm0,0xc0(%rsi,%rdx,1)
movups %xmm0,0xd0(%rsi,%rdx,1)
movups %xmm0,0xe0(%rdi,%rdx,1)
movups %xmm0,0xf0(%rdi,%rdx,1)
movups %xmm0,0xe0(%rsi,%rdx,1)
movups %xmm0,0xf0(%rsi,%rdx,1)
movups %xmm0,0x100(%rdi,%rdx,1)
movups %xmm0,0x110(%rdi,%rdx,1)
movups %xmm0,0x100(%rsi,%rdx,1)
movups %xmm0,0x110(%rsi,%rdx,1)
movups %xmm0,0x120(%rdi,%rdx,1)
movups %xmm0,0x130(%rdi,%rdx,1)
movups %xmm0,0x120(%rsi,%rdx,1)
movups %xmm0,0x130(%rsi,%rdx,1)
movups %xmm0,0x140(%rdi,%rdx,1)
movups %xmm0,0x150(%rdi,%rdx,1)
movups %xmm0,0x140(%rsi,%rdx,1)
movups %xmm0,0x150(%rsi,%rdx,1)
movups %xmm0,0x160(%rdi,%rdx,1)
movups %xmm0,0x170(%rdi,%rdx,1)
movups %xmm0,0x160(%rsi,%rdx,1)
movups %xmm0,0x170(%rsi,%rdx,1)
movups %xmm0,0x180(%rdi,%rdx,1)
movups %xmm0,0x190(%rdi,%rdx,1)
movups %xmm0,0x180(%rsi,%rdx,1)
movups %xmm0,0x190(%rsi,%rdx,1)
movups %xmm0,0x1a0(%rdi,%rdx,1)
movups %xmm0,0x1b0(%rdi,%rdx,1)
movups %xmm0,0x1a0(%rsi,%rdx,1)
movups %xmm0,0x1b0(%rsi,%rdx,1)
movups %xmm0,0x1c0(%rdi,%rdx,1)
movups %xmm0,0x1d0(%rdi,%rdx,1)
movups %xmm0,0x1c0(%rsi,%rdx,1)
movups %xmm0,0x1d0(%rsi,%rdx,1)
movups %xmm0,0x1e0(%rdi,%rdx,1)
movups %xmm0,0x1f0(%rdi,%rdx,1)
movups %xmm0,0x1e0(%rsi,%rdx,1)
movups %xmm0,0x1f0(%rsi,%rdx,1)
add    $0x1,%r8
add    $0x200,%r10
add    $0x200,%rcx
cmp    $0x80,%r8
je     1382 <init_zero+0x282>
mov    %r8,%rdx
shl    $0x9,%rdx
lea    (%rsi,%rdx,1),%r9
add    $0x200,%r9
lea    (%rdi,%rdx,1),%rax
cmp    %r9,%rax
jae    1120 <init_zero+0x20>
lea    (%rsi,%rdx,1),%r9
lea    (%rdi,%rdx,1),%rax
add    $0x200,%rax
cmp    %rax,%r9
jae    1120 <init_zero+0x20>
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movl   $0x0,-0x4(%r10,%rdx,4)
movl   $0x0,-0x4(%rcx,%rdx,4)
movl   $0x0,(%r10,%rdx,4)
movl   $0x0,(%rcx,%rdx,4)
add    $0x2,%rdx
cmp    $0x80,%rdx
jne    1350 <init_zero+0x250>
jmp    12ee <init_zero+0x1ee>
ret

LLVM IR (-O0):
define void @init_zero([128 x float]* %0, [128 x float]* %1) {
%3 = alloca [128 x float]*
%4 = alloca [128 x float]*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store [128 x float]* %0, [128 x float]** %3
store [128 x float]* %1, [128 x float]** %4
store i32 -1, i32* %7
store i32 0, i32* %5
br label %8
8: ; preds = %34, %2
%9 = load i32, i32* %5
%10 = icmp slt i32 %9, 128
br i1 %10, label %11, label %37
11: ; preds = %8
store i32 0, i32* %6
br label %12
12: ; preds = %30, %11
%13 = load i32, i32* %6
%14 = icmp slt i32 %13, 128
br i1 %14, label %15, label %33
15: ; preds = %12
%16 = load [128 x float]*, [128 x float]** %3
%17 = load i32, i32* %5
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [128 x float], [128 x float]* %16, i64 %18
%20 = load i32, i32* %6
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [128 x float], [128 x float]* %19, i64 0, i64 %21
store float 0.000000e+00, float* %22
%23 = load [128 x float]*, [128 x float]** %4
%24 = load i32, i32* %5
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [128 x float], [128 x float]* %23, i64 %25
%27 = load i32, i32* %6
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [128 x float], [128 x float]* %26, i64 0, i64 %28
store float 0.000000e+00, float* %29
br label %30
30: ; preds = %15
%31 = load i32, i32* %6
%32 = add nsw i32 %31, 1
store i32 %32, i32* %6
br label %12
33: ; preds = %12
br label %34
34: ; preds = %33
%35 = load i32, i32* %5
%36 = add nsw i32 %35, 1
store i32 %36, i32* %5
br label %8
37: ; preds = %8
ret void
}

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