#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 */
double fabs(double);
double omp_get_wtime();
int /*<<< orphan*/ omp_set_num_threads(int);
int /*<<< orphan*/ printf(char *, ...);
int main() {
  int i, j;
  omp_set_num_threads(1);
  double T[100 + 2][100 + 2], T1[100 + 2][100 + 2];
  for (i = 0; i < 100 + 2; i++) {
    for (j = 0; j < 100 + 2; j++) {
      if (i == 0 || i == 100 + 1 || j == 0 || j == 100 + 1)
        T[i][j] = 1000;
      else
        T[i][j] = 0;
    }
  }
  printf("Tableau initial :\n");
  for (i = 0; i < 100 + 2; i++) {
    for (j = 0; j < 100 + 2; j++) {
      printf("%5.1f ", T[i][j]);
    }
    printf("\n");
  }
  double debut = omp_get_wtime();
  double delta;
  double seuil;
  seuil = 0.000001;
  do {
    delta = 0;
#pragma omp parallel for reduction(+ : delta) private(j)
    for (i = 1; i < 100 + 1; i++) {
      for (j = 1; j < 100 + 1; j++) {
        T1[i][j] = (double)(T[i][j + 1] + T[i][j - 1] + T[i + 1][j] +
                            T[i - 1][j] + T[i][j]) /
                   5;
        delta = delta + fabs(T1[i][j] - T[i][j]);
      }
    }
#pragma omp parallel for private(j)
    for (i = 0; i < 100 + 2; i++) {
      for (j = 0; j < 100 + 2; j++) {
        if (i == 0 || i == 100 + 1 || j == 0 || j == 100 + 1)
          T[i][j] = 1000;
        else
          T[i][j] = T1[i][j];
      }
    }
  } while (delta > seuil);
  double fin = omp_get_wtime();
  printf("Tableau final\n");
  for (i = 0; i < 100 + 2; i++) {
    for (j = 0; j < 100 + 2; j++) {
      printf("%6.2f ", T[i][j]);
    }
    printf("\n");
  }
  double temps = (double)(fin - debut);
  printf("Finished in about %f seconds. \n", temps);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x28a80,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x1,%edi
call   1050 <omp_set_num_threads@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x66,-0x8(%rbp)
jge    1208 <main+0xd8>
movl   $0x0,-0xc(%rbp)
cmpl   $0x66,-0xc(%rbp)
jge    11f5 <main+0xc5>
cmpl   $0x0,-0x8(%rbp)
je     1196 <main+0x66>
cmpl   $0x65,-0x8(%rbp)
je     1196 <main+0x66>
cmpl   $0x0,-0xc(%rbp)
je     1196 <main+0x66>
cmpl   $0x65,-0xc(%rbp)
jne    11c1 <main+0x91>
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  0xe51(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    11e2 <main+0xb2>
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    11e7 <main+0xb7>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1164 <main+0x34>
jmp    11fa <main+0xca>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1153 <main+0x23>
lea    0xe21(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x66,-0x8(%rbp)
jge    128e <main+0x15e>
movl   $0x0,-0xc(%rbp)
cmpl   $0x66,-0xc(%rbp)
jge    1272 <main+0x142>
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xde6(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    122e <main+0xfe>
lea    0xe05(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    121d <main+0xed>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x28a58(%rbp)
ff
movsd  0xd5b(%rip),%xmm0
movsd  %xmm0,-0x28a68(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28a60(%rbp)
ff
movl   $0x1,-0x8(%rbp)
cmpl   $0x65,-0x8(%rbp)
jge    142a <main+0x2fa>
movl   $0x1,-0xc(%rbp)
cmpl   $0x65,-0xc(%rbp)
jge    1417 <main+0x2e7>
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0xc84(%rip),%xmm1
divsd  %xmm1,%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x28a50(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x28a60(%rbp),%xmm0
ff
movslq -0x8(%rbp),%rcx
lea    -0x28a50(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
movaps 0xc27(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28a60(%rbp)
ff
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12d0 <main+0x1a0>
jmp    141c <main+0x2ec>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12bf <main+0x18f>
movl   $0x0,-0x8(%rbp)
cmpl   $0x66,-0x8(%rbp)
jge    1501 <main+0x3d1>
movl   $0x0,-0xc(%rbp)
cmpl   $0x66,-0xc(%rbp)
jge    14ee <main+0x3be>
cmpl   $0x0,-0x8(%rbp)
je     1474 <main+0x344>
cmpl   $0x65,-0x8(%rbp)
je     1474 <main+0x344>
cmpl   $0x0,-0xc(%rbp)
je     1474 <main+0x344>
cmpl   $0x65,-0xc(%rbp)
jne    149f <main+0x36f>
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  0xb73(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    14db <main+0x3ab>
movslq -0x8(%rbp),%rcx
lea    -0x28a50(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    14e0 <main+0x3b0>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1442 <main+0x312>
jmp    14f3 <main+0x3c3>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1431 <main+0x301>
jmp    1506 <main+0x3d6>
movsd  -0x28a60(%rbp),%xmm0
ff
ucomisd -0x28a68(%rbp),%xmm0
ff
ja     12ad <main+0x17d>
mov    $0x0,%al
call   1030 <omp_get_wtime@plt>
movsd  %xmm0,-0x28a70(%rbp)
ff
lea    0xb18(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x66,-0x8(%rbp)
jge    15b1 <main+0x481>
movl   $0x0,-0xc(%rbp)
cmpl   $0x66,-0xc(%rbp)
jge    1595 <main+0x465>
movslq -0x8(%rbp),%rcx
lea    -0x14530(%rbp),%rax
imul   $0x330,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xad9(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1551 <main+0x421>
lea    0xae2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1540 <main+0x410>
movsd  -0x28a70(%rbp),%xmm0
ff
subsd  -0x28a58(%rbp),%xmm0
ff
movsd  %xmm0,-0x28a78(%rbp)
ff
movsd  -0x28a78(%rbp),%xmm0
ff
lea    0xa88(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x28a80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x28a58,%rsp
mov    $0x1,%edi
call   1070 <omp_set_num_threads@plt>
lea    0x18(%rsp),%rax
xor    %ecx,%ecx
movsd  0xe89(%rip),%xmm0
jmp    1190 <main+0x40>
nopl   0x0(%rax)
add    $0x1,%rcx
add    $0x330,%rax
cmp    $0x66,%rcx
je     1203 <main+0xb3>
test   %rcx,%rcx
sete   %bl
cmp    $0x65,%rcx
sete   %dl
or     %bl,%dl
xor    %esi,%esi
xor    %ebx,%ebx
jmp    11c3 <main+0x73>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  %xmm1,(%rax,%rsi,1)
add    $0x2,%rbx
add    $0x10,%rsi
cmp    $0x66,%rbx
je     1180 <main+0x30>
movapd %xmm0,%xmm1
test   %rsi,%rsi
je     11d0 <main+0x80>
xorpd  %xmm1,%xmm1
mov    %rbx,%rdi
or     $0x1,%rdi
movapd %xmm0,%xmm2
cmp    $0x65,%rdi
je     11e5 <main+0x95>
xorpd  %xmm2,%xmm2
movapd %xmm0,%xmm3
test   %dl,%dl
jne    11f1 <main+0xa1>
movapd %xmm1,%xmm3
movsd  %xmm3,-0x8(%rax,%rsi,1)
movapd %xmm0,%xmm1
jne    11b0 <main+0x60>
movapd %xmm2,%xmm1
jmp    11b0 <main+0x60>
lea    0xe54(%rip),%rdi
call   1040 <puts@plt>
lea    0x10(%rsp),%r12
xor    %r15d,%r15d
lea    0xe12(%rip),%r14
xchg   %ax,%ax
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%r12,%rbx,8),%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1060 <printf@plt>
add    $0x1,%rbx
cmp    $0x66,%rbx
jne    1230 <main+0xe0>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%r15
add    $0x330,%r12
cmp    $0x66,%r15
jne    1220 <main+0xd0>
xor    %eax,%eax
call   1050 <omp_get_wtime@plt>
movsd  %xmm0,0x8(%rsp)
lea    -0x318(%rsp),%r9
ff
lea    0x14538(%rsp),%r10
xorpd  %xmm0,%xmm0
mov    $0x1,%esi
lea    0x18(%rsp),%r8
movsd  0xd70(%rip),%xmm1
movapd 0xd80(%rip),%xmm2
movsd  0xd58(%rip),%xmm3
movsd  0xd60(%rip),%xmm4
jmp    12d3 <main+0x183>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
ucomisd %xmm4,%xmm0
mov    $0x1,%esi
xorpd  %xmm0,%xmm0
jbe    13f6 <main+0x2a6>
imul   $0x330,%rsi,%rax
add    $0x1,%rsi
movsd  0x10(%rsp,%rax,1),%xmm6
movsd  0x18(%rsp,%rax,1),%xmm5
lea    (%r9,%rax,1),%rdx
add    %r10,%rax
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movapd %xmm5,%xmm7
movsd  0x338(%rdx,%rdi,8),%xmm5
addsd  %xmm5,%xmm6
addsd  0x660(%rdx,%rdi,8),%xmm6
addsd  (%rdx,%rdi,8),%xmm6
addsd  %xmm7,%xmm6
divsd  %xmm1,%xmm6
movsd  %xmm6,(%rax,%rdi,8)
subsd  %xmm7,%xmm6
andpd  %xmm2,%xmm6
addsd  %xmm6,%xmm0
add    $0x1,%rdi
movapd %xmm7,%xmm6
cmp    $0x64,%rdi
jne    1300 <main+0x1b0>
cmp    $0x65,%rsi
jne    12d3 <main+0x183>
mov    %r8,%rsi
mov    %r10,%rdi
xor    %ebx,%ebx
jmp    137c <main+0x22c>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rbx
add    $0x330,%rdi
add    $0x330,%rsi
cmp    $0x66,%rbx
je     12c0 <main+0x170>
xor    %edx,%edx
xor    %ecx,%ecx
jmp    13a3 <main+0x253>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  %xmm5,(%rsi,%rdx,1)
add    $0x2,%rcx
add    $0x10,%rdx
cmp    $0x66,%rcx
je     1360 <main+0x210>
movapd %xmm3,%xmm5
test   %rdx,%rdx
je     13c5 <main+0x275>
movapd %xmm3,%xmm5
test   %rbx,%rbx
je     13c5 <main+0x275>
movapd %xmm3,%xmm5
cmp    $0x65,%rbx
je     13c5 <main+0x275>
movsd  -0x8(%rdi,%rdx,1),%xmm5
movsd  %xmm5,-0x8(%rsi,%rdx,1)
mov    %rcx,%rax
or     $0x1,%rax
movapd %xmm3,%xmm5
cmp    $0x65,%rax
je     1390 <main+0x240>
movapd %xmm3,%xmm5
test   %rbx,%rbx
je     1390 <main+0x240>
movapd %xmm3,%xmm5
cmp    $0x65,%rbx
je     1390 <main+0x240>
movsd  (%rdi,%rdx,1),%xmm5
jmp    1390 <main+0x240>
xor    %r14d,%r14d
xor    %eax,%eax
call   1050 <omp_get_wtime@plt>
movsd  %xmm0,(%rsp)
lea    0xc64(%rip),%rdi
call   1040 <puts@plt>
lea    0x10(%rsp),%r12
lea    0xc1a(%rip),%r15
nopl   (%rax)
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%r12,%rbx,8),%xmm0
mov    %r15,%rdi
mov    $0x1,%al
call   1060 <printf@plt>
add    $0x1,%rbx
cmp    $0x66,%rbx
jne    1430 <main+0x2e0>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%r14
add    $0x330,%r12
cmp    $0x66,%r14
jne    1420 <main+0x2d0>
movsd  (%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
lea    0xbc7(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
xor    %eax,%eax
add    $0x28a58,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [19 x i8] c"Tableau initial :\0A\00"
@.str.1 = [7 x i8] c"%5.1f \00"
@.str.2 = [2 x i8] c"\0A\00"
@.str.3 = [15 x i8] c"Tableau final\0A\00"
@.str.4 = [7 x i8] c"%6.2f \00"
@.str.5 = [32 x i8] c"Finished in about %f seconds. \0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca [102 x [102 x double]]
%5 = alloca [102 x [102 x double]]
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
store i32 0, i32* %1
%11 = call i32 @omp_set_num_threads(i32 1)
store i32 0, i32* %2
br label %12
12: ; preds = %50, %0
%13 = load i32, i32* %2
%14 = icmp slt i32 %13, 102
br i1 %14, label %15, label %53
15: ; preds = %12
store i32 0, i32* %3
br label %16
16: ; preds = %46, %15
%17 = load i32, i32* %3
%18 = icmp slt i32 %17, 102
br i1 %18, label %19, label %49
19: ; preds = %16
%20 = load i32, i32* %2
%21 = icmp eq i32 %20, 0
br i1 %21, label %31, label %22
22: ; preds = %19
%23 = load i32, i32* %2
%24 = icmp eq i32 %23, 101
br i1 %24, label %31, label %25
25: ; preds = %22
%26 = load i32, i32* %3
%27 = icmp eq i32 %26, 0
br i1 %27, label %31, label %28
28: ; preds = %25
%29 = load i32, i32* %3
%30 = icmp eq i32 %29, 101
br i1 %30, label %31, label %38
31: ; preds = %28, %25, %22, %19
%32 = load i32, i32* %2
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %33
%35 = load i32, i32* %3
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [102 x double], [102 x double]* %34, i64 0, i64 %36
store double 1.000000e+03, double* %37
br label %45
38: ; preds = %28
%39 = load i32, i32* %2
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %40
%42 = load i32, i32* %3
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [102 x double], [102 x double]* %41, i64 0, i64 %43
store double 0.000000e+00, double* %44
br label %45
45: ; preds = %38, %31
br label %46
46: ; preds = %45
%47 = load i32, i32* %3
%48 = add nsw i32 %47, 1
store i32 %48, i32* %3
br label %16
49: ; preds = %16
br label %50
50: ; preds = %49
%51 = load i32, i32* %2
%52 = add nsw i32 %51, 1
store i32 %52, i32* %2
br label %12
53: ; preds = %12
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %2
br label %55
55: ; preds = %76, %53
%56 = load i32, i32* %2
%57 = icmp slt i32 %56, 102
br i1 %57, label %58, label %79
58: ; preds = %55
store i32 0, i32* %3
br label %59
59: ; preds = %71, %58
%60 = load i32, i32* %3
%61 = icmp slt i32 %60, 102
br i1 %61, label %62, label %74
62: ; preds = %59
%63 = load i32, i32* %2
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %64
%66 = load i32, i32* %3
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds [102 x double], [102 x double]* %65, i64 0, i64 %67
%69 = load double, double* %68
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), double %69)
br label %71
71: ; preds = %62
%72 = load i32, i32* %3
%73 = add nsw i32 %72, 1
store i32 %73, i32* %3
br label %59
74: ; preds = %59
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
br label %76
76: ; preds = %74
%77 = load i32, i32* %2
%78 = add nsw i32 %77, 1
store i32 %78, i32* %2
br label %55
79: ; preds = %55
%80 = call double (...) @omp_get_wtime()
store double %80, double* %6
store double 0x3EB0C6F7A0B5ED8D, double* %8
br label %81
81: ; preds = %215, %79
store double 0.000000e+00, double* %7
store i32 1, i32* %2
br label %82
82: ; preds = %162, %81
%83 = load i32, i32* %2
%84 = icmp slt i32 %83, 101
br i1 %84, label %85, label %165
85: ; preds = %82
store i32 1, i32* %3
br label %86
86: ; preds = %158, %85
%87 = load i32, i32* %3
%88 = icmp slt i32 %87, 101
br i1 %88, label %89, label %161
89: ; preds = %86
%90 = load i32, i32* %2
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %91
%93 = load i32, i32* %3
%94 = add nsw i32 %93, 1
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [102 x double], [102 x double]* %92, i64 0, i64 %95
%97 = load double, double* %96
%98 = load i32, i32* %2
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %99
%101 = load i32, i32* %3
%102 = sub nsw i32 %101, 1
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [102 x double], [102 x double]* %100, i64 0, i64 %103
%105 = load double, double* %104
%106 = fadd double %97, %105
%107 = load i32, i32* %2
%108 = add nsw i32 %107, 1
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %109
%111 = load i32, i32* %3
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [102 x double], [102 x double]* %110, i64 0, i64 %112
%114 = load double, double* %113
%115 = fadd double %106, %114
%116 = load i32, i32* %2
%117 = sub nsw i32 %116, 1
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %118
%120 = load i32, i32* %3
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [102 x double], [102 x double]* %119, i64 0, i64 %121
%123 = load double, double* %122
%124 = fadd double %115, %123
%125 = load i32, i32* %2
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %126
%128 = load i32, i32* %3
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds [102 x double], [102 x double]* %127, i64 0, i64 %129
%131 = load double, double* %130
%132 = fadd double %124, %131
%133 = fdiv double %132, 5.000000e+00
%134 = load i32, i32* %2
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %5, i64 0, i64 %135
%137 = load i32, i32* %3
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds [102 x double], [102 x double]* %136, i64 0, i64 %138
store double %133, double* %139
%140 = load double, double* %7
%141 = load i32, i32* %2
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %5, i64 0, i64 %142
%144 = load i32, i32* %3
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds [102 x double], [102 x double]* %143, i64 0, i64 %145
%147 = load double, double* %146
%148 = load i32, i32* %2
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %149
%151 = load i32, i32* %3
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds [102 x double], [102 x double]* %150, i64 0, i64 %152
%154 = load double, double* %153
%155 = fsub double %147, %154
%156 = call double @llvm.fabs.f64(double %155)
%157 = fadd double %140, %156
store double %157, double* %7
br label %158
158: ; preds = %89
%159 = load i32, i32* %3
%160 = add nsw i32 %159, 1
store i32 %160, i32* %3
br label %86
161: ; preds = %86
br label %162
162: ; preds = %161
%163 = load i32, i32* %2
%164 = add nsw i32 %163, 1
store i32 %164, i32* %2
br label %82
165: ; preds = %82
store i32 0, i32* %2
br label %166
166: ; preds = %211, %165
%167 = load i32, i32* %2
%168 = icmp slt i32 %167, 102
br i1 %168, label %169, label %214
169: ; preds = %166
store i32 0, i32* %3
br label %170
170: ; preds = %207, %169
%171 = load i32, i32* %3
%172 = icmp slt i32 %171, 102
br i1 %172, label %173, label %210
173: ; preds = %170
%174 = load i32, i32* %2
%175 = icmp eq i32 %174, 0
br i1 %175, label %185, label %176
176: ; preds = %173
%177 = load i32, i32* %2
%178 = icmp eq i32 %177, 101
br i1 %178, label %185, label %179
179: ; preds = %176
%180 = load i32, i32* %3
%181 = icmp eq i32 %180, 0
br i1 %181, label %185, label %182
182: ; preds = %179
%183 = load i32, i32* %3
%184 = icmp eq i32 %183, 101
br i1 %184, label %185, label %192
185: ; preds = %182, %179, %176, %173
%186 = load i32, i32* %2
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %187
%189 = load i32, i32* %3
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds [102 x double], [102 x double]* %188, i64 0, i64 %190
store double 1.000000e+03, double* %191
br label %206
192: ; preds = %182
%193 = load i32, i32* %2
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %5, i64 0, i64 %194
%196 = load i32, i32* %3
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds [102 x double], [102 x double]* %195, i64 0, i64 %197
%199 = load double, double* %198
%200 = load i32, i32* %2
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %201
%203 = load i32, i32* %3
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [102 x double], [102 x double]* %202, i64 0, i64 %204
store double %199, double* %205
br label %206
206: ; preds = %192, %185
br label %207
207: ; preds = %206
%208 = load i32, i32* %3
%209 = add nsw i32 %208, 1
store i32 %209, i32* %3
br label %170
210: ; preds = %170
br label %211
211: ; preds = %210
%212 = load i32, i32* %2
%213 = add nsw i32 %212, 1
store i32 %213, i32* %2
br label %166
214: ; preds = %166
br label %215
215: ; preds = %214
%216 = load double, double* %7
%217 = load double, double* %8
%218 = fcmp ogt double %216, %217
br i1 %218, label %81, label %219
219: ; preds = %215
%220 = call double (...) @omp_get_wtime()
store double %220, double* %9
%221 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %2
br label %222
222: ; preds = %243, %219
%223 = load i32, i32* %2
%224 = icmp slt i32 %223, 102
br i1 %224, label %225, label %246
225: ; preds = %222
store i32 0, i32* %3
br label %226
226: ; preds = %238, %225
%227 = load i32, i32* %3
%228 = icmp slt i32 %227, 102
br i1 %228, label %229, label %241
229: ; preds = %226
%230 = load i32, i32* %2
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %4, i64 0, i64 %231
%233 = load i32, i32* %3
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds [102 x double], [102 x double]* %232, i64 0, i64 %234
%236 = load double, double* %235
%237 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), double %236)
br label %238
238: ; preds = %229
%239 = load i32, i32* %3
%240 = add nsw i32 %239, 1
store i32 %240, i32* %3
br label %226
241: ; preds = %226
%242 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
br label %243
243: ; preds = %241
%244 = load i32, i32* %2
%245 = add nsw i32 %244, 1
store i32 %245, i32* %2
br label %222
246: ; preds = %222
%247 = load double, double* %9
%248 = load double, double* %6
%249 = fsub double %247, %248
store double %249, double* %10
%250 = load double, double* %10
%251 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.5, i64 0, i64 0), double %250)
ret i32 0
}

LLVM IR (-O2):
@.str.1 = [7 x i8] c"%5.1f \00"
@.str.4 = [7 x i8] c"%6.2f \00"
@.str.5 = [32 x i8] c"Finished in about %f seconds. \0A\00"
@str = [18 x i8] c"Tableau initial :\00"
@str.6 = [14 x i8] c"Tableau final\00"
define i32 @main() {
%1 = alloca [102 x [102 x double]]
%2 = alloca [102 x [102 x double]]
%3 = tail call i32 @omp_set_num_threads(i32 1)
%4 = bitcast [102 x [102 x double]]* %1 to i8*
%5 = bitcast [102 x [102 x double]]* %2 to i8*
br label %6
6: ; preds = %0, %24
%7 = phi i64 [ 0, %0 ], [ %25, %24 ]
%8 = icmp eq i64 %7, 0
%9 = icmp eq i64 %7, 101
%10 = or i1 %8, %9
br label %11
11: ; preds = %11, %6
%12 = phi i64 [ 0, %6 ], [ %22, %11 ]
%13 = icmp eq i64 %12, 0
%14 = select i1 %10, i1 true, i1 %13
%15 = select i1 %14, double 1.000000e+03, double 0.000000e+00
%16 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %7, i64 %12
store double %15, double* %16
%17 = or i64 %12, 1
%18 = icmp eq i64 %17, 101
%19 = select i1 %10, i1 true, i1 %18
%20 = select i1 %19, double 1.000000e+03, double 0.000000e+00
%21 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %7, i64 %17
store double %20, double* %21
%22 = add nuw nsw i64 %12, 2
%23 = icmp eq i64 %22, 102
br i1 %23, label %24, label %11
24: ; preds = %11
%25 = add nuw nsw i64 %7, 1
%26 = icmp eq i64 %25, 102
br i1 %26, label %27, label %6
27: ; preds = %24
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str, i64 0, i64 0))
br label %29
29: ; preds = %27, %38
%30 = phi i64 [ 0, %27 ], [ %40, %38 ]
br label %31
31: ; preds = %29, %31
%32 = phi i64 [ 0, %29 ], [ %36, %31 ]
%33 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %30, i64 %32
%34 = load double, double* %33
%35 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), double %34)
%36 = add nuw nsw i64 %32, 1
%37 = icmp eq i64 %36, 102
br i1 %37, label %38, label %31
38: ; preds = %31
%39 = tail call i32 @putchar(i32 10)
%40 = add nuw nsw i64 %30, 1
%41 = icmp eq i64 %40, 102
br i1 %41, label %42, label %29
42: ; preds = %38
%43 = tail call double (...) @omp_get_wtime()
br label %44
44: ; preds = %77, %42
%45 = phi i64 [ 1, %42 ], [ %78, %77 ]
%46 = phi double [ 0.000000e+00, %42 ], [ %79, %77 ]
%47 = add nuw nsw i64 %45, 1
%48 = add nsw i64 %45, -1
%49 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %45, i64 0
%50 = load double, double* %49
%51 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %45, i64 1
%52 = load double, double* %51
br label %53
53: ; preds = %44, %53
%54 = phi double [ %52, %44 ], [ %60, %53 ]
%55 = phi double [ %50, %44 ], [ %54, %53 ]
%56 = phi i64 [ 1, %44 ], [ %58, %53 ]
%57 = phi double [ %46, %44 ], [ %73, %53 ]
%58 = add nuw nsw i64 %56, 1
%59 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %45, i64 %58
%60 = load double, double* %59
%61 = fadd double %60, %55
%62 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %47, i64 %56
%63 = load double, double* %62
%64 = fadd double %61, %63
%65 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %48, i64 %56
%66 = load double, double* %65
%67 = fadd double %64, %66
%68 = fadd double %67, %54
%69 = fdiv double %68, 5.000000e+00
%70 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %2, i64 0, i64 %45, i64 %56
store double %69, double* %70
%71 = fsub double %69, %54
%72 = tail call double @llvm.fabs.f64(double %71)
%73 = fadd double %57, %72
%74 = icmp eq i64 %58, 101
br i1 %74, label %75, label %53
75: ; preds = %53
%76 = icmp eq i64 %47, 101
br i1 %76, label %80, label %77
77: ; preds = %75, %108
%78 = phi i64 [ %47, %75 ], [ 1, %108 ]
%79 = phi double [ %73, %75 ], [ 0.000000e+00, %108 ]
br label %44
80: ; preds = %75, %105
%81 = phi i64 [ %106, %105 ], [ 0, %75 ]
br label %82
82: ; preds = %100, %80
%83 = phi i64 [ 0, %80 ], [ %103, %100 ]
%84 = icmp eq i64 %83, 0
%85 = freeze i1 %84
br i1 %85, label %90, label %86
86: ; preds = %82
switch i64 %81, label %87 [
i64 101, label %90
i64 0, label %90
]
87: ; preds = %86
%88 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %2, i64 0, i64 %81, i64 %83
%89 = load double, double* %88
br label %90
90: ; preds = %86, %86, %82, %87
%91 = phi double [ %89, %87 ], [ 1.000000e+03, %86 ], [ 1.000000e+03, %82 ], [ 1.000000e+03, %86 ]
%92 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %81, i64 %83
store double %91, double* %92
%93 = or i64 %83, 1
%94 = icmp eq i64 %93, 101
%95 = freeze i1 %94
br i1 %95, label %100, label %96
96: ; preds = %90
switch i64 %81, label %97 [
i64 101, label %100
i64 0, label %100
]
97: ; preds = %96
%98 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %2, i64 0, i64 %81, i64 %93
%99 = load double, double* %98
br label %100
100: ; preds = %96, %96, %90, %97
%101 = phi double [ %99, %97 ], [ 1.000000e+03, %96 ], [ 1.000000e+03, %90 ], [ 1.000000e+03, %96 ]
%102 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %81, i64 %93
store double %101, double* %102
%103 = add nuw nsw i64 %83, 2
%104 = icmp eq i64 %103, 102
br i1 %104, label %105, label %82
105: ; preds = %100
%106 = add nuw nsw i64 %81, 1
%107 = icmp eq i64 %106, 102
br i1 %107, label %108, label %80
108: ; preds = %105
%109 = fcmp ogt double %73, 0x3EB0C6F7A0B5ED8D
br i1 %109, label %77, label %110
110: ; preds = %108
%111 = tail call double (...) @omp_get_wtime()
%112 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.6, i64 0, i64 0))
br label %113
113: ; preds = %110, %122
%114 = phi i64 [ 0, %110 ], [ %124, %122 ]
br label %115
115: ; preds = %113, %115
%116 = phi i64 [ 0, %113 ], [ %120, %115 ]
%117 = getelementptr inbounds [102 x [102 x double]], [102 x [102 x double]]* %1, i64 0, i64 %114, i64 %116
%118 = load double, double* %117
%119 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), double %118)
%120 = add nuw nsw i64 %116, 1
%121 = icmp eq i64 %120, 102
br i1 %121, label %122, label %115
122: ; preds = %115
%123 = tail call i32 @putchar(i32 10)
%124 = add nuw nsw i64 %114, 1
%125 = icmp eq i64 %124, 102
br i1 %125, label %126, label %113
126: ; preds = %122
%127 = fsub double %111, %43
%128 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.5, i64 0, i64 0), double %127)
ret i32 0
}