#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 rand();
void posiciona_barcos(char tab[][10]) {
  int i, j, l, c, b = 0;
  do {
    c = rand() % 10;
    if (c > 5) {
      l = rand() % 6;
      if (tab[l][c] != 'X' && tab[l + 1][c] != 'X' && tab[l + 2][c] != 'X' &&
          tab[l + 3][c] != 'X' && tab[l + 4][c] != 'X') {
        for (j = l; j < (l + 5); j++) {
          tab[j][c] = 'X';
        }
        b += 1;
      }
    } else {
      if (c < 6) {
        l = rand() % 10;
        if (tab[l][c + 1] != 'X' && tab[l][c + 2] != 'X' &&
            tab[l][c + 3] != 'X' && tab[l][c + 4] != 'X') {
          for (i = c; i < (c + 5); i++) {
            tab[l][i] = 'X';
          }
          b += 1;
        }
      }
    }
  } while (b < 3);
  b = 0;
  do {
    c = rand() % 10;
    if (c > 7) {
      l = rand() % 8;
      if (tab[l][c] != 'X' && tab[l + 1][c] != 'X' && tab[l + 2][c] != 'X') {
        for (j = l; j < (l + 2); j++) {
          tab[j][c] = 'X';
        }
        b += 1;
      }
    } else {
      if (c < 8) {
        l = rand() % 10;
        if (tab[l][c] != 'X' && tab[l][c + 1] != 'X' && tab[l][c + 2] != 'X') {
          for (i = c; i < (c + 2); i++) {
            tab[l][i] = 'X';
          }
          b += 1;
        }
      }
    }
  } while (b < 4);
}


