#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
struct NetFrame {
  int dummy;
};

/* Variables and functions */
int /*<<< orphan*/ FRAMERR(struct NetFrame *, char *, char const, char const);
int /*<<< orphan*/ isprint(char);
scalar_t__ isspace(char);
unsigned translate_netbios_name(struct NetFrame *frame, const char *name,
                                char *netbios_name,
                                unsigned sizeof_netbios_name) {
  unsigned j;
  unsigned k;
  sizeof_netbios_name = (sizeof_netbios_name);
  k = 0;
  for (j = 0; name[j] && name[j] != '.'; j++) {
    if (name[j] < 'A' || name[j] > 'A' + 15)
      FRAMERR(frame, "netbios: bad netbios name char %c (0x%02x) \n", name[j],
              name[j]);
    netbios_name[k] = (char)((name[j] - 'A') << 4);
    j++;
    if (name[j] < 'A' || name[j] > 'A' + 15)
      FRAMERR(frame, "netbios: bad netbios name char %c (0x%02x) \n", name[j],
              name[j]);
    if (name[j] && name[j] != '.')
      netbios_name[k++] |= (char)((name[j] - 'A') & 0x0F);
  }
  if (k && (!isprint(netbios_name[k - 1]) || netbios_name[k - 1] == 0x20)) {
    unsigned code = netbios_name[k - 1];
    k--;
    while (k && isspace(netbios_name[k - 1]))
      k--;
    netbios_name[k++] = '<';
    netbios_name[k++] = "0123456789ABCDEF"[(code >> 4) & 0x0f];
    netbios_name[k++] = "0123456789ABCDEF"[(code >> 0) & 0x0f];
    netbios_name[k++] = '>';
  }
  while (name[j] && k < sizeof_netbios_name - 1)
    netbios_name[k++] = name[j++];
  netbios_name[k] = '\0';
  return k;
}


