int getupperleft(int hex) {
  int i, j, k, vert;
  vert = 0;
  for (i = 0; i < 6; i++) {
    for (j = 0, k = 0; j < 2; j++) {
      if (hex == 5 * i + j + k)
        return vert;
      vert += 2;
    }
    if (hex == 5 * i + j + k)
      return vert;
    vert += 3;
    for (k = 1; k < 2; k++) {
      if (hex == 5 * i + j + k)
        return vert;
      vert += 2;
    }
    if (hex == 5 * i + j + k)
      return vert;
    vert += 3;
  }
  return 0;
}


x86 assembly (clang, -O0):
<getupperleft>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x6,-0xc(%rbp)
jge    1216 <getupperleft+0x116>
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x2,-0x10(%rbp)
jge    116e <getupperleft+0x6e>
mov    -0x8(%rbp),%eax
imul   $0x5,-0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jne    1157 <getupperleft+0x57>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    121d <getupperleft+0x11d>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    112d <getupperleft+0x2d>
mov    -0x8(%rbp),%eax
imul   $0x5,-0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jne    118e <getupperleft+0x8e>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    121d <getupperleft+0x11d>
mov    -0x18(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x18(%rbp)
movl   $0x1,-0x14(%rbp)
cmpl   $0x2,-0x14(%rbp)
jge    11df <getupperleft+0xdf>
mov    -0x8(%rbp),%eax
imul   $0x5,-0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jne    11c8 <getupperleft+0xc8>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    121d <getupperleft+0x11d>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    119e <getupperleft+0x9e>
mov    -0x8(%rbp),%eax
imul   $0x5,-0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jne    11ff <getupperleft+0xff>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    121d <getupperleft+0x11d>
mov    -0x18(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1115 <getupperleft+0x15>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<getupperleft>:
imul   $0xcccccccd,%edi,%edx
xor    %eax,%eax
test   %edx,%edx
je     115c <getupperleft+0x5c>
imul   $0x33333333,%edi,%ecx
cmp    $0x33333332,%ecx
jg     1130 <getupperleft+0x30>
cmp    $0x99999999,%ecx
je     1146 <getupperleft+0x46>
cmp    $0xcccccccc,%ecx
jne    1152 <getupperleft+0x52>
mov    $0x9,%eax
ret
cmp    $0x33333333,%ecx
je     114c <getupperleft+0x4c>
cmp    $0x66666666,%ecx
jne    1152 <getupperleft+0x52>
mov    $0x4,%eax
ret
mov    $0x7,%eax
ret
mov    $0x2,%eax
ret
mov    $0xc,%eax
cmp    $0x1,%edx
jne    115d <getupperleft+0x5d>
ret
cmp    $0x33333331,%ecx
jg     117b <getupperleft+0x7b>
cmp    $0x99999998,%ecx
je     1191 <getupperleft+0x91>
cmp    $0xcccccccb,%ecx
jne    119d <getupperleft+0x9d>
mov    $0x15,%eax
ret
cmp    $0x33333332,%ecx
je     1197 <getupperleft+0x97>
cmp    $0x66666665,%ecx
jne    119d <getupperleft+0x9d>
mov    $0x10,%eax
ret
mov    $0x13,%eax
ret
mov    $0xe,%eax
ret
mov    $0x18,%eax
cmp    $0x2,%edx
je     115c <getupperleft+0x5c>
cmp    $0x33333330,%ecx
jg     11c5 <getupperleft+0xc5>
cmp    $0x99999997,%ecx
je     11db <getupperleft+0xdb>
cmp    $0xccccccca,%ecx
jne    11e7 <getupperleft+0xe7>
mov    $0x21,%eax
ret
cmp    $0x33333331,%ecx
je     11e1 <getupperleft+0xe1>
cmp    $0x66666664,%ecx
jne    11e7 <getupperleft+0xe7>
mov    $0x1c,%eax
ret
mov    $0x1f,%eax
ret
mov    $0x1a,%eax
ret
mov    $0x24,%eax
cmp    $0x3,%edx
je     115c <getupperleft+0x5c>
cmp    $0x3333332f,%ecx
jg     1213 <getupperleft+0x113>
cmp    $0x99999996,%ecx
je     1229 <getupperleft+0x129>
cmp    $0xccccccc9,%ecx
jne    1235 <getupperleft+0x135>
mov    $0x2d,%eax
ret
cmp    $0x33333330,%ecx
je     122f <getupperleft+0x12f>
cmp    $0x66666663,%ecx
jne    1235 <getupperleft+0x135>
mov    $0x28,%eax
ret
mov    $0x2b,%eax
ret
mov    $0x26,%eax
ret
mov    $0x30,%eax
cmp    $0x4,%edx
je     115c <getupperleft+0x5c>
cmp    $0x3333332e,%ecx
jg     1261 <getupperleft+0x161>
cmp    $0x99999995,%ecx
je     12a3 <getupperleft+0x1a3>
cmp    $0xccccccc8,%ecx
jne    1277 <getupperleft+0x177>
mov    $0x39,%eax
ret
cmp    $0x3333332f,%ecx
je     12a9 <getupperleft+0x1a9>
cmp    $0x66666662,%ecx
jne    1277 <getupperleft+0x177>
mov    $0x34,%eax
ret
mov    $0x3c,%eax
cmp    $0x5,%edx
je     115c <getupperleft+0x5c>
cmp    $0x3333332d,%ecx
jg     12af <getupperleft+0x1af>
cmp    $0x99999994,%ecx
je     12c5 <getupperleft+0x1c5>
cmp    $0xccccccc7,%ecx
jne    12d1 <getupperleft+0x1d1>
mov    $0x45,%eax
ret
mov    $0x37,%eax
ret
mov    $0x32,%eax
ret
cmp    $0x3333332e,%ecx
je     12cb <getupperleft+0x1cb>
cmp    $0x66666661,%ecx
jne    12d1 <getupperleft+0x1d1>
mov    $0x40,%eax
ret
mov    $0x43,%eax
ret
mov    $0x3e,%eax
ret
xor    %eax,%eax
ret

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

LLVM IR (-O2):
define i32 @getupperleft(i32 %0) {
%2 = mul i32 %0, -858993459
%3 = mul i32 %0, 858993459
%4 = icmp eq i32 %2, 0
br i1 %4, label %40, label %5
5: ; preds = %1
switch i32 %3, label %6 [
i32 858993459, label %40
i32 1717986918, label %22
i32 -1717986919, label %23
i32 -858993460, label %24
]
6: ; preds = %5
%7 = icmp eq i32 %2, 1
br i1 %7, label %40, label %8
8: ; preds = %6
switch i32 %3, label %9 [
i32 858993458, label %40
i32 1717986917, label %25
i32 -1717986920, label %26
i32 -858993461, label %27
]
9: ; preds = %8
%10 = icmp eq i32 %2, 2
br i1 %10, label %40, label %11
11: ; preds = %9
switch i32 %3, label %12 [
i32 858993457, label %40
i32 1717986916, label %28
i32 -1717986921, label %29
i32 -858993462, label %30
]
12: ; preds = %11
%13 = icmp eq i32 %2, 3
br i1 %13, label %40, label %14
14: ; preds = %12
switch i32 %3, label %15 [
i32 858993456, label %40
i32 1717986915, label %31
i32 -1717986922, label %32
i32 -858993463, label %33
]
15: ; preds = %14
%16 = icmp eq i32 %2, 4
br i1 %16, label %40, label %17
17: ; preds = %15
switch i32 %3, label %18 [
i32 858993455, label %40
i32 1717986914, label %34
i32 -1717986923, label %35
i32 -858993464, label %36
]
18: ; preds = %17
%19 = icmp eq i32 %2, 5
br i1 %19, label %40, label %20
20: ; preds = %18
switch i32 %3, label %21 [
i32 858993454, label %40
i32 1717986913, label %37
i32 -1717986924, label %38
i32 -858993465, label %39
]
21: ; preds = %20
br label %40
22: ; preds = %5
br label %40
23: ; preds = %5
br label %40
24: ; preds = %5
br label %40
25: ; preds = %8
br label %40
26: ; preds = %8
br label %40
27: ; preds = %8
br label %40
28: ; preds = %11
br label %40
29: ; preds = %11
br label %40
30: ; preds = %11
br label %40
31: ; preds = %14
br label %40
32: ; preds = %14
br label %40
33: ; preds = %14
br label %40
34: ; preds = %17
br label %40
35: ; preds = %17
br label %40
36: ; preds = %17
br label %40
37: ; preds = %20
br label %40
38: ; preds = %20
br label %40
39: ; preds = %20
br label %40
40: ; preds = %20, %39, %38, %37, %17, %36, %35, %34, %14, %33, %32, %31, %11, %30, %29, %28, %8, %27, %26, %25, %5, %24, %23, %22, %21, %1, %6, %9, %12, %15, %18
%41 = phi i32 [ 0, %1 ], [ 2, %5 ], [ 12, %6 ], [ 14, %8 ], [ 24, %9 ], [ 26, %11 ], [ 36, %12 ], [ 38, %14 ], [ 48, %15 ], [ 50, %17 ], [ 60, %18 ], [ 62, %20 ], [ 0, %21 ], [ 4, %22 ], [ 7, %23 ], [ 9, %24 ], [ 16, %25 ], [ 19, %26 ], [ 21, %27 ], [ 28, %28 ], [ 31, %29 ], [ 33, %30 ], [ 40, %31 ], [ 43, %32 ], [ 45, %33 ], [ 52, %34 ], [ 55, %35 ], [ 57, %36 ], [ 64, %37 ], [ 67, %38 ], [ 69, %39 ]
ret i32 %41
}