#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 */
typedef int /*<<< orphan*/ cleanString;

/* Variables and functions */
scalar_t__ isalpha(char const);
scalar_t__ isdigit(char const);
const char *COM_RemoveJunkChars(const char *in) {
  static char cleanString[1024];
  char *out = cleanString, *end = cleanString + sizeof(cleanString) - 1;
  if (in) {
    while (*in && (out < end)) {
      if (isalpha(*in) || isdigit(*in)) {
        *out = *in;
        in++;
        out++;
      } else if (*in == '<' || *in == '[' || *in == '{') {
        *out = '(';
        in++;
        out++;
      } else if (*in == '>' || *in == ']' || *in == '}') {
        *out = ')';
        in++;
        out++;
      } else if (*in == '.' || *in == '/' || *in == '_') {
        *out = '_';
        in++;
        out++;
      } else {
        in++;
      }
    }
  }
  *out = '\0';
  return cleanString;
}


x86 assembly (clang, -O0):
<COM_RemoveJunkChars>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
lea    0x2f0d(%rip),%rax
mov    %rax,-0x10(%rbp)
lea    0x2f02(%rip),%rax
add    $0x3ff,%rax
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x8(%rbp)
je     1301 <COM_RemoveJunkChars+0x1e1>
jmp    1158 <COM_RemoveJunkChars+0x38>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x19(%rbp)
je     117b <COM_RemoveJunkChars+0x5b>
mov    -0x10(%rbp),%rax
cmp    -0x18(%rbp),%rax
setb   %al
mov    %al,-0x19(%rbp)
mov    -0x19(%rbp),%al
test   $0x1,%al
jne    118b <COM_RemoveJunkChars+0x6b>
jmp    12fc <COM_RemoveJunkChars+0x1dc>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isalpha@plt>
cmp    $0x0,%rax
jne    11b7 <COM_RemoveJunkChars+0x97>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     11e0 <COM_RemoveJunkChars+0xc0>
mov    -0x8(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12f7 <COM_RemoveJunkChars+0x1d7>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3c,%eax
je     1210 <COM_RemoveJunkChars+0xf0>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
je     1210 <COM_RemoveJunkChars+0xf0>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7b,%eax
jne    1234 <COM_RemoveJunkChars+0x114>
mov    -0x10(%rbp),%rax
movb   $0x28,(%rax)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12f2 <COM_RemoveJunkChars+0x1d2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
je     1264 <COM_RemoveJunkChars+0x144>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     1264 <COM_RemoveJunkChars+0x144>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
jne    1288 <COM_RemoveJunkChars+0x168>
mov    -0x10(%rbp),%rax
movb   $0x29,(%rax)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12ed <COM_RemoveJunkChars+0x1cd>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     12b8 <COM_RemoveJunkChars+0x198>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     12b8 <COM_RemoveJunkChars+0x198>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
jne    12dc <COM_RemoveJunkChars+0x1bc>
mov    -0x10(%rbp),%rax
movb   $0x5f,(%rax)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12e8 <COM_RemoveJunkChars+0x1c8>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    12ed <COM_RemoveJunkChars+0x1cd>
jmp    12f2 <COM_RemoveJunkChars+0x1d2>
jmp    12f7 <COM_RemoveJunkChars+0x1d7>
jmp    1158 <COM_RemoveJunkChars+0x38>
jmp    1301 <COM_RemoveJunkChars+0x1e1>
mov    -0x10(%rbp),%rax
movb   $0x0,(%rax)
lea    0x2d31(%rip),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<COM_RemoveJunkChars>:
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
lea    0x2f11(%rip),%r14
test   %rdi,%rdi
je     11b8 <COM_RemoveJunkChars+0x98>
mov    %rdi,%rbx
mov    (%rdi),%al
test   %al,%al
je     11b8 <COM_RemoveJunkChars+0x98>
lea    0x2ef8(%rip),%r14
lea    0xeb1(%rip),%r15
lea    0x32e9(%rip),%r12
cs nopw 0x0(%rax,%rax,1)
movsbl %al,%edi
call   1040 <isalpha@plt>
test   %rax,%rax
jne    117a <COM_RemoveJunkChars+0x5a>
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1197 <COM_RemoveJunkChars+0x77>
movzbl (%rbx),%eax
mov    %al,(%r14)
add    $0x1,%r14
movzbl 0x1(%rbx),%eax
test   %al,%al
je     11b8 <COM_RemoveJunkChars+0x98>
add    $0x1,%rbx
cmp    %r12,%r14
jb     1160 <COM_RemoveJunkChars+0x40>
jmp    11b8 <COM_RemoveJunkChars+0x98>
movzbl (%rbx),%ecx
add    $0xd2,%cl
cmp    $0x4f,%cl
ja     1184 <COM_RemoveJunkChars+0x64>
mov    $0x28,%al
movzbl %cl,%ecx
movslq (%r15,%rcx,4),%rcx
add    %r15,%rcx
jmp    *%rcx
mov    $0x5f,%al
jmp    117d <COM_RemoveJunkChars+0x5d>
mov    $0x29,%al
jmp    117d <COM_RemoveJunkChars+0x5d>
movb   $0x0,(%r14)
lea    0x2e7d(%rip),%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@COM_RemoveJunkChars.cleanString = internal global [1024 x i8] zeroinitializer
define i8* @COM_RemoveJunkChars(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
store i8* %0, i8** %2
store i8* getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 0), i8** %3
store i8* getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 1, i64 -1), i8** %4
%5 = load i8*, i8** %2
%6 = icmp ne i8* %5, null
br i1 %6, label %7, label %108
7: ; preds = %1
br label %8
8: ; preds = %106, %7
%9 = load i8*, i8** %2
%10 = load i8, i8* %9
%11 = sext i8 %10 to i32
%12 = icmp ne i32 %11, 0
br i1 %12, label %13, label %17
13: ; preds = %8
%14 = load i8*, i8** %3
%15 = load i8*, i8** %4
%16 = icmp ult i8* %14, %15
br label %17
17: ; preds = %13, %8
%18 = phi i1 [ false, %8 ], [ %16, %13 ]
br i1 %18, label %19, label %107
19: ; preds = %17
%20 = load i8*, i8** %2
%21 = load i8, i8* %20
%22 = call i64 @isalpha(i8 signext %21)
%23 = icmp ne i64 %22, 0
br i1 %23, label %29, label %24
24: ; preds = %19
%25 = load i8*, i8** %2
%26 = load i8, i8* %25
%27 = call i64 @isdigit(i8 signext %26)
%28 = icmp ne i64 %27, 0
br i1 %28, label %29, label %37
29: ; preds = %24, %19
%30 = load i8*, i8** %2
%31 = load i8, i8* %30
%32 = load i8*, i8** %3
store i8 %31, i8* %32
%33 = load i8*, i8** %2
%34 = getelementptr inbounds i8, i8* %33, i32 1
store i8* %34, i8** %2
%35 = load i8*, i8** %3
%36 = getelementptr inbounds i8, i8* %35, i32 1
store i8* %36, i8** %3
br label %106
37: ; preds = %24
%38 = load i8*, i8** %2
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, 60
br i1 %41, label %52, label %42
42: ; preds = %37
%43 = load i8*, i8** %2
%44 = load i8, i8* %43
%45 = sext i8 %44 to i32
%46 = icmp eq i32 %45, 91
br i1 %46, label %52, label %47
47: ; preds = %42
%48 = load i8*, i8** %2
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = icmp eq i32 %50, 123
br i1 %51, label %52, label %58
52: ; preds = %47, %42, %37
%53 = load i8*, i8** %3
store i8 40, i8* %53
%54 = load i8*, i8** %2
%55 = getelementptr inbounds i8, i8* %54, i32 1
store i8* %55, i8** %2
%56 = load i8*, i8** %3
%57 = getelementptr inbounds i8, i8* %56, i32 1
store i8* %57, i8** %3
br label %105
58: ; preds = %47
%59 = load i8*, i8** %2
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 62
br i1 %62, label %73, label %63
63: ; preds = %58
%64 = load i8*, i8** %2
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = icmp eq i32 %66, 93
br i1 %67, label %73, label %68
68: ; preds = %63
%69 = load i8*, i8** %2
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp eq i32 %71, 125
br i1 %72, label %73, label %79
73: ; preds = %68, %63, %58
%74 = load i8*, i8** %3
store i8 41, i8* %74
%75 = load i8*, i8** %2
%76 = getelementptr inbounds i8, i8* %75, i32 1
store i8* %76, i8** %2
%77 = load i8*, i8** %3
%78 = getelementptr inbounds i8, i8* %77, i32 1
store i8* %78, i8** %3
br label %104
79: ; preds = %68
%80 = load i8*, i8** %2
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = icmp eq i32 %82, 46
br i1 %83, label %94, label %84
84: ; preds = %79
%85 = load i8*, i8** %2
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = icmp eq i32 %87, 47
br i1 %88, label %94, label %89
89: ; preds = %84
%90 = load i8*, i8** %2
%91 = load i8, i8* %90
%92 = sext i8 %91 to i32
%93 = icmp eq i32 %92, 95
br i1 %93, label %94, label %100
94: ; preds = %89, %84, %79
%95 = load i8*, i8** %3
store i8 95, i8* %95
%96 = load i8*, i8** %2
%97 = getelementptr inbounds i8, i8* %96, i32 1
store i8* %97, i8** %2
%98 = load i8*, i8** %3
%99 = getelementptr inbounds i8, i8* %98, i32 1
store i8* %99, i8** %3
br label %103
100: ; preds = %89
%101 = load i8*, i8** %2
%102 = getelementptr inbounds i8, i8* %101, i32 1
store i8* %102, i8** %2
br label %103
103: ; preds = %100, %94
br label %104
104: ; preds = %103, %73
br label %105
105: ; preds = %104, %52
br label %106
106: ; preds = %105, %29
br label %8
107: ; preds = %17
br label %108
108: ; preds = %107, %1
%109 = load i8*, i8** %3
store i8 0, i8* %109
ret i8* getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 0)
}