x86 assembly (clang, -O0):
<translate_netbios_name>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x29(%rbp)
je     1188 <translate_netbios_name+0x58>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
setne  %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    1198 <translate_netbios_name+0x68>
jmp    12c7 <translate_netbios_name+0x197>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     11c0 <translate_netbios_name+0x90>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x50,%eax
jle    11e8 <translate_netbios_name+0xb8>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
lea    0xe24(%rip),%rsi
movsbl %dl,%edx
movsbl (%rax,%rcx,1),%ecx
call   1040 <FRAMERR@plt>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
shl    $0x4,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1236 <translate_netbios_name+0x106>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x50,%eax
jle    125e <translate_netbios_name+0x12e>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
lea    0xdae(%rip),%rsi
movsbl %dl,%edx
movsbl (%rax,%rcx,1),%ecx
call   1040 <FRAMERR@plt>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     12b4 <translate_netbios_name+0x184>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     12b4 <translate_netbios_name+0x184>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
and    $0xf,%eax
movsbl %al,%esi
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
jmp    12b9 <translate_netbios_name+0x189>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    115b <translate_netbios_name+0x2b>
cmpl   $0x0,-0x24(%rbp)
je     13f0 <translate_netbios_name+0x2c0>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%edi
call   1050 <isprint@plt>
cmp    $0x0,%eax
je     1308 <translate_netbios_name+0x1d8>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    13f0 <translate_netbios_name+0x2c0>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x24(%rbp)
mov    %al,-0x2a(%rbp)
je     1352 <translate_netbios_name+0x222>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%edi
call   1030 <isspace@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x2a(%rbp)
mov    -0x2a(%rbp),%al
test   $0x1,%al
jne    1362 <translate_netbios_name+0x232>
jmp    1370 <translate_netbios_name+0x240>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1324 <translate_netbios_name+0x1f4>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
mov    %ecx,%ecx
movb   $0x3c,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
shr    $0x4,%eax
and    $0xf,%eax
mov    %eax,%eax
mov    %eax,%ecx
lea    0xc94(%rip),%rax
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
mov    %ecx,%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
shr    $0x0,%eax
and    $0xf,%eax
mov    %eax,%eax
mov    %eax,%ecx
lea    0xc69(%rip),%rax
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
mov    %ecx,%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x24(%rbp)
mov    %ecx,%ecx
movb   $0x3e,(%rax,%rcx,1)
jmp    13f5 <translate_netbios_name+0x2c5>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2b(%rbp)
je     141f <translate_netbios_name+0x2ef>
mov    -0x24(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
setb   %al
mov    %al,-0x2b(%rbp)
mov    -0x2b(%rbp),%al
test   $0x1,%al
jne    142f <translate_netbios_name+0x2ff>
jmp    145c <translate_netbios_name+0x32c>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x20(%rbp)
mov    %ecx,%ecx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
mov    %ecx,%ecx
mov    %dl,(%rax,%rcx,1)
jmp    13f5 <translate_netbios_name+0x2c5>
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
movb   $0x0,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<translate_netbios_name>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %ecx,0xc(%rsp)
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,(%rsp)
xor    %ebx,%ebx
mov    $0x1,%r12d
jmp    1164 <translate_netbios_name+0x34>
cs nopw 0x0(%rax,%rax,1)
add    $0x2,%r12d
lea    -0x1(%r12),%r13d
movzbl (%r15,%r13,1),%eax
test   %al,%al
je     11e6 <translate_netbios_name+0xb6>
cmp    $0x2e,%al
je     11e6 <translate_netbios_name+0xb6>
lea    -0x51(%rax),%ecx
cmp    $0xef,%cl
ja     1198 <translate_netbios_name+0x68>
movsbl %al,%ecx
mov    (%rsp),%rdi
lea    0xe74(%rip),%rsi
mov    %ecx,%edx
call   1040 <FRAMERR@plt>
movzbl (%r15,%r13,1),%eax
shl    $0x4,%al
add    $0xf0,%al
mov    %ebx,%r13d
mov    %al,(%r14,%r13,1)
mov    %r12d,%ebp
movzbl (%r15,%rbp,1),%eax
lea    -0x51(%rax),%ecx
cmp    $0xef,%cl
ja     11ce <translate_netbios_name+0x9e>
movsbl %al,%ecx
mov    (%rsp),%rdi
lea    0xe3e(%rip),%rsi
mov    %ecx,%edx
call   1040 <FRAMERR@plt>
movzbl (%r15,%rbp,1),%eax
test   %al,%al
je     1160 <translate_netbios_name+0x30>
cmp    $0x2e,%al
je     1160 <translate_netbios_name+0x30>
add    $0xff,%al
and    $0xf,%al
add    $0x1,%ebx
or     %al,(%r14,%r13,1)
jmp    1160 <translate_netbios_name+0x30>
test   %ebx,%ebx
je     1299 <translate_netbios_name+0x169>
lea    -0x1(%rbx),%ebp
movsbl (%r14,%rbp,1),%edi
call   1050 <isprint@plt>
movzbl (%r14,%rbp,1),%ecx
test   %eax,%eax
je     1212 <translate_netbios_name+0xe2>
cmp    $0x20,%cl
mov    $0x20,%ecx
jne    129b <translate_netbios_name+0x16b>
mov    %ecx,0x8(%rsp)
mov    %rbp,0x10(%rsp)
lea    -0x2(%rbx),%eax
mov    %rax,(%rsp)
mov    %ebx,%ebx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
mov    %rcx,%rbp
lea    (%rbx,%rcx,1),%eax
cmp    $0x1,%eax
je     1254 <translate_netbios_name+0x124>
mov    (%rsp),%rax
add    %ebp,%eax
movsbl (%r14,%rax,1),%edi
call   1030 <isspace@plt>
lea    -0x1(%rbp),%rcx
test   %rax,%rax
jne    1230 <translate_netbios_name+0x100>
mov    0x10(%rsp),%rax
add    %r14,%rax
movb   $0x3c,0x0(%rbp,%rax,1)
mov    0x8(%rsp),%eax
mov    %rax,%rcx
shr    $0x4,%rcx
lea    0xdba(%rip),%rdx
mov    (%rcx,%rdx,1),%cl
add    %rbp,%rbx
lea    0x1(%rbx),%esi
mov    %ebx,%edi
mov    %cl,(%r14,%rdi,1)
and    $0xf,%eax
mov    (%rax,%rdx,1),%al
lea    0x2(%rbx),%ecx
mov    %al,(%r14,%rsi,1)
add    $0x3,%ebx
movb   $0x3e,(%r14,%rcx,1)
jmp    129b <translate_netbios_name+0x16b>
xor    %ebx,%ebx
mov    (%r15,%r13,1),%al
test   %al,%al
je     12dd <translate_netbios_name+0x1ad>
mov    0xc(%rsp),%ecx
add    $0xffffffff,%ecx
cmp    %ecx,%ebx
jae    12dd <translate_netbios_name+0x1ad>
mov    %ebx,%ebx
mov    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %al,(%r14,%rbx,1)
add    $0x1,%rbx
mov    %r12d,%eax
movzbl (%r15,%rax,1),%eax
test   %al,%al
je     12dd <translate_netbios_name+0x1ad>
add    $0x1,%r12d
cmp    %rcx,%rbx
jb     12c0 <translate_netbios_name+0x190>
mov    %ebx,%eax
movb   $0x0,(%r14,%rax,1)
mov    %ebx,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.NetFrame = type { i32 }
@.str = [45 x i8] c"netbios: bad netbios name char %c (0x%02x) \0A\00"
@.str.1 = [17 x i8] c"0123456789ABCDEF\00"
define i32 @translate_netbios_name(%struct.NetFrame* %0, i8* %1, i8* %2, i32 %3) {
%5 = alloca %struct.NetFrame*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store %struct.NetFrame* %0, %struct.NetFrame** %5
store i8* %1, i8** %6
store i8* %2, i8** %7
store i32 %3, i32* %8
%12 = load i32, i32* %8
store i32 %12, i32* %8
store i32 0, i32* %10
store i32 0, i32* %9
br label %13
13: ; preds = %141, %4
%14 = load i8*, i8** %6
%15 = load i32, i32* %9
%16 = zext i32 %15 to i64
%17 = getelementptr inbounds i8, i8* %14, i64 %16
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp ne i32 %19, 0
br i1 %20, label %21, label %29
21: ; preds = %13
%22 = load i8*, i8** %6
%23 = load i32, i32* %9
%24 = zext i32 %23 to i64
%25 = getelementptr inbounds i8, i8* %22, i64 %24
%26 = load i8, i8* %25
%27 = sext i8 %26 to i32
%28 = icmp ne i32 %27, 46
br label %29
29: ; preds = %21, %13
%30 = phi i1 [ false, %13 ], [ %28, %21 ]
br i1 %30, label %31, label %144
31: ; preds = %29
%32 = load i8*, i8** %6
%33 = load i32, i32* %9
%34 = zext i32 %33 to i64
%35 = getelementptr inbounds i8, i8* %32, i64 %34
%36 = load i8, i8* %35
%37 = sext i8 %36 to i32
%38 = icmp slt i32 %37, 65
br i1 %38, label %47, label %39
39: ; preds = %31
%40 = load i8*, i8** %6
%41 = load i32, i32* %9
%42 = zext i32 %41 to i64
%43 = getelementptr inbounds i8, i8* %40, i64 %42
%44 = load i8, i8* %43
%45 = sext i8 %44 to i32
%46 = icmp sgt i32 %45, 80
br i1 %46, label %47, label %60
47: ; preds = %39, %31
%48 = load %struct.NetFrame*, %struct.NetFrame** %5
%49 = load i8*, i8** %6
%50 = load i32, i32* %9
%51 = zext i32 %50 to i64
%52 = getelementptr inbounds i8, i8* %49, i64 %51
%53 = load i8, i8* %52
%54 = load i8*, i8** %6
%55 = load i32, i32* %9
%56 = zext i32 %55 to i64
%57 = getelementptr inbounds i8, i8* %54, i64 %56
%58 = load i8, i8* %57
%59 = call i32 @FRAMERR(%struct.NetFrame* %48, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0), i8 signext %53, i8 signext %58)
br label %60
60: ; preds = %47, %39
%61 = load i8*, i8** %6
%62 = load i32, i32* %9
%63 = zext i32 %62 to i64
%64 = getelementptr inbounds i8, i8* %61, i64 %63
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = sub nsw i32 %66, 65
%68 = shl i32 %67, 4
%69 = trunc i32 %68 to i8
%70 = load i8*, i8** %7
%71 = load i32, i32* %10
%72 = zext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %70, i64 %72
store i8 %69, i8* %73
%74 = load i32, i32* %9
%75 = add i32 %74, 1
store i32 %75, i32* %9
%76 = load i8*, i8** %6
%77 = load i32, i32* %9
%78 = zext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %76, i64 %78
%80 = load i8, i8* %79
%81 = sext i8 %80 to i32
%82 = icmp slt i32 %81, 65
br i1 %82, label %91, label %83
83: ; preds = %60
%84 = load i8*, i8** %6
%85 = load i32, i32* %9
%86 = zext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %84, i64 %86
%88 = load i8, i8* %87
%89 = sext i8 %88 to i32
%90 = icmp sgt i32 %89, 80
br i1 %90, label %91, label %104
91: ; preds = %83, %60
%92 = load %struct.NetFrame*, %struct.NetFrame** %5
%93 = load i8*, i8** %6
%94 = load i32, i32* %9
%95 = zext i32 %94 to i64
%96 = getelementptr inbounds i8, i8* %93, i64 %95
%97 = load i8, i8* %96
%98 = load i8*, i8** %6
%99 = load i32, i32* %9
%100 = zext i32 %99 to i64
%101 = getelementptr inbounds i8, i8* %98, i64 %100
%102 = load i8, i8* %101
%103 = call i32 @FRAMERR(%struct.NetFrame* %92, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0), i8 signext %97, i8 signext %102)
br label %104
104: ; preds = %91, %83
%105 = load i8*, i8** %6
%106 = load i32, i32* %9
%107 = zext i32 %106 to i64
%108 = getelementptr inbounds i8, i8* %105, i64 %107
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = icmp ne i32 %110, 0
br i1 %111, label %112, label %140
112: ; preds = %104
%113 = load i8*, i8** %6
%114 = load i32, i32* %9
%115 = zext i32 %114 to i64
%116 = getelementptr inbounds i8, i8* %113, i64 %115
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = icmp ne i32 %118, 46
br i1 %119, label %120, label %140
120: ; preds = %112
%121 = load i8*, i8** %6
%122 = load i32, i32* %9
%123 = zext i32 %122 to i64
%124 = getelementptr inbounds i8, i8* %121, i64 %123
%125 = load i8, i8* %124
%126 = sext i8 %125 to i32
%127 = sub nsw i32 %126, 65
%128 = and i32 %127, 15
%129 = trunc i32 %128 to i8
%130 = sext i8 %129 to i32
%131 = load i8*, i8** %7
%132 = load i32, i32* %10
%133 = add i32 %132, 1
store i32 %133, i32* %10
%134 = zext i32 %132 to i64
%135 = getelementptr inbounds i8, i8* %131, i64 %134
%136 = load i8, i8* %135
%137 = sext i8 %136 to i32
%138 = or i32 %137, %130
%139 = trunc i32 %138 to i8
store i8 %139, i8* %135
br label %140
140: ; preds = %120, %112, %104
br label %141
141: ; preds = %140
%142 = load i32, i32* %9
%143 = add i32 %142, 1
store i32 %143, i32* %9
br label %13
144: ; preds = %29
%145 = load i32, i32* %10
%146 = icmp ne i32 %145, 0
br i1 %146, label %147, label %225
147: ; preds = %144
%148 = load i8*, i8** %7
%149 = load i32, i32* %10
%150 = sub i32 %149, 1
%151 = zext i32 %150 to i64
%152 = getelementptr inbounds i8, i8* %148, i64 %151
%153 = load i8, i8* %152
%154 = call i32 @isprint(i8 signext %153)
%155 = icmp ne i32 %154, 0
br i1 %155, label %156, label %165
156: ; preds = %147
%157 = load i8*, i8** %7
%158 = load i32, i32* %10
%159 = sub i32 %158, 1
%160 = zext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %157, i64 %160
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = icmp eq i32 %163, 32
br i1 %164, label %165, label %225
165: ; preds = %156, %147
%166 = load i8*, i8** %7
%167 = load i32, i32* %10
%168 = sub i32 %167, 1
%169 = zext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %166, i64 %169
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
store i32 %172, i32* %11
%173 = load i32, i32* %10
%174 = add i32 %173, -1
store i32 %174, i32* %10
br label %175
175: ; preds = %189, %165
%176 = load i32, i32* %10
%177 = icmp ne i32 %176, 0
br i1 %177, label %178, label %187
178: ; preds = %175
%179 = load i8*, i8** %7
%180 = load i32, i32* %10
%181 = sub i32 %180, 1
%182 = zext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %179, i64 %182
%184 = load i8, i8* %183
%185 = call i64 @isspace(i8 signext %184)
%186 = icmp ne i64 %185, 0
br label %187
187: ; preds = %178, %175
%188 = phi i1 [ false, %175 ], [ %186, %178 ]
br i1 %188, label %189, label %192
189: ; preds = %187
%190 = load i32, i32* %10
%191 = add i32 %190, -1
store i32 %191, i32* %10
br label %175
192: ; preds = %187
%193 = load i8*, i8** %7
%194 = load i32, i32* %10
%195 = add i32 %194, 1
store i32 %195, i32* %10
%196 = zext i32 %194 to i64
%197 = getelementptr inbounds i8, i8* %193, i64 %196
store i8 60, i8* %197
%198 = load i32, i32* %11
%199 = lshr i32 %198, 4
%200 = and i32 %199, 15
%201 = zext i32 %200 to i64
%202 = getelementptr inbounds [17 x i8], [17 x i8]* @.str.1, i64 0, i64 %201
%203 = load i8, i8* %202
%204 = load i8*, i8** %7
%205 = load i32, i32* %10
%206 = add i32 %205, 1
store i32 %206, i32* %10
%207 = zext i32 %205 to i64
%208 = getelementptr inbounds i8, i8* %204, i64 %207
store i8 %203, i8* %208
%209 = load i32, i32* %11
%210 = lshr i32 %209, 0
%211 = and i32 %210, 15
%212 = zext i32 %211 to i64
%213 = getelementptr inbounds [17 x i8], [17 x i8]* @.str.1, i64 0, i64 %212
%214 = load i8, i8* %213
%215 = load i8*, i8** %7
%216 = load i32, i32* %10
%217 = add i32 %216, 1
store i32 %217, i32* %10
%218 = zext i32 %216 to i64
%219 = getelementptr inbounds i8, i8* %215, i64 %218
store i8 %214, i8* %219
%220 = load i8*, i8** %7
%221 = load i32, i32* %10
%222 = add i32 %221, 1
store i32 %222, i32* %10
%223 = zext i32 %221 to i64
%224 = getelementptr inbounds i8, i8* %220, i64 %223
store i8 62, i8* %224
br label %225
225: ; preds = %192, %156, %144
br label %226
226: ; preds = %241, %225
%227 = load i8*, i8** %6
%228 = load i32, i32* %9
%229 = zext i32 %228 to i64
%230 = getelementptr inbounds i8, i8* %227, i64 %229
%231 = load i8, i8* %230
%232 = sext i8 %231 to i32
%233 = icmp ne i32 %232, 0
br i1 %233, label %234, label %239
234: ; preds = %226
%235 = load i32, i32* %10
%236 = load i32, i32* %8
%237 = sub i32 %236, 1
%238 = icmp ult i32 %235, %237
br label %239
239: ; preds = %234, %226
%240 = phi i1 [ false, %226 ], [ %238, %234 ]
br i1 %240, label %241, label %253
241: ; preds = %239
%242 = load i8*, i8** %6
%243 = load i32, i32* %9
%244 = add i32 %243, 1
store i32 %244, i32* %9
%245 = zext i32 %243 to i64
%246 = getelementptr inbounds i8, i8* %242, i64 %245
%247 = load i8, i8* %246
%248 = load i8*, i8** %7
%249 = load i32, i32* %10
%250 = add i32 %249, 1
store i32 %250, i32* %10
%251 = zext i32 %249 to i64
%252 = getelementptr inbounds i8, i8* %248, i64 %251
store i8 %247, i8* %252
br label %226
253: ; preds = %239
%254 = load i8*, i8** %7
%255 = load i32, i32* %10
%256 = zext i32 %255 to i64
%257 = getelementptr inbounds i8, i8* %254, i64 %256
store i8 0, i8* %257
%258 = load i32, i32* %10
ret i32 %258
}

