__attribute__((no)) int main1(int A[5][5], int n) {
  int i, j;
  for (i = 1; i < 5; i++) {
    for (j = 0; j < n; j++) {
      A[i][j] = A[i - 1][j] + A[i][j];
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main1>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x1,-0x10(%rbp)
cmpl   $0x5,-0x10(%rbp)
jge    1197 <main1+0x97>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1184 <main1+0x84>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0x14,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x14,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
add    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x14,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1123 <main1+0x23>
jmp    1189 <main1+0x89>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1112 <main1+0x12>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main1>:
test   %esi,%esi
jle    12f0 <main1+0x1f0>
mov    %esi,%r9d
lea    -0x1(%r9),%r8
mov    %r9d,%r10d
and    $0x3,%r10d
cmp    $0x3,%r8
jae    1120 <main1+0x20>
xor    %ecx,%ecx
jmp    1158 <main1+0x58>
mov    %r9d,%r11d
and    $0xfffffffc,%r11d
xor    %ecx,%ecx
nopl   0x0(%rax)
mov    (%rdi,%rcx,4),%edx
mov    0x4(%rdi,%rcx,4),%eax
add    %edx,0x14(%rdi,%rcx,4)
add    %eax,0x18(%rdi,%rcx,4)
mov    0x8(%rdi,%rcx,4),%eax
add    %eax,0x1c(%rdi,%rcx,4)
mov    0xc(%rdi,%rcx,4),%eax
add    %eax,0x20(%rdi,%rcx,4)
add    $0x4,%rcx
cmp    %rcx,%r11
jne    1130 <main1+0x30>
test   %r10,%r10
je     1180 <main1+0x80>
lea    (%rdi,%rcx,4),%rax
add    $0x14,%rax
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
mov    -0x14(%rax,%rcx,4),%edx
add    %edx,(%rax,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r10
jne    1170 <main1+0x70>
test   %esi,%esi
jle    12f0 <main1+0x1f0>
mov    %r9d,%r10d
and    $0x3,%r10d
cmp    $0x3,%r8
jae    1199 <main1+0x99>
xor    %ecx,%ecx
jmp    11d9 <main1+0xd9>
mov    %r9d,%r11d
and    $0xfffffffc,%r11d
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x14(%rdi,%rcx,4),%edx
mov    0x18(%rdi,%rcx,4),%eax
add    %edx,0x28(%rdi,%rcx,4)
add    %eax,0x2c(%rdi,%rcx,4)
mov    0x1c(%rdi,%rcx,4),%eax
add    %eax,0x30(%rdi,%rcx,4)
mov    0x20(%rdi,%rcx,4),%eax
add    %eax,0x34(%rdi,%rcx,4)
add    $0x4,%rcx
cmp    %rcx,%r11
jne    11b0 <main1+0xb0>
test   %r10,%r10
je     1200 <main1+0x100>
lea    (%rdi,%rcx,4),%rax
add    $0x28,%rax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
mov    -0x14(%rax,%rcx,4),%edx
add    %edx,(%rax,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r10
jne    11f0 <main1+0xf0>
test   %esi,%esi
jle    12f0 <main1+0x1f0>
mov    %r9d,%r10d
and    $0x3,%r10d
cmp    $0x3,%r8
jae    1219 <main1+0x119>
xor    %ecx,%ecx
jmp    1259 <main1+0x159>
mov    %r9d,%r11d
and    $0xfffffffc,%r11d
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x28(%rdi,%rcx,4),%edx
mov    0x2c(%rdi,%rcx,4),%eax
add    %edx,0x3c(%rdi,%rcx,4)
add    %eax,0x40(%rdi,%rcx,4)
mov    0x30(%rdi,%rcx,4),%eax
add    %eax,0x44(%rdi,%rcx,4)
mov    0x34(%rdi,%rcx,4),%eax
add    %eax,0x48(%rdi,%rcx,4)
add    $0x4,%rcx
cmp    %rcx,%r11
jne    1230 <main1+0x130>
test   %r10,%r10
je     1280 <main1+0x180>
lea    (%rdi,%rcx,4),%rax
add    $0x3c,%rax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
mov    -0x14(%rax,%rcx,4),%edx
add    %edx,(%rax,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r10
jne    1270 <main1+0x170>
test   %esi,%esi
jle    12f0 <main1+0x1f0>
mov    %r9d,%edx
and    $0x3,%edx
cmp    $0x3,%r8
jae    1294 <main1+0x194>
xor    %ecx,%ecx
jmp    12c9 <main1+0x1c9>
and    $0xfffffffc,%r9d
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
mov    0x3c(%rdi,%rcx,4),%eax
mov    0x40(%rdi,%rcx,4),%esi
add    %eax,0x50(%rdi,%rcx,4)
add    %esi,0x54(%rdi,%rcx,4)
mov    0x44(%rdi,%rcx,4),%eax
add    %eax,0x58(%rdi,%rcx,4)
mov    0x48(%rdi,%rcx,4),%eax
add    %eax,0x5c(%rdi,%rcx,4)
add    $0x4,%rcx
cmp    %rcx,%r9
jne    12a0 <main1+0x1a0>
test   %rdx,%rdx
je     12f0 <main1+0x1f0>
lea    (%rdi,%rcx,4),%rax
add    $0x50,%rax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
mov    -0x14(%rax,%rcx,4),%esi
add    %esi,(%rax,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rdx
jne    12e0 <main1+0x1e0>
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @main1([5 x i32]* %0, i32 %1) {
%3 = alloca [5 x i32]*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store [5 x i32]* %0, [5 x i32]** %3
store i32 %1, i32* %4
store i32 1, i32* %5
br label %7
7: ; preds = %45, %2
%8 = load i32, i32* %5
%9 = icmp slt i32 %8, 5
br i1 %9, label %10, label %48
10: ; preds = %7
store i32 0, i32* %6
br label %11
11: ; preds = %41, %10
%12 = load i32, i32* %6
%13 = load i32, i32* %4
%14 = icmp slt i32 %12, %13
br i1 %14, label %15, label %44
15: ; preds = %11
%16 = load [5 x i32]*, [5 x i32]** %3
%17 = load i32, i32* %5
%18 = sub nsw i32 %17, 1
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [5 x i32], [5 x i32]* %16, i64 %19
%21 = load i32, i32* %6
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [5 x i32], [5 x i32]* %20, i64 0, i64 %22
%24 = load i32, i32* %23
%25 = load [5 x i32]*, [5 x i32]** %3
%26 = load i32, i32* %5
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [5 x i32], [5 x i32]* %25, i64 %27
%29 = load i32, i32* %6
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [5 x i32], [5 x i32]* %28, i64 0, i64 %30
%32 = load i32, i32* %31
%33 = add nsw i32 %24, %32
%34 = load [5 x i32]*, [5 x i32]** %3
%35 = load i32, i32* %5
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [5 x i32], [5 x i32]* %34, i64 %36
%38 = load i32, i32* %6
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds [5 x i32], [5 x i32]* %37, i64 0, i64 %39
store i32 %33, i32* %40
br label %41
41: ; preds = %15
%42 = load i32, i32* %6
%43 = add nsw i32 %42, 1
store i32 %43, i32* %6
br label %11
44: ; preds = %11
br label %45
45: ; preds = %44
%46 = load i32, i32* %5
%47 = add nsw i32 %46, 1
store i32 %47, i32* %5
br label %7
48: ; preds = %7
ret i32 0
}

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