#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 */
scalar_t__ malloc(int);
char *ft_itoa_hex(double flo, int p, char spec) {
  int len;
  char *hex;
  unsigned long long n;
  n = *((unsigned long long *)&flo) & 0x000FFFFFFFFFFFFFULL;
  len = 13;
  hex = (char *)malloc(sizeof(char) * (len + 1));
  hex[len] = '\0';
  while (len-- > 0) {
    hex[len] = ((n % 16) > 9) ? (spec + (n % 16) - 10) : ((n % 16) + '0');
    n /= 16;
  }
  if ((len = 13) && p != -1 && p < 13 && hex[p] > '7') {
    hex[p - 1] = (hex[p - 1] != '9') ? (hex[p - 1] + 1) : spec;
    while (--p > 0 && (hex[p] == 'g' || hex[p] == 'G')) {
      hex[p] = '0';
      hex[p - 1] = (hex[p - 1] != '9') ? (hex[p - 1] + 1) : spec;
    }
  }
  while (--len >= 0 && hex[len] == '0')
    hex[len] = '\0';
  return (hex);
}


x86 assembly (clang, -O0):
<ft_itoa_hex>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %sil,%al
movsd  %xmm0,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
mov    %al,-0xd(%rbp)
movabs $0xfffffffffffff,%rax
and    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0xd,-0x14(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x0,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
jle    11d7 <ft_itoa_hex+0xc7>
mov    -0x28(%rbp),%rax
and    $0xf,%rax
cmp    $0x9,%rax
jbe    11a5 <ft_itoa_hex+0x95>
movsbq -0xd(%rbp),%rax
mov    -0x28(%rbp),%rcx
and    $0xf,%rcx
add    %rcx,%rax
sub    $0xa,%rax
mov    %rax,-0x30(%rbp)
jmp    11b5 <ft_itoa_hex+0xa5>
mov    -0x28(%rbp),%rax
and    $0xf,%rax
add    $0x30,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
shr    $0x4,%rax
mov    %rax,-0x28(%rbp)
jmp    1162 <ft_itoa_hex+0x52>
movl   $0xd,-0x14(%rbp)
mov    $0x1,%al
test   $0x1,%al
jne    11ed <ft_itoa_hex+0xdd>
jmp    132c <ft_itoa_hex+0x21c>
cmpl   $0xffffffff,-0xc(%rbp)
je     132c <ft_itoa_hex+0x21c>
cmpl   $0xd,-0xc(%rbp)
jge    132c <ft_itoa_hex+0x21c>
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x37,%eax
jle    132c <ft_itoa_hex+0x21c>
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
je     124c <ft_itoa_hex+0x13c>
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1253 <ft_itoa_hex+0x143>
movsbl -0xd(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0xc(%rbp)
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x35(%rbp)
jle    12b4 <ft_itoa_hex+0x1a4>
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x67,%ecx
mov    %al,-0x36(%rbp)
je     12ae <ft_itoa_hex+0x19e>
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x47,%eax
sete   %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    12c4 <ft_itoa_hex+0x1b4>
jmp    1327 <ft_itoa_hex+0x217>
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
je     1306 <ft_itoa_hex+0x1f6>
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    130d <ft_itoa_hex+0x1fd>
movsbl -0xd(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1268 <ft_itoa_hex+0x158>
jmp    132c <ft_itoa_hex+0x21c>
jmp    1331 <ft_itoa_hex+0x221>
mov    -0x14(%rbp),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x3d(%rbp)
jl     135d <ft_itoa_hex+0x24d>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
sete   %al
mov    %al,-0x3d(%rbp)
mov    -0x3d(%rbp),%al
test   $0x1,%al
jne    136d <ft_itoa_hex+0x25d>
jmp    137e <ft_itoa_hex+0x26e>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1331 <ft_itoa_hex+0x221>
mov    -0x20(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ft_itoa_hex>:
push   %rbp
push   %r14
push   %rbx
mov    %esi,%ebp
mov    %edi,%r14d
movq   %xmm0,%rbx
mov    $0xe,%edi
call   1030 <malloc@plt>
movb   $0x0,0xd(%rax)
movzbl %bpl,%ecx
mov    %ebx,%edx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%rdx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %sil,0xc(%rax)
mov    %ebx,%edx
shr    $0x4,%edx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %ebx,%edx
shr    $0x8,%edx
and    $0xf,%edx
lea    0x30(%rdx),%edi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %dil,%edi
cmovae %edx,%edi
mov    %sil,0xb(%rax)
mov    %dil,0xa(%rax)
mov    %ebx,%edx
shr    $0xc,%edx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %sil,0x9(%rax)
mov    %ebx,%edx
shr    $0x10,%edx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %sil,0x8(%rax)
mov    %ebx,%edx
shr    $0x14,%edx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %ebx,%edx
shr    $0x18,%edx
and    $0xf,%edx
lea    0x30(%rdx),%edi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %dil,%edi
cmovae %edx,%edi
mov    %sil,0x7(%rax)
mov    %ebx,%edx
shr    $0x1c,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%edx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %dil,0x6(%rax)
mov    %sil,0x5(%rax)
mov    %rbx,%rdx
shr    $0x20,%rdx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%rdx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %sil,0x4(%rax)
mov    %rbx,%rdx
shr    $0x24,%rdx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%rdx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %sil,0x3(%rax)
mov    %rbx,%rdx
shr    $0x28,%rdx
and    $0xf,%edx
lea    0x30(%rdx),%esi
cmp    $0xa,%rdx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %sil,%esi
cmovae %edx,%esi
mov    %rbx,%rdx
shr    $0x2c,%rdx
and    $0xf,%edx
lea    0x30(%rdx),%edi
cmp    $0xa,%rdx
lea    0xf6(%rcx,%rdx,1),%edx
movzbl %dil,%edi
cmovae %edx,%edi
mov    %sil,0x2(%rax)
mov    %dil,0x1(%rax)
shr    $0x30,%rbx
and    $0xf,%ebx
lea    0x30(%rbx),%edx
cmp    $0xa,%rbx
lea    0xf6(%rcx,%rbx,1),%esi
movzbl %dl,%edx
cmovae %esi,%edx
mov    %dl,(%rax)
cmp    $0xffffffff,%r14d
je     135e <ft_itoa_hex+0x24e>
cmp    $0xc,%r14d
jg     135e <ft_itoa_hex+0x24e>
movslq %r14d,%rdx
cmpb   $0x38,(%rax,%rdx,1)
jl     135e <ft_itoa_hex+0x24e>
mov    -0x1(%rdx,%rax,1),%sil
lea    0x1(%rsi),%edi
cmp    $0x39,%sil
movzbl %dil,%esi
cmove  %ecx,%esi
mov    %sil,-0x1(%rdx,%rax,1)
cmp    $0x2,%r14d
jl     135e <ft_itoa_hex+0x24e>
mov    %r14d,%edx
mov    $0xfffffffe,%esi
add    %rdx,%rsi
add    $0xffffffffffffffff,%rdx
nopw   0x0(%rax,%rax,1)
mov    %edx,%edi
movzbl (%rax,%rdi,1),%ebx
or     $0x20,%bl
cmp    $0x67,%bl
jne    135e <ft_itoa_hex+0x24e>
movb   $0x30,(%rax,%rdi,1)
mov    %esi,%edi
movzbl (%rax,%rdi,1),%ebp
lea    0x1(%rbp),%ebx
cmp    $0x39,%bpl
movzbl %bl,%ebp
cmove  %ecx,%ebp
mov    %bpl,(%rax,%rdi,1)
add    $0xffffffffffffffff,%rsi
lea    -0x1(%rdx),%rdi
add    $0x1,%rdx
cmp    $0x2,%rdx
mov    %rdi,%rdx
ja     1320 <ft_itoa_hex+0x210>
cmpb   $0x30,0xc(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0xc(%rax)
cmpb   $0x30,0xb(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0xb(%rax)
cmpb   $0x30,0xa(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0xa(%rax)
cmpb   $0x30,0x9(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x9(%rax)
cmpb   $0x30,0x8(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x8(%rax)
cmpb   $0x30,0x7(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x7(%rax)
cmpb   $0x30,0x6(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x6(%rax)
cmpb   $0x30,0x5(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x5(%rax)
cmpb   $0x30,0x4(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x4(%rax)
cmpb   $0x30,0x3(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x3(%rax)
cmpb   $0x30,0x2(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x2(%rax)
cmpb   $0x30,0x1(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,0x1(%rax)
cmpb   $0x30,(%rax)
jne    13de <ft_itoa_hex+0x2ce>
movb   $0x0,(%rax)
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
define i8* @ft_itoa_hex(double %0, i32 %1, i8 signext %2) {
%4 = bitcast double %0 to i64
%5 = tail call i64 @malloc(i32 14)
%6 = inttoptr i64 %5 to i8*
%7 = getelementptr inbounds i8, i8* %6, i64 13
store i8 0, i8* %7
%8 = zext i8 %2 to i64
%9 = add nuw nsw i64 %8, 246
%10 = and i64 %4, 15
%11 = icmp ugt i64 %10, 9
%12 = add nuw nsw i64 %9, %10
%13 = or i64 %10, 48
%14 = select i1 %11, i64 %12, i64 %13
%15 = trunc i64 %14 to i8
%16 = getelementptr inbounds i8, i8* %6, i64 12
store i8 %15, i8* %16
%17 = lshr i64 %4, 4
%18 = and i64 %17, 15
%19 = icmp ugt i64 %18, 9
%20 = add nuw nsw i64 %9, %18
%21 = or i64 %18, 48
%22 = select i1 %19, i64 %20, i64 %21
%23 = trunc i64 %22 to i8
%24 = getelementptr inbounds i8, i8* %6, i64 11
store i8 %23, i8* %24
%25 = lshr i64 %4, 8
%26 = and i64 %25, 15
%27 = icmp ugt i64 %26, 9
%28 = add nuw nsw i64 %9, %26
%29 = or i64 %26, 48
%30 = select i1 %27, i64 %28, i64 %29
%31 = trunc i64 %30 to i8
%32 = getelementptr inbounds i8, i8* %6, i64 10
store i8 %31, i8* %32
%33 = lshr i64 %4, 12
%34 = and i64 %33, 15
%35 = icmp ugt i64 %34, 9
%36 = add nuw nsw i64 %9, %34
%37 = or i64 %34, 48
%38 = select i1 %35, i64 %36, i64 %37
%39 = trunc i64 %38 to i8
%40 = getelementptr inbounds i8, i8* %6, i64 9
store i8 %39, i8* %40
%41 = lshr i64 %4, 16
%42 = and i64 %41, 15
%43 = icmp ugt i64 %42, 9
%44 = add nuw nsw i64 %9, %42
%45 = or i64 %42, 48
%46 = select i1 %43, i64 %44, i64 %45
%47 = trunc i64 %46 to i8
%48 = getelementptr inbounds i8, i8* %6, i64 8
store i8 %47, i8* %48
%49 = lshr i64 %4, 20
%50 = and i64 %49, 15
%51 = icmp ugt i64 %50, 9
%52 = add nuw nsw i64 %9, %50
%53 = or i64 %50, 48
%54 = select i1 %51, i64 %52, i64 %53
%55 = trunc i64 %54 to i8
%56 = getelementptr inbounds i8, i8* %6, i64 7
store i8 %55, i8* %56
%57 = lshr i64 %4, 24
%58 = and i64 %57, 15
%59 = icmp ugt i64 %58, 9
%60 = add nuw nsw i64 %9, %58
%61 = or i64 %58, 48
%62 = select i1 %59, i64 %60, i64 %61
%63 = trunc i64 %62 to i8
%64 = getelementptr inbounds i8, i8* %6, i64 6
store i8 %63, i8* %64
%65 = lshr i64 %4, 28
%66 = and i64 %65, 15
%67 = icmp ugt i64 %66, 9
%68 = add nuw nsw i64 %9, %66
%69 = or i64 %66, 48
%70 = select i1 %67, i64 %68, i64 %69
%71 = trunc i64 %70 to i8
%72 = getelementptr inbounds i8, i8* %6, i64 5
store i8 %71, i8* %72
%73 = lshr i64 %4, 32
%74 = and i64 %73, 15
%75 = icmp ugt i64 %74, 9
%76 = add nuw nsw i64 %9, %74
%77 = or i64 %74, 48
%78 = select i1 %75, i64 %76, i64 %77
%79 = trunc i64 %78 to i8
%80 = getelementptr inbounds i8, i8* %6, i64 4
store i8 %79, i8* %80
%81 = lshr i64 %4, 36
%82 = and i64 %81, 15
%83 = icmp ugt i64 %82, 9
%84 = add nuw nsw i64 %9, %82
%85 = or i64 %82, 48
%86 = select i1 %83, i64 %84, i64 %85
%87 = trunc i64 %86 to i8
%88 = getelementptr inbounds i8, i8* %6, i64 3
store i8 %87, i8* %88
%89 = lshr i64 %4, 40
%90 = and i64 %89, 15
%91 = icmp ugt i64 %90, 9
%92 = add nuw nsw i64 %9, %90
%93 = or i64 %90, 48
%94 = select i1 %91, i64 %92, i64 %93
%95 = trunc i64 %94 to i8
%96 = getelementptr inbounds i8, i8* %6, i64 2
store i8 %95, i8* %96
%97 = lshr i64 %4, 44
%98 = and i64 %97, 15
%99 = icmp ugt i64 %98, 9
%100 = add nuw nsw i64 %9, %98
%101 = or i64 %98, 48
%102 = select i1 %99, i64 %100, i64 %101
%103 = trunc i64 %102 to i8
%104 = getelementptr inbounds i8, i8* %6, i64 1
store i8 %103, i8* %104
%105 = lshr i64 %4, 48
%106 = and i64 %105, 15
%107 = icmp ugt i64 %106, 9
%108 = add nuw nsw i64 %9, %106
%109 = or i64 %106, 48
%110 = select i1 %107, i64 %108, i64 %109
%111 = trunc i64 %110 to i8
store i8 %111, i8* %6
%112 = icmp ne i32 %1, -1
%113 = icmp slt i32 %1, 13
%114 = and i1 %112, %113
br i1 %114, label %115, label %146
115: ; preds = %3
%116 = sext i32 %1 to i64
%117 = getelementptr inbounds i8, i8* %6, i64 %116
%118 = load i8, i8* %117
%119 = icmp sgt i8 %118, 55
br i1 %119, label %120, label %146
120: ; preds = %115
%121 = add nsw i32 %1, -1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %6, i64 %122
%124 = load i8, i8* %123
%125 = icmp eq i8 %124, 57
%126 = add i8 %124, 1
%127 = select i1 %125, i8 %2, i8 %126
store i8 %127, i8* %123
%128 = icmp sgt i32 %1, 1
br i1 %128, label %129, label %146
129: ; preds = %120
%130 = zext i32 %1 to i64
br label %131
131: ; preds = %129, %137
%132 = phi i64 [ %130, %129 ], [ %133, %137 ]
%133 = add nsw i64 %132, -1
%134 = and i64 %133, 4294967295
%135 = getelementptr inbounds i8, i8* %6, i64 %134
%136 = load i8, i8* %135
switch i8 %136, label %146 [
i8 103, label %137
i8 71, label %137
]
137: ; preds = %131, %131
store i8 48, i8* %135
%138 = add nuw i64 %132, 4294967294
%139 = and i64 %138, 4294967295
%140 = getelementptr inbounds i8, i8* %6, i64 %139
%141 = load i8, i8* %140
%142 = icmp eq i8 %141, 57
%143 = add i8 %141, 1
%144 = select i1 %142, i8 %2, i8 %143
store i8 %144, i8* %140
%145 = icmp ugt i64 %132, 2
br i1 %145, label %131, label %146
146: ; preds = %137, %131, %120, %115, %3
%147 = load i8, i8* %16
%148 = icmp eq i8 %147, 48
br i1 %148, label %149, label %186
149: ; preds = %146
store i8 0, i8* %16
%150 = load i8, i8* %24
%151 = icmp eq i8 %150, 48
br i1 %151, label %152, label %186
152: ; preds = %149
store i8 0, i8* %24
%153 = load i8, i8* %32
%154 = icmp eq i8 %153, 48
br i1 %154, label %155, label %186
155: ; preds = %152
store i8 0, i8* %32
%156 = load i8, i8* %40
%157 = icmp eq i8 %156, 48
br i1 %157, label %158, label %186
158: ; preds = %155
store i8 0, i8* %40
%159 = load i8, i8* %48
%160 = icmp eq i8 %159, 48
br i1 %160, label %161, label %186
161: ; preds = %158
store i8 0, i8* %48
%162 = load i8, i8* %56
%163 = icmp eq i8 %162, 48
br i1 %163, label %164, label %186
164: ; preds = %161
store i8 0, i8* %56
%165 = load i8, i8* %64
%166 = icmp eq i8 %165, 48
br i1 %166, label %167, label %186
167: ; preds = %164
store i8 0, i8* %64
%168 = load i8, i8* %72
%169 = icmp eq i8 %168, 48
br i1 %169, label %170, label %186
170: ; preds = %167
store i8 0, i8* %72
%171 = load i8, i8* %80
%172 = icmp eq i8 %171, 48
br i1 %172, label %173, label %186
173: ; preds = %170
store i8 0, i8* %80
%174 = load i8, i8* %88
%175 = icmp eq i8 %174, 48
br i1 %175, label %176, label %186
176: ; preds = %173
store i8 0, i8* %88
%177 = load i8, i8* %96
%178 = icmp eq i8 %177, 48
br i1 %178, label %179, label %186
179: ; preds = %176
store i8 0, i8* %96
%180 = load i8, i8* %104
%181 = icmp eq i8 %180, 48
br i1 %181, label %182, label %186
182: ; preds = %179
store i8 0, i8* %104
%183 = load i8, i8* %6
%184 = icmp eq i8 %183, 48
br i1 %184, label %185, label %186
185: ; preds = %182
store i8 0, i8* %6
br label %186
186: ; preds = %185, %182, %179, %176, %173, %170, %167, %164, %161, %158, %155, %152, %149, %146
ret i8* %6
}