LLVM IR (-O2):
@COM_RemoveJunkChars.cleanString = internal global [1024 x i8] zeroinitializer
define i8* @COM_RemoveJunkChars(i8* %0) {
%2 = icmp eq i8* %0, null
br i1 %2, label %32, label %3
3: ; preds = %1
%4 = load i8, i8* %0
%5 = icmp eq i8 %4, 0
br i1 %5, label %32, label %6
6: ; preds = %3, %25
%7 = phi i8 [ %28, %25 ], [ %4, %3 ]
%8 = phi i8* [ %27, %25 ], [ %0, %3 ]
%9 = phi i8* [ %26, %25 ], [ getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 0), %3 ]
%10 = tail call i64 @isalpha(i8 signext %7)
%11 = icmp eq i64 %10, 0
br i1 %11, label %12, label %16
12: ; preds = %6
%13 = load i8, i8* %8
%14 = tail call i64 @isdigit(i8 signext %13)
%15 = icmp eq i64 %14, 0
br i1 %15, label %18, label %16
16: ; preds = %12, %6
%17 = load i8, i8* %8
br label %22
18: ; preds = %12
%19 = load i8, i8* %8
switch i8 %19, label %25 [
i8 60, label %22
i8 91, label %22
i8 123, label %22
i8 62, label %20
i8 93, label %20
i8 125, label %20
i8 46, label %21
i8 47, label %21
i8 95, label %21
]
20: ; preds = %18, %18, %18
br label %22
21: ; preds = %18, %18, %18
br label %22
22: ; preds = %18, %18, %18, %16, %20, %21
%23 = phi i8 [ 95, %21 ], [ 41, %20 ], [ %17, %16 ], [ 40, %18 ], [ 40, %18 ], [ 40, %18 ]
store i8 %23, i8* %9
%24 = getelementptr inbounds i8, i8* %9, i64 1
br label %25
25: ; preds = %22, %18
%26 = phi i8* [ %9, %18 ], [ %24, %22 ]
%27 = getelementptr inbounds i8, i8* %8, i64 1
%28 = load i8, i8* %27
%29 = icmp ne i8 %28, 0
%30 = icmp ult i8* %26, getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 1023)
%31 = select i1 %29, i1 %30, i1 false
br i1 %31, label %6, label %32
32: ; preds = %25, %3, %1
%33 = phi i8* [ getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 0), %1 ], [ getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 0), %3 ], [ %26, %25 ]
store i8 0, i8* %33
ret i8* getelementptr inbounds ([1024 x i8], [1024 x i8]* @COM_RemoveJunkChars.cleanString, i64 0, i64 0)
}