#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 */
int /*<<< orphan*/ getchar();
int /*<<< orphan*/ printf(char *, ...);
void main() {
  printf("Este programa foi escrito por Jessica Cristina Cacau Patricio.\n\n");
  float M[10][10];
  int i, j;
  for (i = 0; i < 10; i++) {
    for (j = 0; j < 10; j++) {
      if (i > j)
        M[i][j] = i * j;
      if (i < j)
        M[i][j] = (j + 1) / (i + 1);
      if (i == j)
        M[i][j] = 10;
    }
  }
  printf("\n\tApresentando UMA MATRIZ\n\n");
  for (i = 0; i < 10; i++) {
    for (j = 0; j < 10; j++) {
      printf(" %3.1f\t", M[i][j]);
    }
    printf("\n");
  }
  printf("\n");
  getchar();
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%rsp
lea    0xed2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x194(%rbp)
cmpl   $0xa,-0x194(%rbp)
jge    1264 <main+0x144>
movl   $0x0,-0x198(%rbp)
cmpl   $0xa,-0x198(%rbp)
jge    124b <main+0x12b>
mov    -0x194(%rbp),%eax
cmp    -0x198(%rbp),%eax
jle    11ab <main+0x8b>
mov    -0x194(%rbp),%eax
imul   -0x198(%rbp),%eax
cvtsi2ss %eax,%xmm0
movslq -0x194(%rbp),%rcx
lea    -0x190(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x198(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x194(%rbp),%eax
cmp    -0x198(%rbp),%eax
jge    11f7 <main+0xd7>
mov    -0x198(%rbp),%eax
add    $0x1,%eax
mov    -0x194(%rbp),%ecx
add    $0x1,%ecx
cltd
idiv   %ecx
cvtsi2ss %eax,%xmm0
movslq -0x194(%rbp),%rcx
lea    -0x190(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x198(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x194(%rbp),%eax
cmp    -0x198(%rbp),%eax
jne    1232 <main+0x112>
movslq -0x194(%rbp),%rcx
lea    -0x190(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x198(%rbp),%rcx
movss  0xdd3(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    1237 <main+0x117>
mov    -0x198(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x198(%rbp)
jmp    115a <main+0x3a>
jmp    1250 <main+0x130>
mov    -0x194(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x194(%rbp)
jmp    1143 <main+0x23>
lea    0xdda(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x194(%rbp)
cmpl   $0xa,-0x194(%rbp)
jge    1309 <main+0x1e9>
movl   $0x0,-0x198(%rbp)
cmpl   $0xa,-0x198(%rbp)
jge    12e7 <main+0x1c7>
movslq -0x194(%rbp),%rcx
lea    -0x190(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x198(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xd95(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x198(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x198(%rbp)
jmp    1293 <main+0x173>
lea    0xd55(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x194(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x194(%rbp)
jmp    127c <main+0x15c>
lea    0xd33(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x0,%al
call   1040 <getchar@plt>
add    $0x1a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x198,%rsp
lea    0xeb7(%rip),%rdi
call   1040 <puts@plt>
mov    %rsp,%rcx
xor    %esi,%esi
jmp    116d <main+0x2d>
nopl   (%rax)
add    $0x28,%rcx
mov    %r8,%rsi
cmp    $0xa,%r8
je     11e3 <main+0xa3>
lea    0x1(%rsi),%r8
lea    (%rsi,%rsi,4),%rax
lea    (%rsp,%rax,8),%rax
lea    (%rax,%rsi,4),%r9
xor    %edi,%edi
xor    %ebx,%ebx
jmp    119c <main+0x5c>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rbx
add    %esi,%edi
cmp    $0xa,%rbx
je     1160 <main+0x20>
cmp    %rbx,%rsi
ja     11b0 <main+0x70>
cmp    %rbx,%rsi
jb     11c1 <main+0x81>
cmp    %rbx,%rsi
jne    1190 <main+0x50>
jmp    11da <main+0x9a>
nopl   (%rax)
xorps  %xmm0,%xmm0
cvtsi2ss %edi,%xmm0
movss  %xmm0,(%rcx,%rbx,4)
cmp    %rbx,%rsi
jae    11a6 <main+0x66>
lea    0x1(%rbx),%eax
xor    %edx,%edx
div    %r8d
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  %xmm0,(%rcx,%rbx,4)
cmp    %rbx,%rsi
jne    1190 <main+0x50>
movl   $0x41200000,(%r9)
jmp    1190 <main+0x50>
lea    0xe5e(%rip),%rdi
call   1040 <puts@plt>
mov    $0x24,%ebx
lea    0xe05(%rip),%r14
nopl   0x0(%rax,%rax,1)
movss  -0x24(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x20(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x1c(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x18(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x14(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x10(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0xc(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x8(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  -0x4(%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movss  (%rsp,%rbx,1),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %r14,%rdi
mov    $0x1,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x28,%rbx
cmp    $0x1b4,%rbx
jne    1200 <main+0xc0>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x198,%rsp
pop    %rbx
pop    %r14
jmp    1060 <getchar@plt>

LLVM IR (-O0):
@.str = [65 x i8] c"Este programa foi escrito por Jessica Cristina Cacau Patricio.\0A\0A\00"
@.str.1 = [28 x i8] c"\0A\09Apresentando UMA MATRIZ\0A\0A\00"
@.str.2 = [8 x i8] c" %3.1f\09\00"
@.str.3 = [2 x i8] c"\0A\00"
define void @main() {
%1 = alloca [10 x [10 x float]]
%2 = alloca i32
%3 = alloca i32
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %2
br label %5
5: ; preds = %60, %0
%6 = load i32, i32* %2
%7 = icmp slt i32 %6, 10
br i1 %7, label %8, label %63
8: ; preds = %5
store i32 0, i32* %3
br label %9
9: ; preds = %56, %8
%10 = load i32, i32* %3
%11 = icmp slt i32 %10, 10
br i1 %11, label %12, label %59
12: ; preds = %9
%13 = load i32, i32* %2
%14 = load i32, i32* %3
%15 = icmp sgt i32 %13, %14
br i1 %15, label %16, label %27
16: ; preds = %12
%17 = load i32, i32* %2
%18 = load i32, i32* %3
%19 = mul nsw i32 %17, %18
%20 = sitofp i32 %19 to float
%21 = load i32, i32* %2
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %22
%24 = load i32, i32* %3
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [10 x float], [10 x float]* %23, i64 0, i64 %25
store float %20, float* %26
br label %27
27: ; preds = %16, %12
%28 = load i32, i32* %2
%29 = load i32, i32* %3
%30 = icmp slt i32 %28, %29
br i1 %30, label %31, label %44
31: ; preds = %27
%32 = load i32, i32* %3
%33 = add nsw i32 %32, 1
%34 = load i32, i32* %2
%35 = add nsw i32 %34, 1
%36 = sdiv i32 %33, %35
%37 = sitofp i32 %36 to float
%38 = load i32, i32* %2
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %39
%41 = load i32, i32* %3
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [10 x float], [10 x float]* %40, i64 0, i64 %42
store float %37, float* %43
br label %44
44: ; preds = %31, %27
%45 = load i32, i32* %2
%46 = load i32, i32* %3
%47 = icmp eq i32 %45, %46
br i1 %47, label %48, label %55
48: ; preds = %44
%49 = load i32, i32* %2
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %50
%52 = load i32, i32* %3
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [10 x float], [10 x float]* %51, i64 0, i64 %53
store float 1.000000e+01, float* %54
br label %55
55: ; preds = %48, %44
br label %56
56: ; preds = %55
%57 = load i32, i32* %3
%58 = add nsw i32 %57, 1
store i32 %58, i32* %3
br label %9
59: ; preds = %9
br label %60
60: ; preds = %59
%61 = load i32, i32* %2
%62 = add nsw i32 %61, 1
store i32 %62, i32* %2
br label %5
63: ; preds = %5
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %65
65: ; preds = %87, %63
%66 = load i32, i32* %2
%67 = icmp slt i32 %66, 10
br i1 %67, label %68, label %90
68: ; preds = %65
store i32 0, i32* %3
br label %69
69: ; preds = %82, %68
%70 = load i32, i32* %3
%71 = icmp slt i32 %70, 10
br i1 %71, label %72, label %85
72: ; preds = %69
%73 = load i32, i32* %2
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %74
%76 = load i32, i32* %3
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [10 x float], [10 x float]* %75, i64 0, i64 %77
%79 = load float, float* %78
%80 = fpext float %79 to double
%81 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %80)
br label %82
82: ; preds = %72
%83 = load i32, i32* %3
%84 = add nsw i32 %83, 1
store i32 %84, i32* %3
br label %69
85: ; preds = %69
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %87
87: ; preds = %85
%88 = load i32, i32* %2
%89 = add nsw i32 %88, 1
store i32 %89, i32* %2
br label %65
90: ; preds = %65
%91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%92 = call i32 (...) @getchar()
ret void
}

LLVM IR (-O2):
@.str.2 = [8 x i8] c" %3.1f\09\00"
@str = [64 x i8] c"Este programa foi escrito por Jessica Cristina Cacau Patricio.\0A\00"
@str.4 = [27 x i8] c"\0A\09Apresentando UMA MATRIZ\0A\00"
define void @main() {
%1 = alloca [10 x [10 x float]]
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str, i64 0, i64 0))
%3 = bitcast [10 x [10 x float]]* %1 to i8*
br label %4
4: ; preds = %0, %31
%5 = phi i64 [ 0, %0 ], [ %6, %31 ]
%6 = add nuw nsw i64 %5, 1
%7 = trunc i64 %6 to i32
%8 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %5, i64 %5
br label %9
9: ; preds = %4, %28
%10 = phi i64 [ 0, %4 ], [ %29, %28 ]
%11 = icmp ugt i64 %5, %10
br i1 %11, label %12, label %17
12: ; preds = %9
%13 = mul nuw nsw i64 %10, %5
%14 = trunc i64 %13 to i32
%15 = sitofp i32 %14 to float
%16 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %5, i64 %10
store float %15, float* %16
br label %17
17: ; preds = %12, %9
%18 = icmp ult i64 %5, %10
br i1 %18, label %19, label %25
19: ; preds = %17
%20 = trunc i64 %10 to i32
%21 = add i32 %20, 1
%22 = udiv i32 %21, %7
%23 = sitofp i32 %22 to float
%24 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %5, i64 %10
store float %23, float* %24
br label %25
25: ; preds = %19, %17
%26 = icmp eq i64 %5, %10
br i1 %26, label %27, label %28
27: ; preds = %25
store float 1.000000e+01, float* %8
br label %28
28: ; preds = %25, %27
%29 = add nuw nsw i64 %10, 1
%30 = icmp eq i64 %29, 10
br i1 %30, label %31, label %9
31: ; preds = %28
%32 = icmp eq i64 %6, 10
br i1 %32, label %33, label %4
33: ; preds = %31
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.4, i64 0, i64 0))
br label %35
35: ; preds = %33, %35
%36 = phi i64 [ 0, %33 ], [ %78, %35 ]
%37 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 0
%38 = load float, float* %37
%39 = fpext float %38 to double
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %39)
%41 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 1
%42 = load float, float* %41
%43 = fpext float %42 to double
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %43)
%45 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 2
%46 = load float, float* %45
%47 = fpext float %46 to double
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %47)
%49 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 3
%50 = load float, float* %49
%51 = fpext float %50 to double
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %51)
%53 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 4
%54 = load float, float* %53
%55 = fpext float %54 to double
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %55)
%57 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 5
%58 = load float, float* %57
%59 = fpext float %58 to double
%60 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %59)
%61 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 6
%62 = load float, float* %61
%63 = fpext float %62 to double
%64 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %63)
%65 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 7
%66 = load float, float* %65
%67 = fpext float %66 to double
%68 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %67)
%69 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 8
%70 = load float, float* %69
%71 = fpext float %70 to double
%72 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %71)
%73 = getelementptr inbounds [10 x [10 x float]], [10 x [10 x float]]* %1, i64 0, i64 %36, i64 9
%74 = load float, float* %73
%75 = fpext float %74 to double
%76 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %75)
%77 = tail call i32 @putchar(i32 10)
%78 = add nuw nsw i64 %36, 1
%79 = icmp eq i64 %78, 10
br i1 %79, label %80, label %35
80: ; preds = %35
%81 = tail call i32 @putchar(i32 10)
%82 = tail call i32 (...) @getchar()
ret void
}