void cleanMatrix(char matrix[25][45], int player) {
  int i, j;
  for (i = 0; i < 25; i++) {
    for (j = 0; j < 45; 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   $0x19,-0x10(%rbp)
jge    11b4 <cleanMatrix+0xb4>
movl   $0x0,-0x14(%rbp)
cmpl   $0x2d,-0x14(%rbp)
jge    11a1 <cleanMatrix+0xa1>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x2d,%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   $0x2d,%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   $0x2d,%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    $0x2c,%rax
movb   $0x30,(%rax)
add    $0x1,%r9
add    $0x2d,%rdx
cmp    $0x19,%r9
je     12a7 <cleanMatrix+0x1a7>
xor    %eax,%eax
jmp    115e <cleanMatrix+0x5e>
add    $0x8,%rax
cmp    $0x28,%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)
lea    (%r9,%r9,8),%rax
lea    (%rax,%rax,4),%rax
movsbl 0x28(%rdi,%rax,1),%ecx
cmp    %ecx,%r8d
je     1236 <cleanMatrix+0x136>
cmp    %ecx,%esi
jne    1241 <cleanMatrix+0x141>
lea    (%rdi,%rax,1),%rcx
add    $0x28,%rcx
movb   $0x30,(%rcx)
movsbl 0x29(%rdi,%rax,1),%ecx
cmp    %ecx,%r8d
je     124f <cleanMatrix+0x14f>
cmp    %ecx,%esi
jne    125a <cleanMatrix+0x15a>
lea    (%rdi,%rax,1),%rcx
add    $0x29,%rcx
movb   $0x30,(%rcx)
movsbl 0x2a(%rdi,%rax,1),%ecx
cmp    %ecx,%r8d
je     1268 <cleanMatrix+0x168>
cmp    %ecx,%esi
jne    1273 <cleanMatrix+0x173>
lea    (%rdi,%rax,1),%rcx
add    $0x2a,%rcx
movb   $0x30,(%rcx)
movsbl 0x2b(%rdi,%rax,1),%ecx
cmp    %ecx,%r8d
je     1281 <cleanMatrix+0x181>
cmp    %ecx,%esi
jne    128c <cleanMatrix+0x18c>
lea    (%rdi,%rax,1),%rcx
add    $0x2b,%rcx
movb   $0x30,(%rcx)
movsbl 0x2c(%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([45 x i8]* %0, i32 %1) {
%3 = alloca [45 x i8]*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store [45 x i8]* %0, [45 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, 25
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, 45
br i1 %13, label %14, label %52
14: ; preds = %11
%15 = load [45 x i8]*, [45 x i8]** %3
%16 = load i32, i32* %5
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [45 x i8], [45 x i8]* %15, i64 %17
%19 = load i32, i32* %6
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [45 x i8], [45 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 [45 x i8]*, [45 x i8]** %3
%29 = load i32, i32* %5
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [45 x i8], [45 x i8]* %28, i64 %30
%32 = load i32, i32* %6
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [45 x i8], [45 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 [45 x i8]*, [45 x i8]** %3
%42 = load i32, i32* %5
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [45 x i8], [45 x i8]* %41, i64 %43
%45 = load i32, i32* %6
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [45 x i8], [45 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([45 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 = %101, %2
%10 = phi i64 [ 0, %2 ], [ %102, %101 ]
br label %11
11: ; preds = %58, %9
%12 = phi i64 [ 0, %9 ], [ %59, %58 ]
%13 = getelementptr inbounds [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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 [45 x i8], [45 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, 40
br i1 %60, label %61, label %11
61: ; preds = %58
%62 = getelementptr inbounds [45 x i8], [45 x i8]* %0, i64 %10, i64 40
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %3, %64
%66 = icmp eq i32 %4, %64
%67 = select i1 %65, i1 true, i1 %66
br i1 %67, label %68, label %69
68: ; preds = %61
store i8 48, i8* %62
br label %69
69: ; preds = %61, %68
%70 = getelementptr inbounds [45 x i8], [45 x i8]* %0, i64 %10, i64 41
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = icmp eq i32 %3, %72
%74 = icmp eq i32 %4, %72
%75 = select i1 %73, i1 true, i1 %74
br i1 %75, label %76, label %77
76: ; preds = %69
store i8 48, i8* %70
br label %77
77: ; preds = %76, %69
%78 = getelementptr inbounds [45 x i8], [45 x i8]* %0, i64 %10, i64 42
%79 = load i8, i8* %78
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %3, %80
%82 = icmp eq i32 %4, %80
%83 = select i1 %81, i1 true, i1 %82
br i1 %83, label %84, label %85
84: ; preds = %77
store i8 48, i8* %78
br label %85
85: ; preds = %84, %77
%86 = getelementptr inbounds [45 x i8], [45 x i8]* %0, i64 %10, i64 43
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = icmp eq i32 %3, %88
%90 = icmp eq i32 %4, %88
%91 = select i1 %89, i1 true, i1 %90
br i1 %91, label %92, label %93
92: ; preds = %85
store i8 48, i8* %86
br label %93
93: ; preds = %92, %85
%94 = getelementptr inbounds [45 x i8], [45 x i8]* %0, i64 %10, i64 44
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %3, %96
%98 = icmp eq i32 %4, %96
%99 = select i1 %97, i1 true, i1 %98
br i1 %99, label %100, label %101
100: ; preds = %93
store i8 48, i8* %94
br label %101
101: ; preds = %100, %93
%102 = add nuw nsw i64 %10, 1
%103 = icmp eq i64 %102, 25
br i1 %103, label %104, label %9
104: ; preds = %101
ret void
}