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


x86 assembly (clang, -O0):
<plot4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
mov    %rax,-0xb0(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
lea    -0x60(%rbp),%rdi
lea    0xeb2(%rip),%rsi
mov    $0x40,%edx
call   1030 <memcpy@plt>
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0xa0(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x98(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x94(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x90(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x0,%eax
mov    %eax,-0x88(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x80(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x78(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x74(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x70(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x68(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x64(%rbp)
movl   $0x10,-0xa4(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xa4(%rbp),%eax
jge    1259 <plot4+0x149>
mov    -0xb0(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movslq -0x60(%rbp,%rcx,4),%rcx
imul   %rdx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movslq -0xa0(%rbp,%rcx,4),%rcx
ff
movb   $0x34,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1211 <plot4+0x101>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plot4>:
mov    %esi,%eax
movslq %edi,%rcx
movb   $0x34,(%rdx,%rcx,1)
movb   $0x34,0x6(%rdx,%rcx,1)
lea    (%rdx,%rax,1),%rsi
movb   $0x34,(%rcx,%rsi,1)
movb   $0x34,0x6(%rcx,%rsi,1)
lea    (%rdx,%rax,2),%rsi
movb   $0x34,(%rcx,%rsi,1)
movb   $0x34,0x6(%rcx,%rsi,1)
lea    (%rax,%rax,2),%rsi
lea    (%rdx,%rsi,1),%rdi
movl   $0x34343434,(%rcx,%rdi,1)
movw   $0x3434,0x4(%rcx,%rdi,1)
movb   $0x34,0x6(%rcx,%rdi,1)
lea    (%rdx,%rax,4),%rdi
movb   $0x34,0x6(%rcx,%rdi,1)
lea    (%rax,%rax,4),%rax
add    %rdx,%rax
movb   $0x34,0x6(%rcx,%rax,1)
lea    (%rdx,%rsi,2),%rax
movb   $0x34,0x6(%rcx,%rax,1)
ret

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

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