void drop_the_bomb(int ROW, int COL, char **matrix) {
  int row, col = COL;
  for (row = 0; row < ROW;) {
    if (matrix[row][col] != ' ') {
      matrix[row][col] = ' ';
      row++;
      if (row < ROW - 1) {
        if (matrix[row][col] == ' ') {
          break;
        }
      }
    } else {
      if (matrix[row][col] == ' ') {
        row++;
      }
    }
  }
}


x86 assembly (clang, -O0):
<drop_the_bomb>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11ce <drop_the_bomb+0xce>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     119e <drop_the_bomb+0x9e>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1199 <drop_the_bomb+0x99>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1194 <drop_the_bomb+0x94>
jmp    11ce <drop_the_bomb+0xce>
jmp    1199 <drop_the_bomb+0x99>
jmp    11c9 <drop_the_bomb+0xc9>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    11c4 <drop_the_bomb+0xc4>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11c9 <drop_the_bomb+0xc9>
jmp    111b <drop_the_bomb+0x1b>
pop    %rbp
ret

x86 assembly (clang, -O2):
<drop_the_bomb>:
test   %edi,%edi
jle    113d <drop_the_bomb+0x3d>
movslq %esi,%rax
lea    -0x1(%rdi),%r8d
xor    %esi,%esi
jmp    1117 <drop_the_bomb+0x17>
nop
add    $0x1,%esi
cmp    %edi,%esi
jge    113d <drop_the_bomb+0x3d>
movslq %esi,%rcx
mov    (%rdx,%rcx,8),%rcx
cmpb   $0x20,(%rcx,%rax,1)
je     1110 <drop_the_bomb+0x10>
movb   $0x20,(%rcx,%rax,1)
add    $0x1,%esi
cmp    %r8d,%esi
jge    1113 <drop_the_bomb+0x13>
movslq %esi,%rcx
mov    (%rdx,%rcx,8),%rcx
cmpb   $0x20,(%rcx,%rax,1)
jne    1113 <drop_the_bomb+0x13>
ret

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

LLVM IR (-O2):
define void @drop_the_bomb(i32 %0, i32 %1, i8** nocapture %2) {
%4 = icmp sgt i32 %0, 0
br i1 %4, label %5, label %31
5: ; preds = %3
%6 = sext i32 %1 to i64
%7 = add nsw i32 %0, -1
br label %8
8: ; preds = %5, %28
%9 = phi i32 [ 0, %5 ], [ %29, %28 ]
%10 = sext i32 %9 to i64
%11 = getelementptr inbounds i8*, i8** %2, i64 %10
%12 = load i8*, i8** %11
%13 = getelementptr inbounds i8, i8* %12, i64 %6
%14 = load i8, i8* %13
%15 = icmp eq i8 %14, 32
br i1 %15, label %26, label %16
16: ; preds = %8
store i8 32, i8* %13
%17 = add nsw i32 %9, 1
%18 = icmp slt i32 %17, %7
br i1 %18, label %19, label %28
19: ; preds = %16
%20 = sext i32 %17 to i64
%21 = getelementptr inbounds i8*, i8** %2, i64 %20
%22 = load i8*, i8** %21
%23 = getelementptr inbounds i8, i8* %22, i64 %6
%24 = load i8, i8* %23
%25 = icmp eq i8 %24, 32
br i1 %25, label %31, label %28
26: ; preds = %8
%27 = add nsw i32 %9, 1
br label %28
28: ; preds = %26, %16, %19
%29 = phi i32 [ %17, %19 ], [ %17, %16 ], [ %27, %26 ]
%30 = icmp slt i32 %29, %0
br i1 %30, label %8, label %31
31: ; preds = %28, %19, %3
ret void
}