#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 strlen(char *);
void reverseWords(char *s) {
  char *p, *h, *t, c;
  int i, additionalSpace = 0;
  h = s;
  t = strlen(s) + h - 1;
  while (*t == ' ')
    *t-- = 0;
  while (t > h) {
    {
      c = *t;
      *t = *h;
      *h = c;
    };
    t--;
    h++;
  }
  t = strlen(s) + s - 1;
  while (*t == ' ')
    *t-- = 0;
  h = s;
  while (*h) {
    t = h - additionalSpace;
    while (*h && *h != ' ')
      h++;
    for (p = h - 1, i = 0; i < additionalSpace && p > t; i++) {
      *t++ = *p;
      *p-- = ' ';
    }
    for (; p > t; p--, t++) {
      {
        c = *p;
        *p = *t;
        *t = c;
      };
    }
    if (*h) {
      h++;
      while (*h && *h == ' ') {
        additionalSpace++;
        h++;
      }
    }
  }
  h--;
  while (*h == ' ')
    *h-- = 0;
}


x86 assembly (clang, -O0):
<reverseWords>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    116f <reverseWords+0x5f>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x0,(%rax)
jmp    1148 <reverseWords+0x38>
jmp    1174 <reverseWords+0x64>
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jbe    11bd <reverseWords+0xad>
mov    -0x20(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x21(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
mov    -0x21(%rbp),%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1174 <reverseWords+0x64>
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1201 <reverseWords+0xf1>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x0,(%rax)
jmp    11da <reverseWords+0xca>
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     13a9 <reverseWords+0x299>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2d(%rbp)
je     124f <reverseWords+0x13f>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
setne  %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    125f <reverseWords+0x14f>
jmp    1270 <reverseWords+0x160>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    122a <reverseWords+0x11a>
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
xor    %eax,%eax
cmp    -0x2c(%rbp),%ecx
mov    %al,-0x2e(%rbp)
jge    12a2 <reverseWords+0x192>
mov    -0x10(%rbp),%rax
cmp    -0x20(%rbp),%rax
seta   %al
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%al
test   $0x1,%al
jne    12b2 <reverseWords+0x1a2>
jmp    12e9 <reverseWords+0x1d9>
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x20(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x20,(%rax)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1283 <reverseWords+0x173>
jmp    12ee <reverseWords+0x1de>
mov    -0x10(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    1337 <reverseWords+0x227>
mov    -0x10(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x21(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x21(%rbp),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    12ee <reverseWords+0x1de>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     13a4 <reverseWords+0x294>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2f(%rbp)
je     1375 <reverseWords+0x265>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
sete   %al
mov    %al,-0x2f(%rbp)
mov    -0x2f(%rbp),%al
test   $0x1,%al
jne    1385 <reverseWords+0x275>
jmp    139f <reverseWords+0x28f>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1350 <reverseWords+0x240>
jmp    13a4 <reverseWords+0x294>
jmp    1209 <reverseWords+0xf9>
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    13dc <reverseWords+0x2cc>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x0,(%rax)
jmp    13b5 <reverseWords+0x2a5>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<reverseWords>:
push   %rbx
mov    %rdi,%rbx
call   1030 <strlen@plt>
cltq
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%rbx,%rax,1),%ecx
add    $0xffffffffffffffff,%rax
cmp    $0x20,%cl
jne    1134 <reverseWords+0x24>
movb   $0x0,(%rbx,%rax,1)
jmp    1120 <reverseWords+0x10>
test   %rax,%rax
jle    117d <reverseWords+0x6d>
mov    (%rbx),%dl
mov    %dl,(%rbx,%rax,1)
mov    %cl,(%rbx)
cmp    $0x3,%rax
jl     117d <reverseWords+0x6d>
lea    0x1(%rbx),%rcx
add    %rbx,%rax
add    $0xfffffffffffffffe,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%rax),%esi
movzbl (%rcx),%edx
mov    %dl,0x1(%rax)
mov    %sil,(%rcx)
add    $0x1,%rcx
lea    -0x1(%rax),%rdx
cmp    %rcx,%rax
mov    %rdx,%rax
ja     1160 <reverseWords+0x50>
mov    %rbx,%rdi
call   1030 <strlen@plt>
cltq
cmpb   $0x20,-0x1(%rbx,%rax,1)
jne    11ad <reverseWords+0x9d>
add    %rbx,%rax
add    $0xffffffffffffffff,%rax
cs nopw 0x0(%rax,%rax,1)
nop
movb   $0x0,(%rax)
cmpb   $0x20,-0x1(%rax)
lea    -0x1(%rax),%rax
je     11a0 <reverseWords+0x90>
mov    (%rbx),%al
test   %al,%al
je     12a8 <reverseWords+0x198>
xor    %r9d,%r9d
movslq %r9d,%rcx
mov    %rbx,%rdx
sub    %rcx,%rdx
neg    %rcx
mov    $0xffffffffffffffff,%rsi
mov    $0xfffffffffffffffe,%rdi
mov    %rbx,%r8
test   $0xdf,%al
je     11f5 <reverseWords+0xe5>
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%r8),%eax
add    $0x1,%r8
add    $0x1,%rsi
add    $0x1,%rdi
test   $0xdf,%al
jne    11e0 <reverseWords+0xd0>
lea    -0x1(%r8),%rax
test   %r9d,%r9d
jle    124c <reverseWords+0x13c>
cmp    %rdx,%rax
jbe    124c <reverseWords+0x13c>
mov    $0x1,%eax
nopl   0x0(%rax,%rax,1)
movzbl (%rbx,%rsi,1),%edx
mov    %dl,(%rbx,%rcx,1)
movb   $0x20,(%rbx,%rsi,1)
add    $0xffffffffffffffff,%rsi
lea    0x1(%rcx),%rdx
cmp    %r9d,%eax
jge    1243 <reverseWords+0x133>
lea    (%rbx,%rcx,1),%r10
add    $0x1,%r10
lea    (%rbx,%rdi,1),%r11
add    $0xffffffffffffffff,%rdi
add    $0x1,%eax
mov    %rdx,%rcx
cmp    %r10,%r11
ja     1210 <reverseWords+0x100>
add    %rbx,%rsi
add    %rbx,%rdx
mov    %rsi,%rax
cmp    %rdx,%rax
jbe    127c <reverseWords+0x16c>
add    $0xffffffffffffffff,%rax
cs nopw 0x0(%rax,%rax,1)
nop
movzbl 0x1(%rax),%ecx
movzbl (%rdx),%ebx
mov    %bl,0x1(%rax)
mov    %cl,(%rdx)
add    $0x1,%rdx
lea    -0x1(%rax),%rcx
cmp    %rdx,%rax
mov    %rcx,%rax
ja     1260 <reverseWords+0x150>
cmpb   $0x0,(%r8)
je     12cf <reverseWords+0x1bf>
add    $0xffffffff,%r9d
mov    %r8,%rbx
nopl   0x0(%rax)
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
add    $0x1,%r9d
cmp    $0x20,%al
je     1290 <reverseWords+0x180>
test   %al,%al
jne    11ba <reverseWords+0xaa>
cmpb   $0x20,-0x1(%rbx)
jne    12cd <reverseWords+0x1bd>
add    $0xffffffffffffffff,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movb   $0x0,(%rbx)
cmpb   $0x20,-0x1(%rbx)
lea    -0x1(%rbx),%rbx
je     12c0 <reverseWords+0x1b0>
pop    %rbx
ret
mov    %r8,%rbx
cmpb   $0x20,-0x1(%rbx)
je     12ae <reverseWords+0x19e>
jmp    12cd <reverseWords+0x1bd>

LLVM IR (-O0):
define void @reverseWords(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8
%7 = alloca i32
%8 = alloca i32
store i8* %0, i8** %2
store i32 0, i32* %8
%9 = load i8*, i8** %2
store i8* %9, i8** %4
%10 = load i8*, i8** %2
%11 = call i32 @strlen(i8* %10)
%12 = load i8*, i8** %4
%13 = sext i32 %11 to i64
%14 = getelementptr inbounds i8, i8* %12, i64 %13
%15 = getelementptr inbounds i8, i8* %14, i64 -1
store i8* %15, i8** %5
br label %16
16: ; preds = %21, %1
%17 = load i8*, i8** %5
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp eq i32 %19, 32
br i1 %20, label %21, label %24
21: ; preds = %16
%22 = load i8*, i8** %5
%23 = getelementptr inbounds i8, i8* %22, i32 -1
store i8* %23, i8** %5
store i8 0, i8* %22
br label %16
24: ; preds = %16
br label %25
25: ; preds = %29, %24
%26 = load i8*, i8** %5
%27 = load i8*, i8** %4
%28 = icmp ugt i8* %26, %27
br i1 %28, label %29, label %41
29: ; preds = %25
%30 = load i8*, i8** %5
%31 = load i8, i8* %30
store i8 %31, i8* %6
%32 = load i8*, i8** %4
%33 = load i8, i8* %32
%34 = load i8*, i8** %5
store i8 %33, i8* %34
%35 = load i8, i8* %6
%36 = load i8*, i8** %4
store i8 %35, i8* %36
%37 = load i8*, i8** %5
%38 = getelementptr inbounds i8, i8* %37, i32 -1
store i8* %38, i8** %5
%39 = load i8*, i8** %4
%40 = getelementptr inbounds i8, i8* %39, i32 1
store i8* %40, i8** %4
br label %25
41: ; preds = %25
%42 = load i8*, i8** %2
%43 = call i32 @strlen(i8* %42)
%44 = load i8*, i8** %2
%45 = sext i32 %43 to i64
%46 = getelementptr inbounds i8, i8* %44, i64 %45
%47 = getelementptr inbounds i8, i8* %46, i64 -1
store i8* %47, i8** %5
br label %48
48: ; preds = %53, %41
%49 = load i8*, i8** %5
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 32
br i1 %52, label %53, label %56
53: ; preds = %48
%54 = load i8*, i8** %5
%55 = getelementptr inbounds i8, i8* %54, i32 -1
store i8* %55, i8** %5
store i8 0, i8* %54
br label %48
56: ; preds = %48
%57 = load i8*, i8** %2
store i8* %57, i8** %4
br label %58
58: ; preds = %149, %56
%59 = load i8*, i8** %4
%60 = load i8, i8* %59
%61 = icmp ne i8 %60, 0
br i1 %61, label %62, label %150
62: ; preds = %58
%63 = load i8*, i8** %4
%64 = load i32, i32* %8
%65 = sext i32 %64 to i64
%66 = sub i64 0, %65
%67 = getelementptr inbounds i8, i8* %63, i64 %66
store i8* %67, i8** %5
br label %68
68: ; preds = %80, %62
%69 = load i8*, i8** %4
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp ne i32 %71, 0
br i1 %72, label %73, label %78
73: ; preds = %68
%74 = load i8*, i8** %4
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
%77 = icmp ne i32 %76, 32
br label %78
78: ; preds = %73, %68
%79 = phi i1 [ false, %68 ], [ %77, %73 ]
br i1 %79, label %80, label %83
80: ; preds = %78
%81 = load i8*, i8** %4
%82 = getelementptr inbounds i8, i8* %81, i32 1
store i8* %82, i8** %4
br label %68
83: ; preds = %78
%84 = load i8*, i8** %4
%85 = getelementptr inbounds i8, i8* %84, i64 -1
store i8* %85, i8** %3
store i32 0, i32* %7
br label %86
86: ; preds = %103, %83
%87 = load i32, i32* %7
%88 = load i32, i32* %8
%89 = icmp slt i32 %87, %88
br i1 %89, label %90, label %94
90: ; preds = %86
%91 = load i8*, i8** %3
%92 = load i8*, i8** %5
%93 = icmp ugt i8* %91, %92
br label %94
94: ; preds = %90, %86
%95 = phi i1 [ false, %86 ], [ %93, %90 ]
br i1 %95, label %96, label %106
96: ; preds = %94
%97 = load i8*, i8** %3
%98 = load i8, i8* %97
%99 = load i8*, i8** %5
%100 = getelementptr inbounds i8, i8* %99, i32 1
store i8* %100, i8** %5
store i8 %98, i8* %99
%101 = load i8*, i8** %3
%102 = getelementptr inbounds i8, i8* %101, i32 -1
store i8* %102, i8** %3
store i8 32, i8* %101
br label %103
103: ; preds = %96
%104 = load i32, i32* %7
%105 = add nsw i32 %104, 1
store i32 %105, i32* %7
br label %86
106: ; preds = %94
br label %107
107: ; preds = %119, %106
%108 = load i8*, i8** %3
%109 = load i8*, i8** %5
%110 = icmp ugt i8* %108, %109
br i1 %110, label %111, label %124
111: ; preds = %107
%112 = load i8*, i8** %3
%113 = load i8, i8* %112
store i8 %113, i8* %6
%114 = load i8*, i8** %5
%115 = load i8, i8* %114
%116 = load i8*, i8** %3
store i8 %115, i8* %116
%117 = load i8, i8* %6
%118 = load i8*, i8** %5
store i8 %117, i8* %118
br label %119
119: ; preds = %111
%120 = load i8*, i8** %3
%121 = getelementptr inbounds i8, i8* %120, i32 -1
store i8* %121, i8** %3
%122 = load i8*, i8** %5
%123 = getelementptr inbounds i8, i8* %122, i32 1
store i8* %123, i8** %5
br label %107
124: ; preds = %107
%125 = load i8*, i8** %4
%126 = load i8, i8* %125
%127 = icmp ne i8 %126, 0
br i1 %127, label %128, label %149
128: ; preds = %124
%129 = load i8*, i8** %4
%130 = getelementptr inbounds i8, i8* %129, i32 1
store i8* %130, i8** %4
br label %131
131: ; preds = %143, %128
%132 = load i8*, i8** %4
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
%135 = icmp ne i32 %134, 0
br i1 %135, label %136, label %141
136: ; preds = %131
%137 = load i8*, i8** %4
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
%140 = icmp eq i32 %139, 32
br label %141
141: ; preds = %136, %131
%142 = phi i1 [ false, %131 ], [ %140, %136 ]
br i1 %142, label %143, label %148
143: ; preds = %141
%144 = load i32, i32* %8
%145 = add nsw i32 %144, 1
store i32 %145, i32* %8
%146 = load i8*, i8** %4
%147 = getelementptr inbounds i8, i8* %146, i32 1
store i8* %147, i8** %4
br label %131
148: ; preds = %141
br label %149
149: ; preds = %148, %124
br label %58
150: ; preds = %58
%151 = load i8*, i8** %4
%152 = getelementptr inbounds i8, i8* %151, i32 -1
store i8* %152, i8** %4
br label %153
153: ; preds = %158, %150
%154 = load i8*, i8** %4
%155 = load i8, i8* %154
%156 = sext i8 %155 to i32
%157 = icmp eq i32 %156, 32
br i1 %157, label %158, label %161
158: ; preds = %153
%159 = load i8*, i8** %4
%160 = getelementptr inbounds i8, i8* %159, i32 -1
store i8* %160, i8** %4
store i8 0, i8* %159
br label %153
161: ; preds = %153
ret void
}

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