void findReplaceGrid(short **grid, short findValueMin, short findValueMax,
                     short fillValue) {
  short i, j;
  for (i = 0; i < (100 - 20 - 1); i++) {
    for (j = 0; j < ((31 + 5) - 5 - 2); j++) {
      if (grid[i][j] >= findValueMin && grid[i][j] <= findValueMax) {
        grid[i][j] = fillValue;
      }
    }
  }
}


x86 assembly (clang, -O0):
<findReplaceGrid>:
push   %rbp
mov    %rsp,%rbp
mov    %cx,%ax
mov    %dx,%cx
mov    %si,%dx
mov    %rdi,-0x8(%rbp)
mov    %dx,-0xa(%rbp)
mov    %cx,-0xc(%rbp)
mov    %ax,-0xe(%rbp)
movw   $0x0,-0x10(%rbp)
movswl -0x10(%rbp),%eax
cmp    $0x4f,%eax
jge    11cd <findReplaceGrid+0xcd>
movw   $0x0,-0x12(%rbp)
movswl -0x12(%rbp),%eax
cmp    $0x1d,%eax
jge    11b7 <findReplaceGrid+0xb7>
mov    -0x8(%rbp),%rax
movswq -0x10(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x12(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
movswl -0xa(%rbp),%ecx
cmp    %ecx,%eax
jl     11a1 <findReplaceGrid+0xa1>
mov    -0x8(%rbp),%rax
movswq -0x10(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x12(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
movswl -0xc(%rbp),%ecx
cmp    %ecx,%eax
jg     11a1 <findReplaceGrid+0xa1>
mov    -0xe(%rbp),%dx
mov    -0x8(%rbp),%rax
movswq -0x10(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0x12(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    11a6 <findReplaceGrid+0xa6>
mov    -0x12(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x12(%rbp)
jmp    1136 <findReplaceGrid+0x36>
jmp    11bc <findReplaceGrid+0xbc>
mov    -0x10(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x10(%rbp)
jmp    1123 <findReplaceGrid+0x23>
pop    %rbp
ret

x86 assembly (clang, -O2):
<findReplaceGrid>:
movd   %esi,%xmm0
pshuflw $0x0,%xmm0,%xmm0
pshufd $0x0,%xmm0,%xmm0
movd   %edx,%xmm1
pshuflw $0x0,%xmm1,%xmm1
pshufd $0x0,%xmm1,%xmm1
xor    %r8d,%r8d
pcmpeqd %xmm2,%xmm2
jmp    113e <findReplaceGrid+0x3e>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r8
cmp    $0x4f,%r8
je     1346 <findReplaceGrid+0x246>
mov    (%rdi,%r8,8),%r9
movdqu (%r9),%xmm4
movdqa %xmm0,%xmm3
pcmpgtw %xmm4,%xmm3
pcmpgtw %xmm1,%xmm4
pxor   %xmm2,%xmm4
pandn  %xmm4,%xmm3
movd   %xmm3,%eax
test   $0x1,%al
je     1167 <findReplaceGrid+0x67>
mov    %cx,(%r9)
shr    $0x10,%eax
test   $0x1,%al
je     1173 <findReplaceGrid+0x73>
mov    %cx,0x2(%r9)
pextrw $0x2,%xmm3,%eax
test   $0x1,%al
je     1181 <findReplaceGrid+0x81>
mov    %cx,0x4(%r9)
pextrw $0x3,%xmm3,%eax
test   $0x1,%al
je     118f <findReplaceGrid+0x8f>
mov    %cx,0x6(%r9)
pextrw $0x4,%xmm3,%eax
test   $0x1,%al
je     119d <findReplaceGrid+0x9d>
mov    %cx,0x8(%r9)
pextrw $0x5,%xmm3,%eax
test   $0x1,%al
je     11ab <findReplaceGrid+0xab>
mov    %cx,0xa(%r9)
pextrw $0x6,%xmm3,%eax
test   $0x1,%al
je     11b9 <findReplaceGrid+0xb9>
mov    %cx,0xc(%r9)
pextrw $0x7,%xmm3,%eax
test   $0x1,%al
je     11c7 <findReplaceGrid+0xc7>
mov    %cx,0xe(%r9)
movdqu 0x10(%r9),%xmm4
movdqa %xmm0,%xmm3
pcmpgtw %xmm4,%xmm3
pcmpgtw %xmm1,%xmm4
pxor   %xmm2,%xmm4
pandn  %xmm4,%xmm3
movd   %xmm3,%eax
test   $0x1,%al
je     11ee <findReplaceGrid+0xee>
mov    %cx,0x10(%r9)
shr    $0x10,%eax
test   $0x1,%al
je     11fa <findReplaceGrid+0xfa>
mov    %cx,0x12(%r9)
pextrw $0x2,%xmm3,%eax
test   $0x1,%al
je     1208 <findReplaceGrid+0x108>
mov    %cx,0x14(%r9)
pextrw $0x3,%xmm3,%eax
test   $0x1,%al
je     1216 <findReplaceGrid+0x116>
mov    %cx,0x16(%r9)
pextrw $0x4,%xmm3,%eax
test   $0x1,%al
je     1224 <findReplaceGrid+0x124>
mov    %cx,0x18(%r9)
pextrw $0x5,%xmm3,%eax
test   $0x1,%al
je     1232 <findReplaceGrid+0x132>
mov    %cx,0x1a(%r9)
pextrw $0x6,%xmm3,%eax
test   $0x1,%al
je     1240 <findReplaceGrid+0x140>
mov    %cx,0x1c(%r9)
pextrw $0x7,%xmm3,%eax
test   $0x1,%al
je     124e <findReplaceGrid+0x14e>
mov    %cx,0x1e(%r9)
movdqu 0x20(%r9),%xmm4
movdqa %xmm0,%xmm3
pcmpgtw %xmm4,%xmm3
pcmpgtw %xmm1,%xmm4
pxor   %xmm2,%xmm4
pandn  %xmm4,%xmm3
movd   %xmm3,%eax
test   $0x1,%al
je     1275 <findReplaceGrid+0x175>
mov    %cx,0x20(%r9)
shr    $0x10,%eax
test   $0x1,%al
je     1281 <findReplaceGrid+0x181>
mov    %cx,0x22(%r9)
pextrw $0x2,%xmm3,%eax
test   $0x1,%al
je     128f <findReplaceGrid+0x18f>
mov    %cx,0x24(%r9)
pextrw $0x3,%xmm3,%eax
test   $0x1,%al
je     129d <findReplaceGrid+0x19d>
mov    %cx,0x26(%r9)
pextrw $0x4,%xmm3,%eax
test   $0x1,%al
je     12ab <findReplaceGrid+0x1ab>
mov    %cx,0x28(%r9)
pextrw $0x5,%xmm3,%eax
test   $0x1,%al
je     12b9 <findReplaceGrid+0x1b9>
mov    %cx,0x2a(%r9)
pextrw $0x6,%xmm3,%eax
test   $0x1,%al
je     12c7 <findReplaceGrid+0x1c7>
mov    %cx,0x2c(%r9)
pextrw $0x7,%xmm3,%eax
test   $0x1,%al
je     12d5 <findReplaceGrid+0x1d5>
mov    %cx,0x2e(%r9)
movzwl 0x30(%r9),%eax
cmp    %si,%ax
jl     12e9 <findReplaceGrid+0x1e9>
cmp    %dx,%ax
jg     12e9 <findReplaceGrid+0x1e9>
mov    %cx,0x30(%r9)
movzwl 0x32(%r9),%eax
cmp    %si,%ax
jl     12fd <findReplaceGrid+0x1fd>
cmp    %dx,%ax
jg     12fd <findReplaceGrid+0x1fd>
mov    %cx,0x32(%r9)
movzwl 0x34(%r9),%eax
cmp    %si,%ax
jl     1311 <findReplaceGrid+0x211>
cmp    %dx,%ax
jg     1311 <findReplaceGrid+0x211>
mov    %cx,0x34(%r9)
movzwl 0x36(%r9),%eax
cmp    %si,%ax
jl     1325 <findReplaceGrid+0x225>
cmp    %dx,%ax
jg     1325 <findReplaceGrid+0x225>
mov    %cx,0x36(%r9)
movzwl 0x38(%r9),%eax
cmp    %si,%ax
jl     1130 <findReplaceGrid+0x30>
cmp    %dx,%ax
jg     1130 <findReplaceGrid+0x30>
mov    %cx,0x38(%r9)
jmp    1130 <findReplaceGrid+0x30>
ret

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

LLVM IR (-O2):
define void @findReplaceGrid(i16** nocapture %0, i16 signext %1, i16 signext %2, i16 signext %3) {
%5 = insertelement <8 x i16> poison, i16 %1, i64 0
%6 = shufflevector <8 x i16> %5, <8 x i16> poison, <8 x i32> zeroinitializer
%7 = insertelement <8 x i16> poison, i16 %2, i64 0
%8 = shufflevector <8 x i16> %7, <8 x i16> poison, <8 x i32> zeroinitializer
br label %9
9: ; preds = %4, %159
%10 = phi i64 [ 0, %4 ], [ %160, %159 ]
%11 = getelementptr inbounds i16*, i16** %0, i64 %10
%12 = load i16*, i16** %11
%13 = bitcast i16* %12 to <8 x i16>*
%14 = load <8 x i16>, <8 x i16>* %13
%15 = icmp sge <8 x i16> %14, %6
%16 = icmp sle <8 x i16> %14, %8
%17 = and <8 x i1> %15, %16
%18 = extractelement <8 x i1> %17, i64 0
br i1 %18, label %19, label %20
19: ; preds = %9
store i16 %3, i16* %12
br label %20
20: ; preds = %19, %9
%21 = extractelement <8 x i1> %17, i64 1
br i1 %21, label %22, label %24
22: ; preds = %20
%23 = getelementptr inbounds i16, i16* %12, i64 1
store i16 %3, i16* %23
br label %24
24: ; preds = %22, %20
%25 = extractelement <8 x i1> %17, i64 2
br i1 %25, label %26, label %28
26: ; preds = %24
%27 = getelementptr inbounds i16, i16* %12, i64 2
store i16 %3, i16* %27
br label %28
28: ; preds = %26, %24
%29 = extractelement <8 x i1> %17, i64 3
br i1 %29, label %30, label %32
30: ; preds = %28
%31 = getelementptr inbounds i16, i16* %12, i64 3
store i16 %3, i16* %31
br label %32
32: ; preds = %30, %28
%33 = extractelement <8 x i1> %17, i64 4
br i1 %33, label %34, label %36
34: ; preds = %32
%35 = getelementptr inbounds i16, i16* %12, i64 4
store i16 %3, i16* %35
br label %36
36: ; preds = %34, %32
%37 = extractelement <8 x i1> %17, i64 5
br i1 %37, label %38, label %40
38: ; preds = %36
%39 = getelementptr inbounds i16, i16* %12, i64 5
store i16 %3, i16* %39
br label %40
40: ; preds = %38, %36
%41 = extractelement <8 x i1> %17, i64 6
br i1 %41, label %42, label %44
42: ; preds = %40
%43 = getelementptr inbounds i16, i16* %12, i64 6
store i16 %3, i16* %43
br label %44
44: ; preds = %42, %40
%45 = extractelement <8 x i1> %17, i64 7
br i1 %45, label %46, label %48
46: ; preds = %44
%47 = getelementptr inbounds i16, i16* %12, i64 7
store i16 %3, i16* %47
br label %48
48: ; preds = %46, %44
%49 = getelementptr inbounds i16, i16* %12, i64 8
%50 = bitcast i16* %49 to <8 x i16>*
%51 = load <8 x i16>, <8 x i16>* %50
%52 = icmp sge <8 x i16> %51, %6
%53 = icmp sle <8 x i16> %51, %8
%54 = and <8 x i1> %52, %53
%55 = extractelement <8 x i1> %54, i64 0
br i1 %55, label %56, label %58
56: ; preds = %48
%57 = getelementptr inbounds i16, i16* %12, i64 8
store i16 %3, i16* %57
br label %58
58: ; preds = %56, %48
%59 = extractelement <8 x i1> %54, i64 1
br i1 %59, label %60, label %62
60: ; preds = %58
%61 = getelementptr inbounds i16, i16* %12, i64 9
store i16 %3, i16* %61
br label %62
62: ; preds = %60, %58
%63 = extractelement <8 x i1> %54, i64 2
br i1 %63, label %64, label %66
64: ; preds = %62
%65 = getelementptr inbounds i16, i16* %12, i64 10
store i16 %3, i16* %65
br label %66
66: ; preds = %64, %62
%67 = extractelement <8 x i1> %54, i64 3
br i1 %67, label %68, label %70
68: ; preds = %66
%69 = getelementptr inbounds i16, i16* %12, i64 11
store i16 %3, i16* %69
br label %70
70: ; preds = %68, %66
%71 = extractelement <8 x i1> %54, i64 4
br i1 %71, label %72, label %74
72: ; preds = %70
%73 = getelementptr inbounds i16, i16* %12, i64 12
store i16 %3, i16* %73
br label %74
74: ; preds = %72, %70
%75 = extractelement <8 x i1> %54, i64 5
br i1 %75, label %76, label %78
76: ; preds = %74
%77 = getelementptr inbounds i16, i16* %12, i64 13
store i16 %3, i16* %77
br label %78
78: ; preds = %76, %74
%79 = extractelement <8 x i1> %54, i64 6
br i1 %79, label %80, label %82
80: ; preds = %78
%81 = getelementptr inbounds i16, i16* %12, i64 14
store i16 %3, i16* %81
br label %82
82: ; preds = %80, %78
%83 = extractelement <8 x i1> %54, i64 7
br i1 %83, label %84, label %86
84: ; preds = %82
%85 = getelementptr inbounds i16, i16* %12, i64 15
store i16 %3, i16* %85
br label %86
86: ; preds = %84, %82
%87 = getelementptr inbounds i16, i16* %12, i64 16
%88 = bitcast i16* %87 to <8 x i16>*
%89 = load <8 x i16>, <8 x i16>* %88
%90 = icmp sge <8 x i16> %89, %6
%91 = icmp sle <8 x i16> %89, %8
%92 = and <8 x i1> %90, %91
%93 = extractelement <8 x i1> %92, i64 0
br i1 %93, label %94, label %96
94: ; preds = %86
%95 = getelementptr inbounds i16, i16* %12, i64 16
store i16 %3, i16* %95
br label %96
96: ; preds = %94, %86
%97 = extractelement <8 x i1> %92, i64 1
br i1 %97, label %98, label %100
98: ; preds = %96
%99 = getelementptr inbounds i16, i16* %12, i64 17
store i16 %3, i16* %99
br label %100
100: ; preds = %98, %96
%101 = extractelement <8 x i1> %92, i64 2
br i1 %101, label %102, label %104
102: ; preds = %100
%103 = getelementptr inbounds i16, i16* %12, i64 18
store i16 %3, i16* %103
br label %104
104: ; preds = %102, %100
%105 = extractelement <8 x i1> %92, i64 3
br i1 %105, label %106, label %108
106: ; preds = %104
%107 = getelementptr inbounds i16, i16* %12, i64 19
store i16 %3, i16* %107
br label %108
108: ; preds = %106, %104
%109 = extractelement <8 x i1> %92, i64 4
br i1 %109, label %110, label %112
110: ; preds = %108
%111 = getelementptr inbounds i16, i16* %12, i64 20
store i16 %3, i16* %111
br label %112
112: ; preds = %110, %108
%113 = extractelement <8 x i1> %92, i64 5
br i1 %113, label %114, label %116
114: ; preds = %112
%115 = getelementptr inbounds i16, i16* %12, i64 21
store i16 %3, i16* %115
br label %116
116: ; preds = %114, %112
%117 = extractelement <8 x i1> %92, i64 6
br i1 %117, label %118, label %120
118: ; preds = %116
%119 = getelementptr inbounds i16, i16* %12, i64 22
store i16 %3, i16* %119
br label %120
120: ; preds = %118, %116
%121 = extractelement <8 x i1> %92, i64 7
br i1 %121, label %122, label %124
122: ; preds = %120
%123 = getelementptr inbounds i16, i16* %12, i64 23
store i16 %3, i16* %123
br label %124
124: ; preds = %120, %122
%125 = getelementptr inbounds i16, i16* %12, i64 24
%126 = load i16, i16* %125
%127 = icmp slt i16 %126, %1
%128 = icmp sgt i16 %126, %2
%129 = or i1 %127, %128
br i1 %129, label %131, label %130
130: ; preds = %124
store i16 %3, i16* %125
br label %131
131: ; preds = %124, %130
%132 = getelementptr inbounds i16, i16* %12, i64 25
%133 = load i16, i16* %132
%134 = icmp slt i16 %133, %1
%135 = icmp sgt i16 %133, %2
%136 = or i1 %134, %135
br i1 %136, label %138, label %137
137: ; preds = %131
store i16 %3, i16* %132
br label %138
138: ; preds = %137, %131
%139 = getelementptr inbounds i16, i16* %12, i64 26
%140 = load i16, i16* %139
%141 = icmp slt i16 %140, %1
%142 = icmp sgt i16 %140, %2
%143 = or i1 %141, %142
br i1 %143, label %145, label %144
144: ; preds = %138
store i16 %3, i16* %139
br label %145
145: ; preds = %144, %138
%146 = getelementptr inbounds i16, i16* %12, i64 27
%147 = load i16, i16* %146
%148 = icmp slt i16 %147, %1
%149 = icmp sgt i16 %147, %2
%150 = or i1 %148, %149
br i1 %150, label %152, label %151
151: ; preds = %145
store i16 %3, i16* %146
br label %152
152: ; preds = %151, %145
%153 = getelementptr inbounds i16, i16* %12, i64 28
%154 = load i16, i16* %153
%155 = icmp slt i16 %154, %1
%156 = icmp sgt i16 %154, %2
%157 = or i1 %155, %156
br i1 %157, label %159, label %158
158: ; preds = %152
store i16 %3, i16* %153
br label %159
159: ; preds = %158, %152
%160 = add nuw nsw i64 %10, 1
%161 = icmp eq i64 %160, 79
br i1 %161, label %162, label %9
162: ; preds = %159
ret void
}