char rot1(char encode) {
  if (encode >= 'A' && encode <= 'Y') {
    encode++;
  } else if (encode == 'Z') {
    encode = 'A';
  } else if (encode >= 'a' && encode <= 'y') {
    encode++;
  } else if (encode == 'z') {
    encode = 'a';
  }
  return encode;
}


x86 assembly (clang, -O0):
<rot1>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
cmp    $0x41,%eax
jl     1131 <rot1+0x31>
movsbl -0x1(%rbp),%eax
cmp    $0x59,%eax
jg     1131 <rot1+0x31>
mov    -0x1(%rbp),%al
add    $0x1,%al
mov    %al,-0x1(%rbp)
jmp    118e <rot1+0x8e>
movsbl -0x1(%rbp),%eax
cmp    $0x5a,%eax
jne    1147 <rot1+0x47>
movb   $0x41,-0x1(%rbp)
jmp    1189 <rot1+0x89>
movsbl -0x1(%rbp),%eax
cmp    $0x61,%eax
jl     116e <rot1+0x6e>
movsbl -0x1(%rbp),%eax
cmp    $0x79,%eax
jg     116e <rot1+0x6e>
mov    -0x1(%rbp),%al
add    $0x1,%al
mov    %al,-0x1(%rbp)
jmp    1184 <rot1+0x84>
movsbl -0x1(%rbp),%eax
cmp    $0x7a,%eax
jne    117f <rot1+0x7f>
movb   $0x61,-0x1(%rbp)
jmp    1184 <rot1+0x84>
jmp    1189 <rot1+0x89>
jmp    118e <rot1+0x8e>
movsbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<rot1>:
lea    -0x41(%rdi),%eax
cmp    $0x18,%al
jbe    1116 <rot1+0x16>
mov    $0x41,%al
cmp    $0x5a,%dil
je     112d <rot1+0x2d>
lea    -0x61(%rdi),%eax
cmp    $0x18,%al
ja     111d <rot1+0x1d>
add    $0x1,%dil
mov    %edi,%eax
ret
cmp    $0x7a,%dil
movzbl %dil,%ecx
mov    $0x61,%eax
cmovne %ecx,%eax
ret

LLVM IR (-O0):
define signext i8 @rot1(i8 signext %0) {
%2 = alloca i8
store i8 %0, i8* %2
%3 = load i8, i8* %2
%4 = sext i8 %3 to i32
%5 = icmp sge i32 %4, 65
br i1 %5, label %6, label %13
6: ; preds = %1
%7 = load i8, i8* %2
%8 = sext i8 %7 to i32
%9 = icmp sle i32 %8, 89
br i1 %9, label %10, label %13
10: ; preds = %6
%11 = load i8, i8* %2
%12 = add i8 %11, 1
store i8 %12, i8* %2
br label %37
13: ; preds = %6, %1
%14 = load i8, i8* %2
%15 = sext i8 %14 to i32
%16 = icmp eq i32 %15, 90
br i1 %16, label %17, label %18
17: ; preds = %13
store i8 65, i8* %2
br label %36
18: ; preds = %13
%19 = load i8, i8* %2
%20 = sext i8 %19 to i32
%21 = icmp sge i32 %20, 97
br i1 %21, label %22, label %29
22: ; preds = %18
%23 = load i8, i8* %2
%24 = sext i8 %23 to i32
%25 = icmp sle i32 %24, 121
br i1 %25, label %26, label %29
26: ; preds = %22
%27 = load i8, i8* %2
%28 = add i8 %27, 1
store i8 %28, i8* %2
br label %35
29: ; preds = %22, %18
%30 = load i8, i8* %2
%31 = sext i8 %30 to i32
%32 = icmp eq i32 %31, 122
br i1 %32, label %33, label %34
33: ; preds = %29
store i8 97, i8* %2
br label %34
34: ; preds = %33, %29
br label %35
35: ; preds = %34, %26
br label %36
36: ; preds = %35, %17
br label %37
37: ; preds = %36, %10
%38 = load i8, i8* %2
ret i8 %38
}

LLVM IR (-O2):
define signext i8 @rot1(i8 signext %0) {
%2 = add i8 %0, -65
%3 = icmp ult i8 %2, 25
br i1 %3, label %4, label %6
4: ; preds = %1
%5 = add nuw nsw i8 %0, 1
br label %16
6: ; preds = %1
%7 = icmp eq i8 %0, 90
br i1 %7, label %16, label %8
8: ; preds = %6
%9 = add i8 %0, -97
%10 = icmp ult i8 %9, 25
br i1 %10, label %11, label %13
11: ; preds = %8
%12 = add nuw nsw i8 %0, 1
br label %16
13: ; preds = %8
%14 = icmp eq i8 %0, 122
%15 = select i1 %14, i8 97, i8 %0
br label %16
16: ; preds = %6, %13, %11, %4
%17 = phi i8 [ %5, %4 ], [ %12, %11 ], [ %15, %13 ], [ 65, %6 ]
ret i8 %17
}