void index_conv_enc(int *strchr) {
  int k;
  for (k = 1; k < 3; k++) {
    if ((strchr[k] >= 108) && (strchr[k] < 172)) {
      strchr[k] -= 64;
    } else if (strchr[k] >= 236) {
      strchr[k] -= 128;
    } else {
    }
  }
}


x86 assembly (clang, -O0):
<index_conv_enc>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x1,-0xc(%rbp)
cmpl   $0x3,-0xc(%rbp)
jge    11a1 <index_conv_enc+0xa1>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0x6c,(%rax,%rcx,4)
jl     1156 <index_conv_enc+0x56>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0xac,(%rax,%rcx,4)
jge    1156 <index_conv_enc+0x56>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
sub    $0x40,%edx
mov    %edx,(%rax,%rcx,4)
jmp    118e <index_conv_enc+0x8e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
cmpl   $0xec,(%rax,%rcx,4)
jl     1184 <index_conv_enc+0x84>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
sub    $0x80,%edx
mov    %edx,(%rax,%rcx,4)
jmp    1189 <index_conv_enc+0x89>
jmp    1189 <index_conv_enc+0x89>
jmp    118e <index_conv_enc+0x8e>
jmp    1193 <index_conv_enc+0x93>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    110f <index_conv_enc+0xf>
pop    %rbp
ret

x86 assembly (clang, -O2):
<index_conv_enc>:
mov    0x4(%rdi),%eax
lea    -0x6c(%rax),%edx
mov    $0xffffffc0,%ecx
cmp    $0x40,%edx
jb     111c <index_conv_enc+0x1c>
mov    $0xffffff80,%ecx
cmp    $0xec,%eax
jl     1121 <index_conv_enc+0x21>
add    %ecx,%eax
mov    %eax,0x4(%rdi)
mov    0x8(%rdi),%eax
lea    -0x6c(%rax),%edx
mov    $0xffffffc0,%ecx
cmp    $0x40,%edx
jb     113d <index_conv_enc+0x3d>
mov    $0xffffff80,%ecx
cmp    $0xec,%eax
jl     1142 <index_conv_enc+0x42>
add    %ecx,%eax
mov    %eax,0x8(%rdi)
ret

LLVM IR (-O0):
define void @index_conv_enc(i32* %0) {
%2 = alloca i32*
%3 = alloca i32
store i32* %0, i32** %2
store i32 1, i32* %3
br label %4
4: ; preds = %45, %1
%5 = load i32, i32* %3
%6 = icmp slt i32 %5, 3
br i1 %6, label %7, label %48
7: ; preds = %4
%8 = load i32*, i32** %2
%9 = load i32, i32* %3
%10 = sext i32 %9 to i64
%11 = getelementptr inbounds i32, i32* %8, i64 %10
%12 = load i32, i32* %11
%13 = icmp sge i32 %12, 108
br i1 %13, label %14, label %28
14: ; preds = %7
%15 = load i32*, i32** %2
%16 = load i32, i32* %3
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i32, i32* %15, i64 %17
%19 = load i32, i32* %18
%20 = icmp slt i32 %19, 172
br i1 %20, label %21, label %28
21: ; preds = %14
%22 = load i32*, i32** %2
%23 = load i32, i32* %3
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i32, i32* %22, i64 %24
%26 = load i32, i32* %25
%27 = sub nsw i32 %26, 64
store i32 %27, i32* %25
br label %44
28: ; preds = %14, %7
%29 = load i32*, i32** %2
%30 = load i32, i32* %3
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %29, i64 %31
%33 = load i32, i32* %32
%34 = icmp sge i32 %33, 236
br i1 %34, label %35, label %42
35: ; preds = %28
%36 = load i32*, i32** %2
%37 = load i32, i32* %3
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %36, i64 %38
%40 = load i32, i32* %39
%41 = sub nsw i32 %40, 128
store i32 %41, i32* %39
br label %43
42: ; preds = %28
br label %43
43: ; preds = %42, %35
br label %44
44: ; preds = %43, %21
br label %45
45: ; preds = %44
%46 = load i32, i32* %3
%47 = add nsw i32 %46, 1
store i32 %47, i32* %3
br label %4
48: ; preds = %4
ret void
}

LLVM IR (-O2):
define void @index_conv_enc(i32* nocapture %0) {
%2 = getelementptr inbounds i32, i32* %0, i64 1
%3 = load i32, i32* %2
%4 = add i32 %3, -108
%5 = icmp ult i32 %4, 64
br i1 %5, label %8, label %6
6: ; preds = %1
%7 = icmp sgt i32 %3, 235
br i1 %7, label %8, label %11
8: ; preds = %6, %1
%9 = phi i32 [ -64, %1 ], [ -128, %6 ]
%10 = add nsw i32 %3, %9
store i32 %10, i32* %2
br label %11
11: ; preds = %8, %6
%12 = getelementptr inbounds i32, i32* %0, i64 2
%13 = load i32, i32* %12
%14 = add i32 %13, -108
%15 = icmp ult i32 %14, 64
br i1 %15, label %18, label %16
16: ; preds = %11
%17 = icmp sgt i32 %13, 235
br i1 %17, label %18, label %21
18: ; preds = %11, %16
%19 = phi i32 [ -128, %16 ], [ -64, %11 ]
%20 = add nsw i32 %13, %19
store i32 %20, i32* %12
br label %21
21: ; preds = %18, %16
ret void
}