void umlReplace(char *inChar) {
  if (*inChar == -97) {
    *inChar = 224;
  } else if (*inChar == -80) {
    *inChar = 248;
  } else if (*inChar == -67) {
    *inChar = 171;
  } else if (*inChar == -78) {
    *inChar = 253;
  } else if (*inChar == -92) {
    *inChar = 132;
  } else if (*inChar == -74) {
    *inChar = 148;
  } else if (*inChar == -68) {
    *inChar = 129;
  } else if (*inChar == -124) {
    *inChar = 142;
  } else if (*inChar == -106) {
    *inChar = 153;
  } else if (*inChar == -100) {
    *inChar = 154;
  } else if (*inChar == -85) {
    *inChar = 0xAE;
  } else if (*inChar == -69) {
    *inChar = 0xAF;
  }
}


x86 assembly (clang, -O0):
<umlReplace>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffff9f,%eax
jne    1124 <umlReplace+0x24>
mov    -0x8(%rbp),%rax
movb   $0xe0,(%rax)
jmp    128a <umlReplace+0x18a>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffb0,%eax
jne    1140 <umlReplace+0x40>
mov    -0x8(%rbp),%rax
movb   $0xf8,(%rax)
jmp    1285 <umlReplace+0x185>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffbd,%eax
jne    115c <umlReplace+0x5c>
mov    -0x8(%rbp),%rax
movb   $0xab,(%rax)
jmp    1280 <umlReplace+0x180>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffb2,%eax
jne    1178 <umlReplace+0x78>
mov    -0x8(%rbp),%rax
movb   $0xfd,(%rax)
jmp    127b <umlReplace+0x17b>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffa4,%eax
jne    1194 <umlReplace+0x94>
mov    -0x8(%rbp),%rax
movb   $0x84,(%rax)
jmp    1276 <umlReplace+0x176>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffb6,%eax
jne    11b0 <umlReplace+0xb0>
mov    -0x8(%rbp),%rax
movb   $0x94,(%rax)
jmp    1271 <umlReplace+0x171>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffbc,%eax
jne    11cc <umlReplace+0xcc>
mov    -0x8(%rbp),%rax
movb   $0x81,(%rax)
jmp    126c <umlReplace+0x16c>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffff84,%eax
jne    11e8 <umlReplace+0xe8>
mov    -0x8(%rbp),%rax
movb   $0x8e,(%rax)
jmp    1267 <umlReplace+0x167>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffff96,%eax
jne    1204 <umlReplace+0x104>
mov    -0x8(%rbp),%rax
movb   $0x99,(%rax)
jmp    1262 <umlReplace+0x162>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffff9c,%eax
jne    1220 <umlReplace+0x120>
mov    -0x8(%rbp),%rax
movb   $0x9a,(%rax)
jmp    125d <umlReplace+0x15d>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffab,%eax
jne    123c <umlReplace+0x13c>
mov    -0x8(%rbp),%rax
movb   $0xae,(%rax)
jmp    1258 <umlReplace+0x158>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffbb,%eax
jne    1253 <umlReplace+0x153>
mov    -0x8(%rbp),%rax
movb   $0xaf,(%rax)
jmp    1258 <umlReplace+0x158>
jmp    125d <umlReplace+0x15d>
jmp    1262 <umlReplace+0x162>
jmp    1267 <umlReplace+0x167>
jmp    126c <umlReplace+0x16c>
jmp    1271 <umlReplace+0x171>
jmp    1276 <umlReplace+0x176>
jmp    127b <umlReplace+0x17b>
jmp    1280 <umlReplace+0x180>
jmp    1285 <umlReplace+0x185>
jmp    128a <umlReplace+0x18a>
pop    %rbp
ret