LLVM IR (-O2):
%struct.NetFrame = type { i32 }
@.str = [45 x i8] c"netbios: bad netbios name char %c (0x%02x) \0A\00"
@.str.1 = [17 x i8] c"0123456789ABCDEF\00"
define i32 @translate_netbios_name(%struct.NetFrame* %0, i8* nocapture %1, i8* nocapture %2, i32 %3) {
br label %5
5: ; preds = %40, %4
%6 = phi i32 [ 0, %4 ], [ %42, %40 ]
%7 = phi i32 [ 0, %4 ], [ %41, %40 ]
%8 = zext i32 %6 to i64
%9 = getelementptr inbounds i8, i8* %1, i64 %8
%10 = load i8, i8* %9
switch i8 %10, label %11 [
i8 0, label %43
i8 46, label %43
]
11: ; preds = %5
%12 = add i8 %10, -81
%13 = icmp ult i8 %12, -16
br i1 %13, label %14, label %17
14: ; preds = %11
%15 = tail call i32 @FRAMERR(%struct.NetFrame* %0, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0), i8 signext %10, i8 signext %10)
%16 = load i8, i8* %9
br label %17
17: ; preds = %11, %14
%18 = phi i8 [ %10, %11 ], [ %16, %14 ]
%19 = shl i8 %18, 4
%20 = add i8 %19, -16
%21 = zext i32 %7 to i64
%22 = getelementptr inbounds i8, i8* %2, i64 %21
store i8 %20, i8* %22
%23 = or i32 %6, 1
%24 = zext i32 %23 to i64
%25 = getelementptr inbounds i8, i8* %1, i64 %24
%26 = load i8, i8* %25
%27 = add i8 %26, -81
%28 = icmp ult i8 %27, -16
br i1 %28, label %29, label %32
29: ; preds = %17
%30 = tail call i32 @FRAMERR(%struct.NetFrame* %0, i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str, i64 0, i64 0), i8 signext %26, i8 signext %26)
%31 = load i8, i8* %25
br label %32
32: ; preds = %17, %29
%33 = phi i8 [ %26, %17 ], [ %31, %29 ]
switch i8 %33, label %34 [
i8 0, label %40
i8 46, label %40
]
34: ; preds = %32
%35 = add i8 %33, 15
%36 = and i8 %35, 15
%37 = add i32 %7, 1
%38 = load i8, i8* %22
%39 = or i8 %38, %36
store i8 %39, i8* %22
br label %40
40: ; preds = %32, %32, %34
%41 = phi i32 [ %37, %34 ], [ %7, %32 ], [ %7, %32 ]
%42 = add i32 %6, 2
br label %5
43: ; preds = %5, %5
%44 = icmp eq i32 %7, 0
br i1 %44, label %90, label %45
45: ; preds = %43
%46 = add i32 %7, -1
%47 = zext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %2, i64 %47
%49 = load i8, i8* %48
%50 = tail call i32 @isprint(i8 signext %49)
%51 = icmp eq i32 %50, 0
%52 = load i8, i8* %48
br i1 %51, label %53, label %55
53: ; preds = %45
%54 = zext i8 %52 to i32
br label %57
55: ; preds = %45
%56 = icmp eq i8 %52, 32
br i1 %56, label %57, label %90
57: ; preds = %53, %55
%58 = phi i32 [ %54, %53 ], [ 32, %55 ]
br label %59
59: ; preds = %63, %57
%60 = phi i32 [ %7, %57 ], [ %61, %63 ]
%61 = add i32 %60, -1
%62 = icmp eq i32 %61, 0
br i1 %62, label %70, label %63
63: ; preds = %59
%64 = add i32 %60, -2
%65 = zext i32 %64 to i64
%66 = getelementptr inbounds i8, i8* %2, i64 %65
%67 = load i8, i8* %66
%68 = tail call i64 @isspace(i8 signext %67)
%69 = icmp eq i64 %68, 0
br i1 %69, label %70, label %59
70: ; preds = %59, %63
%71 = zext i32 %61 to i64
%72 = getelementptr inbounds i8, i8* %2, i64 %71
store i8 60, i8* %72
%73 = lshr i32 %58, 4
%74 = zext i32 %73 to i64
%75 = getelementptr inbounds [17 x i8], [17 x i8]* @.str.1, i64 0, i64 %74
%76 = load i8, i8* %75
%77 = add i32 %60, 1
%78 = zext i32 %60 to i64
%79 = getelementptr inbounds i8, i8* %2, i64 %78
store i8 %76, i8* %79
%80 = and i32 %58, 15
%81 = zext i32 %80 to i64
%82 = getelementptr inbounds [17 x i8], [17 x i8]* @.str.1, i64 0, i64 %81
%83 = load i8, i8* %82
%84 = add i32 %60, 2
%85 = zext i32 %77 to i64
%86 = getelementptr inbounds i8, i8* %2, i64 %85
store i8 %83, i8* %86
%87 = add i32 %60, 3
%88 = zext i32 %84 to i64
%89 = getelementptr inbounds i8, i8* %2, i64 %88
store i8 62, i8* %89
br label %90
90: ; preds = %70, %55, %43
%91 = phi i32 [ %87, %70 ], [ %7, %55 ], [ 0, %43 ]
%92 = add i32 %3, -1
%93 = load i8, i8* %9
%94 = icmp ne i8 %93, 0
%95 = icmp ult i32 %91, %92
%96 = select i1 %94, i1 %95, i1 false
br i1 %96, label %97, label %115
97: ; preds = %90
%98 = zext i32 %91 to i64
%99 = zext i32 %92 to i64
br label %100
100: ; preds = %97, %100
%101 = phi i64 [ %98, %97 ], [ %105, %100 ]
%102 = phi i8 [ %93, %97 ], [ %109, %100 ]
%103 = phi i32 [ %6, %97 ], [ %104, %100 ]
%104 = add i32 %103, 1
%105 = add nuw nsw i64 %101, 1
%106 = getelementptr inbounds i8, i8* %2, i64 %101
store i8 %102, i8* %106
%107 = zext i32 %104 to i64
%108 = getelementptr inbounds i8, i8* %1, i64 %107
%109 = load i8, i8* %108
%110 = icmp ne i8 %109, 0
%111 = icmp ult i64 %105, %99
%112 = select i1 %110, i1 %111, i1 false
br i1 %112, label %100, label %113
113: ; preds = %100
%114 = trunc i64 %105 to i32
br label %115
115: ; preds = %113, %90
%116 = phi i32 [ %91, %90 ], [ %114, %113 ]
%117 = zext i32 %116 to i64
%118 = getelementptr inbounds i8, i8* %2, i64 %117
store i8 0, i8* %118
ret i32 %116
}