void cleanMatrix(char matrix[][50], int player) {
  for (int i = 0; i < 50; ++i) {
    for (int j = 0; j < 50; ++j) {
      if (matrix[i][j] == 'a' + player || matrix[i][j] == 'A' + player) {
        matrix[i][j] = '0';
      }
    }
  }
}


x86 assembly (clang, -O0):
<cleanMatrix>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
cmpl   $0x32,-0x10(%rbp)
jge    11b4 <cleanMatrix+0xb4>
movl   $0x0,-0x14(%rbp)
cmpl   $0x32,-0x14(%rbp)
jge    11a1 <cleanMatrix+0xa1>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x32,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0xc(%rbp),%ecx
add    $0x61,%ecx
cmp    %ecx,%eax
je     1177 <cleanMatrix+0x77>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x32,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0xc(%rbp),%ecx
add    $0x41,%ecx
cmp    %ecx,%eax
jne    118e <cleanMatrix+0x8e>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x32,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    1193 <cleanMatrix+0x93>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1123 <cleanMatrix+0x23>
jmp    11a6 <cleanMatrix+0xa6>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1112 <cleanMatrix+0x12>
pop    %rbp
ret

x86 assembly (clang, -O2):
<cleanMatrix>:
lea    0x61(%rsi),%r8d
add    $0x41,%esi
movd   %r8d,%xmm0
pshufd $0x0,%xmm0,%xmm0
movd   %esi,%xmm1
pshufd $0x0,%xmm1,%xmm1
xor    %r9d,%r9d
mov    %rdi,%rdx
jmp    114c <cleanMatrix+0x4c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    %rdi,%rax
add    $0x31,%rax
movb   $0x30,(%rax)
add    $0x1,%r9
add    $0x32,%rdx
cmp    $0x32,%r9
je     1258 <cleanMatrix+0x158>
xor    %eax,%eax
jmp    115e <cleanMatrix+0x5e>
add    $0x8,%rax
cmp    $0x30,%rax
je     1220 <cleanMatrix+0x120>
movq   (%rdx,%rax,1),%xmm2
punpcklbw %xmm2,%xmm3
punpcklwd %xmm3,%xmm2
psrad  $0x18,%xmm2
punpckhwd %xmm3,%xmm3
psrad  $0x18,%xmm3
movdqa %xmm0,%xmm4
pcmpeqd %xmm3,%xmm4
movdqa %xmm0,%xmm5
pcmpeqd %xmm2,%xmm5
packssdw %xmm4,%xmm5
pcmpeqd %xmm1,%xmm3
pcmpeqd %xmm1,%xmm2
packssdw %xmm3,%xmm2
por    %xmm5,%xmm2
movd   %xmm2,%ecx
test   $0x1,%cl
je     11aa <cleanMatrix+0xaa>
movb   $0x30,(%rdx,%rax,1)
shr    $0x10,%ecx
test   $0x1,%cl
je     11b7 <cleanMatrix+0xb7>
movb   $0x30,0x1(%rdx,%rax,1)
pextrw $0x2,%xmm2,%ecx
test   $0x1,%cl
je     11c6 <cleanMatrix+0xc6>
movb   $0x30,0x2(%rdx,%rax,1)
pextrw $0x3,%xmm2,%ecx
test   $0x1,%cl
je     11d5 <cleanMatrix+0xd5>
movb   $0x30,0x3(%rdx,%rax,1)
pextrw $0x4,%xmm2,%ecx
test   $0x1,%cl
je     11e4 <cleanMatrix+0xe4>
movb   $0x30,0x4(%rdx,%rax,1)
pextrw $0x5,%xmm2,%ecx
test   $0x1,%cl
je     11f3 <cleanMatrix+0xf3>
movb   $0x30,0x5(%rdx,%rax,1)
pextrw $0x6,%xmm2,%ecx
test   $0x1,%cl
je     1202 <cleanMatrix+0x102>
movb   $0x30,0x6(%rdx,%rax,1)
pextrw $0x7,%xmm2,%ecx
test   $0x1,%cl
je     1150 <cleanMatrix+0x50>
movb   $0x30,0x7(%rdx,%rax,1)
jmp    1150 <cleanMatrix+0x50>
nopw   0x0(%rax,%rax,1)
imul   $0x32,%r9,%rax
movsbl 0x30(%rdi,%rax,1),%ecx
cmp    %ecx,%r8d
je     1232 <cleanMatrix+0x132>
cmp    %ecx,%esi
jne    123d <cleanMatrix+0x13d>
lea    (%rdi,%rax,1),%rcx
add    $0x30,%rcx
movb   $0x30,(%rcx)
movsbl 0x31(%rdi,%rax,1),%ecx
cmp    %ecx,%r8d
je     1130 <cleanMatrix+0x30>
cmp    %ecx,%esi
jne    113a <cleanMatrix+0x3a>
jmp    1130 <cleanMatrix+0x30>
ret