x86 assembly (clang, -O2):
<umlReplace>:
mov    (%rdi),%cl
add    $0x7c,%cl
cmp    $0x39,%cl
ja     114b <umlReplace+0x4b>
mov    $0xe0,%al
movzbl %cl,%ecx
lea    0xeea(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    $0x8e,%al
jmp    1149 <umlReplace+0x49>
mov    $0x99,%al
jmp    1149 <umlReplace+0x49>
mov    $0x9a,%al
jmp    1149 <umlReplace+0x49>
mov    $0x84,%al
jmp    1149 <umlReplace+0x49>
mov    $0xae,%al
jmp    1149 <umlReplace+0x49>
mov    $0xf8,%al
jmp    1149 <umlReplace+0x49>
mov    $0xfd,%al
jmp    1149 <umlReplace+0x49>
mov    $0x94,%al
jmp    1149 <umlReplace+0x49>
mov    $0xaf,%al
jmp    1149 <umlReplace+0x49>
mov    $0x81,%al
jmp    1149 <umlReplace+0x49>
mov    $0xab,%al
mov    %al,(%rdi)
ret

LLVM IR (-O0):
define void @umlReplace(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = load i8, i8* %3
%5 = sext i8 %4 to i32
%6 = icmp eq i32 %5, -97
br i1 %6, label %7, label %9
7: ; preds = %1
%8 = load i8*, i8** %2
store i8 -32, i8* %8
br label %97
9: ; preds = %1
%10 = load i8*, i8** %2
%11 = load i8, i8* %10
%12 = sext i8 %11 to i32
%13 = icmp eq i32 %12, -80
br i1 %13, label %14, label %16
14: ; preds = %9
%15 = load i8*, i8** %2
store i8 -8, i8* %15
br label %96
16: ; preds = %9
%17 = load i8*, i8** %2
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp eq i32 %19, -67
br i1 %20, label %21, label %23
21: ; preds = %16
%22 = load i8*, i8** %2
store i8 -85, i8* %22
br label %95
23: ; preds = %16
%24 = load i8*, i8** %2
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = icmp eq i32 %26, -78
br i1 %27, label %28, label %30
28: ; preds = %23
%29 = load i8*, i8** %2
store i8 -3, i8* %29
br label %94
30: ; preds = %23
%31 = load i8*, i8** %2
%32 = load i8, i8* %31
%33 = sext i8 %32 to i32
%34 = icmp eq i32 %33, -92
br i1 %34, label %35, label %37
35: ; preds = %30
%36 = load i8*, i8** %2
store i8 -124, i8* %36
br label %93
37: ; preds = %30
%38 = load i8*, i8** %2
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, -74
br i1 %41, label %42, label %44
42: ; preds = %37
%43 = load i8*, i8** %2
store i8 -108, i8* %43
br label %92
44: ; preds = %37
%45 = load i8*, i8** %2
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, -68
br i1 %48, label %49, label %51
49: ; preds = %44
%50 = load i8*, i8** %2
store i8 -127, i8* %50
br label %91
51: ; preds = %44
%52 = load i8*, i8** %2
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, -124
br i1 %55, label %56, label %58
56: ; preds = %51
%57 = load i8*, i8** %2
store i8 -114, i8* %57
br label %90
58: ; preds = %51
%59 = load i8*, i8** %2
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, -106
br i1 %62, label %63, label %65
63: ; preds = %58
%64 = load i8*, i8** %2
store i8 -103, i8* %64
br label %89
65: ; preds = %58
%66 = load i8*, i8** %2
%67 = load i8, i8* %66
%68 = sext i8 %67 to i32
%69 = icmp eq i32 %68, -100
br i1 %69, label %70, label %72
70: ; preds = %65
%71 = load i8*, i8** %2
store i8 -102, i8* %71
br label %88
72: ; preds = %65
%73 = load i8*, i8** %2
%74 = load i8, i8* %73
%75 = sext i8 %74 to i32
%76 = icmp eq i32 %75, -85
br i1 %76, label %77, label %79
77: ; preds = %72
%78 = load i8*, i8** %2
store i8 -82, i8* %78
br label %87
79: ; preds = %72
%80 = load i8*, i8** %2
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = icmp eq i32 %82, -69
br i1 %83, label %84, label %86
84: ; preds = %79
%85 = load i8*, i8** %2
store i8 -81, i8* %85
br label %86
86: ; preds = %84, %79
br label %87
87: ; preds = %86, %77
br label %88
88: ; preds = %87, %70
br label %89
89: ; preds = %88, %63
br label %90
90: ; preds = %89, %56
br label %91
91: ; preds = %90, %49
br label %92
92: ; preds = %91, %42
br label %93
93: ; preds = %92, %35
br label %94
94: ; preds = %93, %28
br label %95
95: ; preds = %94, %21
br label %96
96: ; preds = %95, %14
br label %97
97: ; preds = %96, %7
ret void
}

LLVM IR (-O2):
define void @umlReplace(i8* nocapture %0) {
%2 = load i8, i8* %0
switch i8 %2, label %16 [
i8 -97, label %14
i8 -80, label %3
i8 -67, label %4
i8 -78, label %5
i8 -92, label %6
i8 -74, label %7
i8 -68, label %8
i8 -124, label %9
i8 -106, label %10
i8 -100, label %11
i8 -85, label %12
i8 -69, label %13
]
3: ; preds = %1
br label %14
4: ; preds = %1
br label %14
5: ; preds = %1
br label %14
6: ; preds = %1
br label %14
7: ; preds = %1
br label %14
8: ; preds = %1
br label %14
9: ; preds = %1
br label %14
10: ; preds = %1
br label %14
11: ; preds = %1
br label %14
12: ; preds = %1
br label %14
13: ; preds = %1
br label %14
14: ; preds = %1, %4, %6, %8, %10, %12, %13, %11, %9, %7, %5, %3
%15 = phi i8 [ -8, %3 ], [ -3, %5 ], [ -108, %7 ], [ -114, %9 ], [ -102, %11 ], [ -81, %13 ], [ -82, %12 ], [ -103, %10 ], [ -127, %8 ], [ -124, %6 ], [ -85, %4 ], [ -32, %1 ]
store i8 %15, i8* %0
br label %16
16: ; preds = %14, %1
ret void
}