x86 assembly (clang, -O0):
<posiciona_barcos>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    $0x0,%al
call   1030 <rand@plt>
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x18(%rbp)
cmpl   $0x5,-0x18(%rbp)
jle    124f <posiciona_barcos+0x13f>
mov    $0x0,%al
call   1030 <rand@plt>
mov    $0x6,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     124a <posiciona_barcos+0x13a>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     124a <posiciona_barcos+0x13a>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     124a <posiciona_barcos+0x13a>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     124a <posiciona_barcos+0x13a>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     124a <posiciona_barcos+0x13a>
mov    -0x14(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    -0x14(%rbp),%ecx
add    $0x5,%ecx
cmp    %ecx,%eax
jge    1241 <posiciona_barcos+0x131>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    120b <posiciona_barcos+0xfb>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    134e <posiciona_barcos+0x23e>
cmpl   $0x6,-0x18(%rbp)
jge    1349 <posiciona_barcos+0x239>
mov    $0x0,%al
call   1030 <rand@plt>
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1344 <posiciona_barcos+0x234>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1344 <posiciona_barcos+0x234>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1344 <posiciona_barcos+0x234>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1344 <posiciona_barcos+0x234>
mov    -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x18(%rbp),%ecx
add    $0x5,%ecx
cmp    %ecx,%eax
jge    133b <posiciona_barcos+0x22b>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1305 <posiciona_barcos+0x1f5>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1349 <posiciona_barcos+0x239>
jmp    134e <posiciona_barcos+0x23e>
jmp    1353 <posiciona_barcos+0x243>
cmpl   $0x3,-0x1c(%rbp)
jl     1123 <posiciona_barcos+0x13>
movl   $0x0,-0x1c(%rbp)
mov    $0x0,%al
call   1030 <rand@plt>
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x18(%rbp)
cmpl   $0x7,-0x18(%rbp)
jle    1446 <posiciona_barcos+0x336>
mov    $0x0,%al
call   1030 <rand@plt>
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1441 <posiciona_barcos+0x331>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1441 <posiciona_barcos+0x331>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1441 <posiciona_barcos+0x331>
mov    -0x14(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jge    1438 <posiciona_barcos+0x328>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1402 <posiciona_barcos+0x2f2>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    151b <posiciona_barcos+0x40b>
cmpl   $0x8,-0x18(%rbp)
jge    1516 <posiciona_barcos+0x406>
mov    $0x0,%al
call   1030 <rand@plt>
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1511 <posiciona_barcos+0x401>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1511 <posiciona_barcos+0x401>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x58,%eax
je     1511 <posiciona_barcos+0x401>
mov    -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jge    1508 <posiciona_barcos+0x3f8>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
movb   $0x58,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    14d2 <posiciona_barcos+0x3c2>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1516 <posiciona_barcos+0x406>
jmp    151b <posiciona_barcos+0x40b>
jmp    1520 <posiciona_barcos+0x410>
cmpl   $0x4,-0x1c(%rbp)
jl     1364 <posiciona_barcos+0x254>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<posiciona_barcos>:
push   %rbp
push   %r14
push   %rbx
mov    %rdi,%rbx
xor    %r14d,%r14d
jmp    114a <posiciona_barcos+0x3a>
lea    (%rdx,%rcx,1),%rax
movb   $0x58,(%rax)
movb   $0x58,0xa(%rcx,%rdx,1)
movb   $0x58,0x14(%rcx,%rdx,1)
movb   $0x58,0x1e(%rcx,%rdx,1)
movb   $0x58,0x28(%rcx,%rdx,1)
add    $0x1,%r14d
nopl   0x0(%rax,%rax,1)
cmp    $0x3,%r14d
jge    1288 <posiciona_barcos+0x178>
xor    %eax,%eax
call   1030 <rand@plt>
movslq %eax,%rbp
imul   $0x66666667,%rbp,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%ebp
xor    %eax,%eax
call   1030 <rand@plt>
cmp    $0x6,%ebp
jl     1220 <posiciona_barcos+0x110>
movslq %eax,%rcx
imul   $0x2aaaaaab,%rcx,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x20,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,2),%ecx
sub    %ecx,%eax
movslq %eax,%rdx
mov    %ebp,%ecx
lea    (%rdx,%rdx,4),%rdx
lea    (%rbx,%rdx,2),%rdx
cmpb   $0x58,(%rcx,%rdx,1)
je     1140 <posiciona_barcos+0x30>
lea    0x1(%rax),%esi
movslq %esi,%rsi
lea    (%rsi,%rsi,4),%rsi
lea    (%rbx,%rsi,2),%rsi
cmpb   $0x58,(%rcx,%rsi,1)
je     1140 <posiciona_barcos+0x30>
lea    0x2(%rax),%esi
movslq %esi,%rsi
lea    (%rsi,%rsi,4),%rsi
lea    (%rbx,%rsi,2),%rsi
cmpb   $0x58,(%rcx,%rsi,1)
je     1140 <posiciona_barcos+0x30>
lea    0x3(%rax),%esi
movslq %esi,%rsi
lea    (%rsi,%rsi,4),%rsi
lea    (%rbx,%rsi,2),%rsi
cmpb   $0x58,(%rcx,%rsi,1)
je     1140 <posiciona_barcos+0x30>
add    $0x4,%eax
cltq
lea    (%rax,%rax,4),%rax
lea    (%rbx,%rax,2),%rax
cmpb   $0x58,(%rcx,%rax,1)
jne    111c <posiciona_barcos+0xc>
jmp    1140 <posiciona_barcos+0x30>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
movslq %eax,%rcx
movslq %ebp,%rax
lea    (%rcx,%rcx,4),%rcx
lea    (%rbx,%rcx,2),%rcx
cmpb   $0x58,0x1(%rax,%rcx,1)
je     1140 <posiciona_barcos+0x30>
cmpb   $0x58,0x2(%rax,%rcx,1)
je     1140 <posiciona_barcos+0x30>
cmpb   $0x58,0x3(%rax,%rcx,1)
je     1140 <posiciona_barcos+0x30>
cmpb   $0x58,0x4(%rax,%rcx,1)
je     1140 <posiciona_barcos+0x30>
movb   $0x58,0x4(%rax,%rcx,1)
movl   $0x58585858,(%rax,%rcx,1)
jmp    1137 <posiciona_barcos+0x27>
xor    %r14d,%r14d
jmp    12aa <posiciona_barcos+0x19a>
add    $0x1,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    $0x4,%r14d
jge    1398 <posiciona_barcos+0x288>
xor    %eax,%eax
call   1030 <rand@plt>
movslq %eax,%rbp
imul   $0x66666667,%rbp,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%ebp
xor    %eax,%eax
call   1030 <rand@plt>
cmp    $0x8,%ebp
jl     1340 <posiciona_barcos+0x230>
lea    0x7(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xfffffff8,%ecx
sub    %ecx,%eax
movslq %eax,%rdx
mov    %ebp,%ecx
lea    (%rdx,%rdx,4),%rdx
lea    (%rbx,%rdx,2),%rdx
cmpb   $0x58,(%rcx,%rdx,1)
je     12a0 <posiciona_barcos+0x190>
lea    0x1(%rax),%esi
movslq %esi,%rsi
lea    (%rsi,%rsi,4),%rsi
lea    (%rbx,%rsi,2),%rsi
cmpb   $0x58,(%rcx,%rsi,1)
je     12a0 <posiciona_barcos+0x190>
add    $0x2,%eax
cltq
lea    (%rax,%rax,4),%rax
lea    (%rbx,%rax,2),%rax
cmpb   $0x58,(%rcx,%rax,1)
je     12a0 <posiciona_barcos+0x190>
lea    (%rdx,%rcx,1),%rax
movb   $0x58,(%rax)
movb   $0x58,0xa(%rcx,%rdx,1)
jmp    128d <posiciona_barcos+0x17d>
nopw   0x0(%rax,%rax,1)
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
movslq %eax,%rcx
movslq %ebp,%rax
lea    (%rcx,%rcx,4),%rcx
lea    (%rbx,%rcx,2),%rcx
cmpb   $0x58,(%rax,%rcx,1)
je     12a0 <posiciona_barcos+0x190>
cmpb   $0x58,0x1(%rax,%rcx,1)
je     12a0 <posiciona_barcos+0x190>
cmpb   $0x58,0x2(%rax,%rcx,1)
je     12a0 <posiciona_barcos+0x190>
add    %rax,%rcx
movw   $0x5858,(%rcx)
jmp    128d <posiciona_barcos+0x17d>
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define void @posiciona_barcos([10 x i8]* %0) {
%2 = alloca [10 x i8]*
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store [10 x i8]* %0, [10 x i8]** %2
store i32 0, i32* %7
br label %8
8: ; preds = %173, %1
%9 = call i32 (...) @rand()
%10 = srem i32 %9, 10
store i32 %10, i32* %6
%11 = load i32, i32* %6
%12 = icmp sgt i32 %11, 5
br i1 %12, label %13, label %96
13: ; preds = %8
%14 = call i32 (...) @rand()
%15 = srem i32 %14, 6
store i32 %15, i32* %5
%16 = load [10 x i8]*, [10 x i8]** %2
%17 = load i32, i32* %5
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [10 x i8], [10 x i8]* %16, i64 %18
%20 = load i32, i32* %6
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [10 x i8], [10 x i8]* %19, i64 0, i64 %21
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
%25 = icmp ne i32 %24, 88
br i1 %25, label %26, label %95
26: ; preds = %13
%27 = load [10 x i8]*, [10 x i8]** %2
%28 = load i32, i32* %5
%29 = add nsw i32 %28, 1
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [10 x i8], [10 x i8]* %27, i64 %30
%32 = load i32, i32* %6
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [10 x i8], [10 x i8]* %31, i64 0, i64 %33
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = icmp ne i32 %36, 88
br i1 %37, label %38, label %95
38: ; preds = %26
%39 = load [10 x i8]*, [10 x i8]** %2
%40 = load i32, i32* %5
%41 = add nsw i32 %40, 2
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [10 x i8], [10 x i8]* %39, i64 %42
%44 = load i32, i32* %6
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds [10 x i8], [10 x i8]* %43, i64 0, i64 %45
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = icmp ne i32 %48, 88
br i1 %49, label %50, label %95
50: ; preds = %38
%51 = load [10 x i8]*, [10 x i8]** %2
%52 = load i32, i32* %5
%53 = add nsw i32 %52, 3
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [10 x i8], [10 x i8]* %51, i64 %54
%56 = load i32, i32* %6
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [10 x i8], [10 x i8]* %55, i64 0, i64 %57
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = icmp ne i32 %60, 88
br i1 %61, label %62, label %95
62: ; preds = %50
%63 = load [10 x i8]*, [10 x i8]** %2
%64 = load i32, i32* %5
%65 = add nsw i32 %64, 4
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds [10 x i8], [10 x i8]* %63, i64 %66
%68 = load i32, i32* %6
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [10 x i8], [10 x i8]* %67, i64 0, i64 %69
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = icmp ne i32 %72, 88
br i1 %73, label %74, label %95
74: ; preds = %62
%75 = load i32, i32* %5
store i32 %75, i32* %4
br label %76
76: ; preds = %89, %74
%77 = load i32, i32* %4
%78 = load i32, i32* %5
%79 = add nsw i32 %78, 5
%80 = icmp slt i32 %77, %79
br i1 %80, label %81, label %92
81: ; preds = %76
%82 = load [10 x i8]*, [10 x i8]** %2
%83 = load i32, i32* %4
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [10 x i8], [10 x i8]* %82, i64 %84
%86 = load i32, i32* %6
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [10 x i8], [10 x i8]* %85, i64 0, i64 %87
store i8 88, i8* %88
br label %89
89: ; preds = %81
%90 = load i32, i32* %4
%91 = add nsw i32 %90, 1
store i32 %91, i32* %4
br label %76
92: ; preds = %76
%93 = load i32, i32* %7
%94 = add nsw i32 %93, 1
store i32 %94, i32* %7
br label %95
95: ; preds = %92, %62, %50, %38, %26, %13
br label %172
96: ; preds = %8
%97 = load i32, i32* %6
%98 = icmp slt i32 %97, 6
br i1 %98, label %99, label %171
99: ; preds = %96
%100 = call i32 (...) @rand()
%101 = srem i32 %100, 10
store i32 %101, i32* %5
%102 = load [10 x i8]*, [10 x i8]** %2
%103 = load i32, i32* %5
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds [10 x i8], [10 x i8]* %102, i64 %104
%106 = load i32, i32* %6
%107 = add nsw i32 %106, 1
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds [10 x i8], [10 x i8]* %105, i64 0, i64 %108
%110 = load i8, i8* %109
%111 = sext i8 %110 to i32
%112 = icmp ne i32 %111, 88
br i1 %112, label %113, label %170
113: ; preds = %99
%114 = load [10 x i8]*, [10 x i8]** %2
%115 = load i32, i32* %5
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [10 x i8], [10 x i8]* %114, i64 %116
%118 = load i32, i32* %6
%119 = add nsw i32 %118, 2
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [10 x i8], [10 x i8]* %117, i64 0, i64 %120
%122 = load i8, i8* %121
%123 = sext i8 %122 to i32
%124 = icmp ne i32 %123, 88
br i1 %124, label %125, label %170
125: ; preds = %113
%126 = load [10 x i8]*, [10 x i8]** %2
%127 = load i32, i32* %5
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [10 x i8], [10 x i8]* %126, i64 %128
%130 = load i32, i32* %6
%131 = add nsw i32 %130, 3
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds [10 x i8], [10 x i8]* %129, i64 0, i64 %132
%134 = load i8, i8* %133
%135 = sext i8 %134 to i32
%136 = icmp ne i32 %135, 88
br i1 %136, label %137, label %170
137: ; preds = %125
%138 = load [10 x i8]*, [10 x i8]** %2
%139 = load i32, i32* %5
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds [10 x i8], [10 x i8]* %138, i64 %140
%142 = load i32, i32* %6
%143 = add nsw i32 %142, 4
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [10 x i8], [10 x i8]* %141, i64 0, i64 %144
%146 = load i8, i8* %145
%147 = sext i8 %146 to i32
%148 = icmp ne i32 %147, 88
br i1 %148, label %149, label %170
149: ; preds = %137
%150 = load i32, i32* %6
store i32 %150, i32* %3
br label %151
151: ; preds = %164, %149
%152 = load i32, i32* %3
%153 = load i32, i32* %6
%154 = add nsw i32 %153, 5
%155 = icmp slt i32 %152, %154
br i1 %155, label %156, label %167
156: ; preds = %151
%157 = load [10 x i8]*, [10 x i8]** %2
%158 = load i32, i32* %5
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [10 x i8], [10 x i8]* %157, i64 %159
%161 = load i32, i32* %3
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds [10 x i8], [10 x i8]* %160, i64 0, i64 %162
store i8 88, i8* %163
br label %164
164: ; preds = %156
%165 = load i32, i32* %3
%166 = add nsw i32 %165, 1
store i32 %166, i32* %3
br label %151
167: ; preds = %151
%168 = load i32, i32* %7
%169 = add nsw i32 %168, 1
store i32 %169, i32* %7
br label %170
170: ; preds = %167, %137, %125, %113, %99
br label %171
171: ; preds = %170, %96
br label %172
172: ; preds = %171, %95
br label %173
173: ; preds = %172
%174 = load i32, i32* %7
%175 = icmp slt i32 %174, 3
br i1 %175, label %8, label %176
176: ; preds = %173
store i32 0, i32* %7
br label %177
177: ; preds = %305, %176
%178 = call i32 (...) @rand()
%179 = srem i32 %178, 10
store i32 %179, i32* %6
%180 = load i32, i32* %6
%181 = icmp sgt i32 %180, 7
br i1 %181, label %182, label %241
182: ; preds = %177
%183 = call i32 (...) @rand()
%184 = srem i32 %183, 8
store i32 %184, i32* %5
%185 = load [10 x i8]*, [10 x i8]** %2
%186 = load i32, i32* %5
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [10 x i8], [10 x i8]* %185, i64 %187
%189 = load i32, i32* %6
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds [10 x i8], [10 x i8]* %188, i64 0, i64 %190
%192 = load i8, i8* %191
%193 = sext i8 %192 to i32
%194 = icmp ne i32 %193, 88
br i1 %194, label %195, label %240
195: ; preds = %182
%196 = load [10 x i8]*, [10 x i8]** %2
%197 = load i32, i32* %5
%198 = add nsw i32 %197, 1
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds [10 x i8], [10 x i8]* %196, i64 %199
%201 = load i32, i32* %6
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds [10 x i8], [10 x i8]* %200, i64 0, i64 %202
%204 = load i8, i8* %203
%205 = sext i8 %204 to i32
%206 = icmp ne i32 %205, 88
br i1 %206, label %207, label %240
207: ; preds = %195
%208 = load [10 x i8]*, [10 x i8]** %2
%209 = load i32, i32* %5
%210 = add nsw i32 %209, 2
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds [10 x i8], [10 x i8]* %208, i64 %211
%213 = load i32, i32* %6
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds [10 x i8], [10 x i8]* %212, i64 0, i64 %214
%216 = load i8, i8* %215
%217 = sext i8 %216 to i32
%218 = icmp ne i32 %217, 88
br i1 %218, label %219, label %240
219: ; preds = %207
%220 = load i32, i32* %5
store i32 %220, i32* %4
br label %221
221: ; preds = %234, %219
%222 = load i32, i32* %4
%223 = load i32, i32* %5
%224 = add nsw i32 %223, 2
%225 = icmp slt i32 %222, %224
br i1 %225, label %226, label %237
226: ; preds = %221
%227 = load [10 x i8]*, [10 x i8]** %2
%228 = load i32, i32* %4
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds [10 x i8], [10 x i8]* %227, i64 %229
%231 = load i32, i32* %6
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [10 x i8], [10 x i8]* %230, i64 0, i64 %232
store i8 88, i8* %233
br label %234
234: ; preds = %226
%235 = load i32, i32* %4
%236 = add nsw i32 %235, 1
store i32 %236, i32* %4
br label %221
237: ; preds = %221
%238 = load i32, i32* %7
%239 = add nsw i32 %238, 1
store i32 %239, i32* %7
br label %240
240: ; preds = %237, %207, %195, %182
br label %304
241: ; preds = %177
%242 = load i32, i32* %6
%243 = icmp slt i32 %242, 8
br i1 %243, label %244, label %303
244: ; preds = %241
%245 = call i32 (...) @rand()
%246 = srem i32 %245, 10
store i32 %246, i32* %5
%247 = load [10 x i8]*, [10 x i8]** %2
%248 = load i32, i32* %5
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds [10 x i8], [10 x i8]* %247, i64 %249
%251 = load i32, i32* %6
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds [10 x i8], [10 x i8]* %250, i64 0, i64 %252
%254 = load i8, i8* %253
%255 = sext i8 %254 to i32
%256 = icmp ne i32 %255, 88
br i1 %256, label %257, label %302
257: ; preds = %244
%258 = load [10 x i8]*, [10 x i8]** %2
%259 = load i32, i32* %5
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds [10 x i8], [10 x i8]* %258, i64 %260
%262 = load i32, i32* %6
%263 = add nsw i32 %262, 1
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds [10 x i8], [10 x i8]* %261, i64 0, i64 %264
%266 = load i8, i8* %265
%267 = sext i8 %266 to i32
%268 = icmp ne i32 %267, 88
br i1 %268, label %269, label %302
269: ; preds = %257
%270 = load [10 x i8]*, [10 x i8]** %2
%271 = load i32, i32* %5
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds [10 x i8], [10 x i8]* %270, i64 %272
%274 = load i32, i32* %6
%275 = add nsw i32 %274, 2
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds [10 x i8], [10 x i8]* %273, i64 0, i64 %276
%278 = load i8, i8* %277
%279 = sext i8 %278 to i32
%280 = icmp ne i32 %279, 88
br i1 %280, label %281, label %302
281: ; preds = %269
%282 = load i32, i32* %6
store i32 %282, i32* %3
br label %283
283: ; preds = %296, %281
%284 = load i32, i32* %3
%285 = load i32, i32* %6
%286 = add nsw i32 %285, 2
%287 = icmp slt i32 %284, %286
br i1 %287, label %288, label %299
288: ; preds = %283
%289 = load [10 x i8]*, [10 x i8]** %2
%290 = load i32, i32* %5
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds [10 x i8], [10 x i8]* %289, i64 %291
%293 = load i32, i32* %3
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds [10 x i8], [10 x i8]* %292, i64 0, i64 %294
store i8 88, i8* %295
br label %296
296: ; preds = %288
%297 = load i32, i32* %3
%298 = add nsw i32 %297, 1
store i32 %298, i32* %3
br label %283
299: ; preds = %283
%300 = load i32, i32* %7
%301 = add nsw i32 %300, 1
store i32 %301, i32* %7
br label %302
302: ; preds = %299, %269, %257, %244
br label %303
303: ; preds = %302, %241
br label %304
304: ; preds = %303, %240
br label %305
305: ; preds = %304
%306 = load i32, i32* %7
%307 = icmp slt i32 %306, 4
br i1 %307, label %177, label %308
308: ; preds = %305
ret void
}

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