LLVM IR (-O0):
define void @cleanMatrix([50 x i8]* %0, i32 %1) {
%3 = alloca [50 x i8]*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store [50 x i8]* %0, [50 x i8]** %3
store i32 %1, i32* %4
store i32 0, i32* %5
br label %7
7: ; preds = %53, %2
%8 = load i32, i32* %5
%9 = icmp slt i32 %8, 50
br i1 %9, label %10, label %56
10: ; preds = %7
store i32 0, i32* %6
br label %11
11: ; preds = %49, %10
%12 = load i32, i32* %6
%13 = icmp slt i32 %12, 50
br i1 %13, label %14, label %52
14: ; preds = %11
%15 = load [50 x i8]*, [50 x i8]** %3
%16 = load i32, i32* %5
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [50 x i8], [50 x i8]* %15, i64 %17
%19 = load i32, i32* %6
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [50 x i8], [50 x i8]* %18, i64 0, i64 %20
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = load i32, i32* %4
%25 = add nsw i32 97, %24
%26 = icmp eq i32 %23, %25
br i1 %26, label %40, label %27
27: ; preds = %14
%28 = load [50 x i8]*, [50 x i8]** %3
%29 = load i32, i32* %5
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [50 x i8], [50 x i8]* %28, i64 %30
%32 = load i32, i32* %6
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [50 x i8], [50 x i8]* %31, i64 0, i64 %33
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = load i32, i32* %4
%38 = add nsw i32 65, %37
%39 = icmp eq i32 %36, %38
br i1 %39, label %40, label %48
40: ; preds = %27, %14
%41 = load [50 x i8]*, [50 x i8]** %3
%42 = load i32, i32* %5
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [50 x i8], [50 x i8]* %41, i64 %43
%45 = load i32, i32* %6
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [50 x i8], [50 x i8]* %44, i64 0, i64 %46
store i8 48, i8* %47
br label %48
48: ; preds = %40, %27
br label %49
49: ; preds = %48
%50 = load i32, i32* %6
%51 = add nsw i32 %50, 1
store i32 %51, i32* %6
br label %11
52: ; preds = %11
br label %53
53: ; preds = %52
%54 = load i32, i32* %5
%55 = add nsw i32 %54, 1
store i32 %55, i32* %5
br label %7
56: ; preds = %7
ret void
}

LLVM IR (-O2):
define void @cleanMatrix([50 x i8]* nocapture %0, i32 %1) {
%3 = add nsw i32 %1, 97
%4 = add nsw i32 %1, 65
%5 = insertelement <8 x i32> poison, i32 %3, i64 0
%6 = shufflevector <8 x i32> %5, <8 x i32> poison, <8 x i32> zeroinitializer
%7 = insertelement <8 x i32> poison, i32 %4, i64 0
%8 = shufflevector <8 x i32> %7, <8 x i32> poison, <8 x i32> zeroinitializer
br label %9
9: ; preds = %78, %2
%10 = phi i64 [ 0, %2 ], [ %79, %78 ]
br label %11
11: ; preds = %58, %9
%12 = phi i64 [ 0, %9 ], [ %59, %58 ]
%13 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %12
%14 = bitcast i8* %13 to <8 x i8>*
%15 = load <8 x i8>, <8 x i8>* %14
%16 = sext <8 x i8> %15 to <8 x i32>
%17 = icmp eq <8 x i32> %6, %16
%18 = icmp eq <8 x i32> %8, %16
%19 = select <8 x i1> %17, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, <8 x i1> %18
%20 = extractelement <8 x i1> %19, i64 0
br i1 %20, label %21, label %23
21: ; preds = %11
%22 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %12
store i8 48, i8* %22
br label %23
23: ; preds = %21, %11
%24 = extractelement <8 x i1> %19, i64 1
br i1 %24, label %25, label %28
25: ; preds = %23
%26 = or i64 %12, 1
%27 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %26
store i8 48, i8* %27
br label %28
28: ; preds = %25, %23
%29 = extractelement <8 x i1> %19, i64 2
br i1 %29, label %30, label %33
30: ; preds = %28
%31 = or i64 %12, 2
%32 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %31
store i8 48, i8* %32
br label %33
33: ; preds = %30, %28
%34 = extractelement <8 x i1> %19, i64 3
br i1 %34, label %35, label %38
35: ; preds = %33
%36 = or i64 %12, 3
%37 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %36
store i8 48, i8* %37
br label %38
38: ; preds = %35, %33
%39 = extractelement <8 x i1> %19, i64 4
br i1 %39, label %40, label %43
40: ; preds = %38
%41 = or i64 %12, 4
%42 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %41
store i8 48, i8* %42
br label %43
43: ; preds = %40, %38
%44 = extractelement <8 x i1> %19, i64 5
br i1 %44, label %45, label %48
45: ; preds = %43
%46 = or i64 %12, 5
%47 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %46
store i8 48, i8* %47
br label %48
48: ; preds = %45, %43
%49 = extractelement <8 x i1> %19, i64 6
br i1 %49, label %50, label %53
50: ; preds = %48
%51 = or i64 %12, 6
%52 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %51
store i8 48, i8* %52
br label %53
53: ; preds = %50, %48
%54 = extractelement <8 x i1> %19, i64 7
br i1 %54, label %55, label %58
55: ; preds = %53
%56 = or i64 %12, 7
%57 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 %56
store i8 48, i8* %57
br label %58
58: ; preds = %55, %53
%59 = add nuw i64 %12, 8
%60 = icmp eq i64 %59, 48
br i1 %60, label %62, label %11
61: ; preds = %78
ret void
62: ; preds = %58
%63 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 48
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = icmp eq i32 %3, %65
%67 = icmp eq i32 %4, %65
%68 = select i1 %66, i1 true, i1 %67
br i1 %68, label %69, label %70
69: ; preds = %62
store i8 48, i8* %63
br label %70
70: ; preds = %62, %69
%71 = getelementptr inbounds [50 x i8], [50 x i8]* %0, i64 %10, i64 49
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %3, %73
%75 = icmp eq i32 %4, %73
%76 = select i1 %74, i1 true, i1 %75
br i1 %76, label %77, label %78
77: ; preds = %70
store i8 48, i8* %71
br label %78
78: ; preds = %77, %70
%79 = add nuw nsw i64 %10, 1
%80 = icmp eq i64 %79, 50
br i1 %80, label %61, label %9
}