#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 */

/* Variables and functions */
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
void delete_spaces0(char *src, char *dest) {
  while (((*src) == ' ' || (*src) == '\t'))
    src++;
  strcpy(dest, src);
  src = dest + strlen(dest) - 1;
  while (src >= dest && ((*src) == ' ' || (*src) == '\t'))
    src--;
  src[1] = '\0';
  if (dest[0] == '&' && ((dest[1]) == ' ' || (dest[1]) == '\t')) {
    for (src = dest + 2; ((*src) == ' ' || (*src) == '\t'); src++)
      ;
    strcpy(dest + 1, src);
  }
  for (src = dest; *src; src++)
    if (*src == '|')
      *src = '_';
}


x86 assembly (clang, -O0):
<delete_spaces0>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x11(%rbp)
je     1155 <delete_spaces0+0x35>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x11(%rbp)
mov    -0x11(%rbp),%al
test   $0x1,%al
jne    1165 <delete_spaces0+0x45>
jmp    1176 <delete_spaces0+0x56>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    1130 <delete_spaces0+0x10>
mov    -0x10(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rcx
xor    %eax,%eax
cmp    -0x10(%rbp),%rcx
mov    %al,-0x21(%rbp)
jb     11e6 <delete_spaces0+0xc6>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x22(%rbp)
je     11e0 <delete_spaces0+0xc0>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x22(%rbp)
mov    -0x22(%rbp),%al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    11f6 <delete_spaces0+0xd6>
jmp    1207 <delete_spaces0+0xe7>
mov    -0x8(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
jmp    11a8 <delete_spaces0+0x88>
mov    -0x8(%rbp),%rax
movb   $0x0,0x1(%rax)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
jne    12a9 <delete_spaces0+0x189>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x20,%eax
je     1241 <delete_spaces0+0x121>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x9,%eax
jne    12a9 <delete_spaces0+0x189>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x23(%rbp)
je     1272 <delete_spaces0+0x152>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x23(%rbp)
mov    -0x23(%rbp),%al
test   $0x1,%al
jne    1282 <delete_spaces0+0x162>
jmp    1298 <delete_spaces0+0x178>
jmp    1287 <delete_spaces0+0x167>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    124d <delete_spaces0+0x12d>
mov    -0x10(%rbp),%rdi
add    $0x1,%rdi
mov    -0x8(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
cmpb   $0x0,(%rax)
je     12eb <delete_spaces0+0x1cb>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
jne    12d5 <delete_spaces0+0x1b5>
mov    -0x8(%rbp),%rax
movb   $0x5f,(%rax)
jmp    12da <delete_spaces0+0x1ba>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    12b1 <delete_spaces0+0x191>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<delete_spaces0>:
push   %rbx
mov    %rsi,%rbx
mov    %rdi,%rsi
jmp    1134 <delete_spaces0+0x14>
nopl   0x0(%rax)
add    $0x1,%rsi
movzbl (%rsi),%eax
cmp    $0x20,%al
je     1130 <delete_spaces0+0x10>
cmp    $0x9,%al
je     1130 <delete_spaces0+0x10>
mov    %rbx,%rdi
call   1030 <strcpy@plt>
mov    %rbx,%rdi
call   1040 <strlen@plt>
movslq %eax,%rcx
lea    (%rbx,%rcx,1),%rax
add    $0xffffffffffffffff,%rax
cmp    %rbx,%rax
jae    1179 <delete_spaces0+0x59>
add    %rbx,%rcx
jmp    118d <delete_spaces0+0x6d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0xffffffffffffffff,%rax
cmp    %rbx,%rax
jb     1186 <delete_spaces0+0x66>
movzbl (%rax),%ecx
cmp    $0x20,%cl
je     1170 <delete_spaces0+0x50>
cmp    $0x9,%cl
je     1170 <delete_spaces0+0x50>
add    $0x1,%rax
mov    %rax,%rcx
movb   $0x0,(%rcx)
cmpb   $0x26,(%rbx)
jne    11d7 <delete_spaces0+0xb7>
mov    0x1(%rbx),%al
cmp    $0x20,%al
je     11a0 <delete_spaces0+0x80>
cmp    $0x9,%al
jne    11d7 <delete_spaces0+0xb7>
lea    0x1(%rbx),%rdi
lea    0x2(%rbx),%rsi
jmp    11b4 <delete_spaces0+0x94>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rsi
movzbl (%rsi),%eax
cmp    $0x20,%al
je     11b0 <delete_spaces0+0x90>
cmp    $0x9,%al
je     11b0 <delete_spaces0+0x90>
call   1030 <strcpy@plt>
jmp    11d7 <delete_spaces0+0xb7>
cs nopw 0x0(%rax,%rax,1)
movb   $0x5f,(%rbx)
add    $0x1,%rbx
movzbl (%rbx),%eax
cmp    $0x7c,%al
je     11d0 <delete_spaces0+0xb0>
test   %al,%al
jne    11d3 <delete_spaces0+0xb3>
pop    %rbx
ret

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

LLVM IR (-O2):
define void @delete_spaces0(i8* %0, i8* %1) {
br label %3
3: ; preds = %6, %2
%4 = phi i8* [ %0, %2 ], [ %7, %6 ]
%5 = load i8, i8* %4
switch i8 %5, label %8 [
i8 32, label %6
i8 9, label %6
]
6: ; preds = %3, %3
%7 = getelementptr inbounds i8, i8* %4, i64 1
br label %3
8: ; preds = %3
%9 = tail call i32 @strcpy(i8* %1, i8* %4)
%10 = tail call i32 @strlen(i8* %1)
%11 = sext i32 %10 to i64
%12 = getelementptr inbounds i8, i8* %1, i64 %11
%13 = getelementptr inbounds i8, i8* %12, i64 -1
%14 = icmp ult i8* %13, %1
br i1 %14, label %22, label %15
15: ; preds = %8, %19
%16 = phi i8* [ %20, %19 ], [ %13, %8 ]
%17 = phi i8* [ %16, %19 ], [ %12, %8 ]
%18 = load i8, i8* %16
switch i8 %18, label %22 [
i8 32, label %19
i8 9, label %19
]
19: ; preds = %15, %15
%20 = getelementptr inbounds i8, i8* %16, i64 -1
%21 = icmp ult i8* %20, %1
br i1 %21, label %22, label %15
22: ; preds = %19, %15, %8
%23 = phi i8* [ %12, %8 ], [ %17, %15 ], [ %16, %19 ]
store i8 0, i8* %23
%24 = load i8, i8* %1
%25 = icmp eq i8 %24, 38
br i1 %25, label %26, label %38
26: ; preds = %22
%27 = getelementptr inbounds i8, i8* %1, i64 1
%28 = load i8, i8* %27
switch i8 %28, label %38 [
i8 32, label %29
i8 9, label %29
]
29: ; preds = %26, %26
%30 = getelementptr inbounds i8, i8* %1, i64 2
br label %31
31: ; preds = %34, %29
%32 = phi i8* [ %30, %29 ], [ %35, %34 ]
%33 = load i8, i8* %32
switch i8 %33, label %36 [
i8 32, label %34
i8 9, label %34
]
34: ; preds = %31, %31
%35 = getelementptr inbounds i8, i8* %32, i64 1
br label %31
36: ; preds = %31
%37 = tail call i32 @strcpy(i8* %27, i8* %32)
br label %38
38: ; preds = %26, %36, %22
br label %39
39: ; preds = %38, %43
%40 = phi i8* [ %44, %43 ], [ %1, %38 ]
%41 = load i8, i8* %40
switch i8 %41, label %43 [
i8 0, label %45
i8 124, label %42
]
42: ; preds = %39
store i8 95, i8* %40
br label %43
43: ; preds = %39, %42
%44 = getelementptr inbounds i8, i8* %40, i64 1
br label %39
45: ; preds = %39
ret void
}