void plot2(int posicao, int colunas, char matriz[7][colunas]) {
  int cx = 0;
  int cy = 0;
  int p = posicao;
  int x[] = {0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6};
  int y[] = {p + 1, p + 2, p + 3, p + 4, p + 5, p,     p + 6, p + 5, p + 4,
             p + 3, p + 2, p,     p + 1, p + 2, p + 3, p + 4, p + 5, p + 6};
  int points = sizeof(x) / sizeof(int);
  for (cx = 0; cx < points; ++cx) {
    matriz[x[cx]][y[cx]] = '2';
  }
}


x86 assembly (clang, -O0):
<plot2>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
mov    %rax,-0xd0(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
lea    -0x70(%rbp),%rdi
lea    0xeb2(%rip),%rsi
mov    $0x48,%edx
call   1030 <memcpy@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xbc(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0xb8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0xb4(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0xb0(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0xa8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0xa0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x98(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x88(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x84(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x80(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x7c(%rbp)
movl   $0x12,-0xc4(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jge    127d <plot2+0x16d>
mov    -0xd0(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movslq -0x70(%rbp,%rcx,4),%rcx
imul   %rdx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movslq -0xc0(%rbp,%rcx,4),%rcx
ff
movb   $0x32,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1235 <plot2+0x125>
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plot2>:
mov    %esi,%eax
movslq %edi,%rcx
movl   $0x32323232,0x1(%rcx,%rdx,1)
32
movb   $0x32,0x5(%rdx,%rcx,1)
lea    (%rdx,%rax,1),%rsi
movb   $0x32,(%rcx,%rsi,1)
movb   $0x32,0x6(%rcx,%rsi,1)
lea    (%rdx,%rax,2),%rsi
movb   $0x32,0x5(%rcx,%rsi,1)
lea    (%rax,%rax,2),%rsi
lea    (%rdx,%rsi,1),%rdi
movb   $0x32,0x4(%rcx,%rdi,1)
lea    (%rdx,%rax,4),%rdi
movb   $0x32,0x3(%rcx,%rdi,1)
lea    (%rax,%rax,4),%rax
add    %rdx,%rax
movb   $0x32,0x2(%rcx,%rax,1)
lea    (%rdx,%rsi,2),%rax
movl   $0x32323232,(%rcx,%rax,1)
movw   $0x3232,0x4(%rcx,%rax,1)
movb   $0x32,0x6(%rcx,%rax,1)
ret

LLVM IR (-O0):
@__const.plot2.x = [18 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6]
define void @plot2(i32 %0, i32 %1, i8* %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca [18 x i32]
%11 = alloca [18 x i32]
%12 = alloca i32
store i32 %0, i32* %4
store i32 %1, i32* %5
store i8* %2, i8** %6
%13 = load i32, i32* %5
%14 = zext i32 %13 to i64
store i32 0, i32* %7
store i32 0, i32* %8
%15 = load i32, i32* %4
store i32 %15, i32* %9
%16 = bitcast [18 x i32]* %10 to i8*
%17 = getelementptr inbounds [18 x i32], [18 x i32]* %11, i64 0, i64 0
%18 = load i32, i32* %9
%19 = add nsw i32 %18, 1
store i32 %19, i32* %17
%20 = getelementptr inbounds i32, i32* %17, i64 1
%21 = load i32, i32* %9
%22 = add nsw i32 %21, 2
store i32 %22, i32* %20
%23 = getelementptr inbounds i32, i32* %20, i64 1
%24 = load i32, i32* %9
%25 = add nsw i32 %24, 3
store i32 %25, i32* %23
%26 = getelementptr inbounds i32, i32* %23, i64 1
%27 = load i32, i32* %9
%28 = add nsw i32 %27, 4
store i32 %28, i32* %26
%29 = getelementptr inbounds i32, i32* %26, i64 1
%30 = load i32, i32* %9
%31 = add nsw i32 %30, 5
store i32 %31, i32* %29
%32 = getelementptr inbounds i32, i32* %29, i64 1
%33 = load i32, i32* %9
store i32 %33, i32* %32
%34 = getelementptr inbounds i32, i32* %32, i64 1
%35 = load i32, i32* %9
%36 = add nsw i32 %35, 6
store i32 %36, i32* %34
%37 = getelementptr inbounds i32, i32* %34, i64 1
%38 = load i32, i32* %9
%39 = add nsw i32 %38, 5
store i32 %39, i32* %37
%40 = getelementptr inbounds i32, i32* %37, i64 1
%41 = load i32, i32* %9
%42 = add nsw i32 %41, 4
store i32 %42, i32* %40
%43 = getelementptr inbounds i32, i32* %40, i64 1
%44 = load i32, i32* %9
%45 = add nsw i32 %44, 3
store i32 %45, i32* %43
%46 = getelementptr inbounds i32, i32* %43, i64 1
%47 = load i32, i32* %9
%48 = add nsw i32 %47, 2
store i32 %48, i32* %46
%49 = getelementptr inbounds i32, i32* %46, i64 1
%50 = load i32, i32* %9
store i32 %50, i32* %49
%51 = getelementptr inbounds i32, i32* %49, i64 1
%52 = load i32, i32* %9
%53 = add nsw i32 %52, 1
store i32 %53, i32* %51
%54 = getelementptr inbounds i32, i32* %51, i64 1
%55 = load i32, i32* %9
%56 = add nsw i32 %55, 2
store i32 %56, i32* %54
%57 = getelementptr inbounds i32, i32* %54, i64 1
%58 = load i32, i32* %9
%59 = add nsw i32 %58, 3
store i32 %59, i32* %57
%60 = getelementptr inbounds i32, i32* %57, i64 1
%61 = load i32, i32* %9
%62 = add nsw i32 %61, 4
store i32 %62, i32* %60
%63 = getelementptr inbounds i32, i32* %60, i64 1
%64 = load i32, i32* %9
%65 = add nsw i32 %64, 5
store i32 %65, i32* %63
%66 = getelementptr inbounds i32, i32* %63, i64 1
%67 = load i32, i32* %9
%68 = add nsw i32 %67, 6
store i32 %68, i32* %66
store i32 18, i32* %12
store i32 0, i32* %7
br label %69
69: ; preds = %88, %3
%70 = load i32, i32* %7
%71 = load i32, i32* %12
%72 = icmp slt i32 %70, %71
br i1 %72, label %73, label %91
73: ; preds = %69
%74 = load i8*, i8** %6
%75 = load i32, i32* %7
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [18 x i32], [18 x i32]* %10, i64 0, i64 %76
%78 = load i32, i32* %77
%79 = sext i32 %78 to i64
%80 = mul nsw i64 %79, %14
%81 = getelementptr inbounds i8, i8* %74, i64 %80
%82 = load i32, i32* %7
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [18 x i32], [18 x i32]* %11, i64 0, i64 %83
%85 = load i32, i32* %84
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %81, i64 %86
store i8 50, i8* %87
br label %88
88: ; preds = %73
%89 = load i32, i32* %7
%90 = add nsw i32 %89, 1
store i32 %90, i32* %7
br label %69
91: ; preds = %69
ret void
}

LLVM IR (-O2):
define void @plot2(i32 %0, i32 %1, i8* nocapture writeonly %2) {
%4 = zext i32 %1 to i64
%5 = add nsw i32 %0, 1
%6 = add nsw i32 %0, 2
%7 = add nsw i32 %0, 3
%8 = add nsw i32 %0, 4
%9 = add nsw i32 %0, 5
%10 = add nsw i32 %0, 6
%11 = sext i32 %5 to i64
%12 = getelementptr inbounds i8, i8* %2, i64 %11
store i8 50, i8* %12
%13 = sext i32 %6 to i64
%14 = getelementptr inbounds i8, i8* %2, i64 %13
store i8 50, i8* %14
%15 = sext i32 %7 to i64
%16 = getelementptr inbounds i8, i8* %2, i64 %15
store i8 50, i8* %16
%17 = sext i32 %8 to i64
%18 = getelementptr inbounds i8, i8* %2, i64 %17
store i8 50, i8* %18
%19 = sext i32 %9 to i64
%20 = getelementptr inbounds i8, i8* %2, i64 %19
store i8 50, i8* %20
%21 = getelementptr inbounds i8, i8* %2, i64 %4
%22 = sext i32 %0 to i64
%23 = getelementptr inbounds i8, i8* %21, i64 %22
store i8 50, i8* %23
%24 = sext i32 %10 to i64
%25 = getelementptr inbounds i8, i8* %21, i64 %24
store i8 50, i8* %25
%26 = shl nuw nsw i64 %4, 1
%27 = getelementptr inbounds i8, i8* %2, i64 %26
%28 = getelementptr inbounds i8, i8* %27, i64 %19
store i8 50, i8* %28
%29 = mul nuw nsw i64 %4, 3
%30 = getelementptr inbounds i8, i8* %2, i64 %29
%31 = getelementptr inbounds i8, i8* %30, i64 %17
store i8 50, i8* %31
%32 = shl nuw nsw i64 %4, 2
%33 = getelementptr inbounds i8, i8* %2, i64 %32
%34 = getelementptr inbounds i8, i8* %33, i64 %15
store i8 50, i8* %34
%35 = mul nuw nsw i64 %4, 5
%36 = getelementptr inbounds i8, i8* %2, i64 %35
%37 = getelementptr inbounds i8, i8* %36, i64 %13
store i8 50, i8* %37
%38 = mul nuw nsw i64 %4, 6
%39 = getelementptr inbounds i8, i8* %2, i64 %38
%40 = getelementptr inbounds i8, i8* %39, i64 %22
store i8 50, i8* %40
%41 = getelementptr inbounds i8, i8* %39, i64 %11
store i8 50, i8* %41
%42 = getelementptr inbounds i8, i8* %39, i64 %13
store i8 50, i8* %42
%43 = getelementptr inbounds i8, i8* %39, i64 %15
store i8 50, i8* %43
%44 = getelementptr inbounds i8, i8* %39, i64 %17
store i8 50, i8* %44
%45 = getelementptr inbounds i8, i8* %39, i64 %19
store i8 50, i8* %45
%46 = getelementptr inbounds i8, i8* %39, i64 %24
store i8 50, i8* %46
ret void
}