char **arrange_left(int j_min, char **tab) {
  int tmp;
  int i;
  int j;
  tmp = 0;
  i = 0;
  j = 0;
  while (i < 4) {
    while (tab[i][j + j_min] != '\0') {
      tab[i][j] = tab[i][j + j_min];
      j++;
    }
    tmp = j_min;
    while (tmp > 0 && tmp > 0) {
      tab[i][4 - tmp] = '.';
      tmp--;
    }
    j = 0;
    i++;
  }
  return (tab);
}


x86 assembly (clang, -O0):
<arrange_left>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x4,-0x18(%rbp)
jge    11f7 <arrange_left+0xf7>
jmp    112f <arrange_left+0x2f>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x1c(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     118a <arrange_left+0x8a>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x1c(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    112f <arrange_left+0x2f>
mov    -0x4(%rbp),%eax
mov    %eax,-0x14(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x14(%rbp)
mov    %al,-0x1d(%rbp)
jle    11a9 <arrange_left+0xa9>
cmpl   $0x0,-0x14(%rbp)
setg   %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    11b9 <arrange_left+0xb9>
jmp    11e2 <arrange_left+0xe2>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    $0x4,%ecx
sub    -0x14(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x2e,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1190 <arrange_left+0x90>
movl   $0x0,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1120 <arrange_left+0x20>
mov    -0x10(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<arrange_left>:
mov    %rsi,%rax
movslq %edi,%r8
mov    (%rsi),%rdx
mov    (%rdx,%r8,1),%cl
test   %cl,%cl
je     1136 <arrange_left+0x36>
lea    0x1(%r8),%r9
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
mov    %cl,(%rdx,%rsi,1)
mov    (%rax),%rdx
lea    (%rdx,%r9,1),%rcx
movzbl (%rsi,%rcx,1),%ecx
add    $0x1,%rsi
test   %cl,%cl
jne    1120 <arrange_left+0x20>
test   %edi,%edi
jle    1175 <arrange_left+0x75>
sub    %r8,%rdx
movb   $0x2e,0x4(%rdx)
cmp    $0x1,%edi
je     1175 <arrange_left+0x75>
lea    0x1(%r8),%rcx
mov    $0x5,%edx
sub    %r8,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%rax),%rsi
movb   $0x2e,(%rsi,%rdx,1)
add    $0xffffffffffffffff,%rcx
add    $0x1,%rdx
cmp    $0x2,%rcx
jg     1160 <arrange_left+0x60>
mov    0x8(%rax),%rdx
mov    (%rdx,%r8,1),%cl
test   %cl,%cl
je     11a7 <arrange_left+0xa7>
lea    0x1(%r8),%r9
xor    %esi,%esi
nopw   0x0(%rax,%rax,1)
mov    %cl,(%rdx,%rsi,1)
mov    0x8(%rax),%rdx
lea    (%rdx,%r9,1),%rcx
movzbl (%rsi,%rcx,1),%ecx
add    $0x1,%rsi
test   %cl,%cl
jne    1190 <arrange_left+0x90>
test   %edi,%edi
jle    11e6 <arrange_left+0xe6>
sub    %r8,%rdx
movb   $0x2e,0x4(%rdx)
cmp    $0x1,%edi
je     11e6 <arrange_left+0xe6>
lea    0x1(%r8),%rcx
mov    $0x5,%edx
sub    %r8,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x8(%rax),%rsi
movb   $0x2e,(%rsi,%rdx,1)
add    $0xffffffffffffffff,%rcx
add    $0x1,%rdx
cmp    $0x2,%rcx
jg     11d0 <arrange_left+0xd0>
mov    0x10(%rax),%rdx
mov    (%rdx,%r8,1),%cl
test   %cl,%cl
je     1217 <arrange_left+0x117>
lea    0x1(%r8),%r9
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
mov    %cl,(%rdx,%rsi,1)
mov    0x10(%rax),%rdx
lea    (%rdx,%r9,1),%rcx
movzbl (%rsi,%rcx,1),%ecx
add    $0x1,%rsi
test   %cl,%cl
jne    1200 <arrange_left+0x100>
test   %edi,%edi
jle    1256 <arrange_left+0x156>
sub    %r8,%rdx
movb   $0x2e,0x4(%rdx)
cmp    $0x1,%edi
je     1256 <arrange_left+0x156>
lea    0x1(%r8),%rcx
mov    $0x5,%edx
sub    %r8,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x10(%rax),%rsi
movb   $0x2e,(%rsi,%rdx,1)
add    $0xffffffffffffffff,%rcx
add    $0x1,%rdx
cmp    $0x2,%rcx
jg     1240 <arrange_left+0x140>
mov    0x18(%rax),%rdx
mov    (%rdx,%r8,1),%cl
test   %cl,%cl
je     1287 <arrange_left+0x187>
lea    0x1(%r8),%r9
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
mov    %cl,(%rdx,%rsi,1)
mov    0x18(%rax),%rdx
lea    (%rdx,%r9,1),%rcx
movzbl (%rsi,%rcx,1),%ecx
add    $0x1,%rsi
test   %cl,%cl
jne    1270 <arrange_left+0x170>
test   %edi,%edi
jle    12c6 <arrange_left+0x1c6>
sub    %r8,%rdx
movb   $0x2e,0x4(%rdx)
cmp    $0x1,%edi
je     12c6 <arrange_left+0x1c6>
mov    $0x5,%ecx
sub    %r8,%rcx
add    $0x1,%r8
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x18(%rax),%rdx
movb   $0x2e,(%rdx,%rcx,1)
add    $0xffffffffffffffff,%r8
add    $0x1,%rcx
cmp    $0x2,%r8
jg     12b0 <arrange_left+0x1b0>
ret

LLVM IR (-O0):
define i8** @arrange_left(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i8**
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i32 %0, i32* %3
store i8** %1, i8*** %4
store i32 0, i32* %5
store i32 0, i32* %6
store i32 0, i32* %7
br label %8
8: ; preds = %70, %2
%9 = load i32, i32* %6
%10 = icmp slt i32 %9, 4
br i1 %10, label %11, label %73
11: ; preds = %8
br label %12
12: ; preds = %26, %11
%13 = load i8**, i8*** %4
%14 = load i32, i32* %6
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds i8*, i8** %13, i64 %15
%17 = load i8*, i8** %16
%18 = load i32, i32* %7
%19 = load i32, i32* %3
%20 = add nsw i32 %18, %19
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %17, i64 %21
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
%25 = icmp ne i32 %24, 0
br i1 %25, label %26, label %48
26: ; preds = %12
%27 = load i8**, i8*** %4
%28 = load i32, i32* %6
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8*, i8** %27, i64 %29
%31 = load i8*, i8** %30
%32 = load i32, i32* %7
%33 = load i32, i32* %3
%34 = add nsw i32 %32, %33
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i8, i8* %31, i64 %35
%37 = load i8, i8* %36
%38 = load i8**, i8*** %4
%39 = load i32, i32* %6
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i8*, i8** %38, i64 %40
%42 = load i8*, i8** %41
%43 = load i32, i32* %7
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i8, i8* %42, i64 %44
store i8 %37, i8* %45
%46 = load i32, i32* %7
%47 = add nsw i32 %46, 1
store i32 %47, i32* %7
br label %12
48: ; preds = %12
%49 = load i32, i32* %3
store i32 %49, i32* %5
br label %50
50: ; preds = %58, %48
%51 = load i32, i32* %5
%52 = icmp sgt i32 %51, 0
br i1 %52, label %53, label %56
53: ; preds = %50
%54 = load i32, i32* %5
%55 = icmp sgt i32 %54, 0
br label %56
56: ; preds = %53, %50
%57 = phi i1 [ false, %50 ], [ %55, %53 ]
br i1 %57, label %58, label %70
58: ; preds = %56
%59 = load i8**, i8*** %4
%60 = load i32, i32* %6
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8*, i8** %59, i64 %61
%63 = load i8*, i8** %62
%64 = load i32, i32* %5
%65 = sub nsw i32 4, %64
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %63, i64 %66
store i8 46, i8* %67
%68 = load i32, i32* %5
%69 = add nsw i32 %68, -1
store i32 %69, i32* %5
br label %50
70: ; preds = %56
store i32 0, i32* %7
%71 = load i32, i32* %6
%72 = add nsw i32 %71, 1
store i32 %72, i32* %6
br label %8
73: ; preds = %8
%74 = load i8**, i8*** %4
ret i8** %74
}

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