#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 */
char *malloc(int);
char *lvm_uuid_format(char uuid[]) {
  int x;
  char *f_uuid = malloc(sizeof(char) * 38);
  for (x = 0; x < 6; x++)
    f_uuid[x] = uuid[x];
  f_uuid[x] = 0x2d;
  for (x = 6; x < 10; x++)
    f_uuid[x + 1] = uuid[x];
  f_uuid[x + 1] = 0x2d;
  for (x = 10; x < 14; x++)
    f_uuid[x + 2] = uuid[x];
  f_uuid[x + 2] = 0x2d;
  for (x = 14; x < 18; x++)
    f_uuid[x + 3] = uuid[x];
  f_uuid[x + 3] = 0x2d;
  for (x = 18; x < 22; x++)
    f_uuid[x + 4] = uuid[x];
  f_uuid[x + 4] = 0x2d;
  for (x = 22; x < 26; x++)
    f_uuid[x + 5] = uuid[x];
  f_uuid[x + 5] = 0x2d;
  for (x = 26; x < 32; x++)
    f_uuid[x + 6] = uuid[x];
  return f_uuid;
}


x86 assembly (clang, -O0):
<lvm_uuid_format>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    $0x26,%edi
call   1030 <malloc@plt>
mov    %rax,-0x18(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x6,-0xc(%rbp)
jge    115f <lvm_uuid_format+0x4f>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1131 <lvm_uuid_format+0x21>
mov    -0x18(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x6,-0xc(%rbp)
cmpl   $0xa,-0xc(%rbp)
jge    11a5 <lvm_uuid_format+0x95>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1172 <lvm_uuid_format+0x62>
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0xa,-0xc(%rbp)
cmpl   $0xe,-0xc(%rbp)
jge    11f0 <lvm_uuid_format+0xe0>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11bd <lvm_uuid_format+0xad>
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0xe,-0xc(%rbp)
cmpl   $0x12,-0xc(%rbp)
jge    123b <lvm_uuid_format+0x12b>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1208 <lvm_uuid_format+0xf8>
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x12,-0xc(%rbp)
cmpl   $0x16,-0xc(%rbp)
jge    1286 <lvm_uuid_format+0x176>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1253 <lvm_uuid_format+0x143>
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x16,-0xc(%rbp)
cmpl   $0x1a,-0xc(%rbp)
jge    12d1 <lvm_uuid_format+0x1c1>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    129e <lvm_uuid_format+0x18e>
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
movl   $0x1a,-0xc(%rbp)
cmpl   $0x20,-0xc(%rbp)
jge    131c <lvm_uuid_format+0x20c>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12e9 <lvm_uuid_format+0x1d9>
mov    -0x18(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<lvm_uuid_format>:
push   %rbx
mov    %rdi,%rbx
mov    $0x26,%edi
call   1030 <malloc@plt>
mov    (%rbx),%ecx
mov    %ecx,(%rax)
movzwl 0x4(%rbx),%ecx
mov    %cx,0x4(%rax)
movb   $0x2d,0x6(%rax)
mov    0x6(%rbx),%ecx
mov    %ecx,0x7(%rax)
movb   $0x2d,0xb(%rax)
mov    0xa(%rbx),%ecx
mov    %ecx,0xc(%rax)
movb   $0x2d,0x10(%rax)
mov    0xe(%rbx),%ecx
mov    %ecx,0x11(%rax)
movb   $0x2d,0x15(%rax)
mov    0x12(%rbx),%ecx
mov    %ecx,0x16(%rax)
movb   $0x2d,0x1a(%rax)
mov    0x16(%rbx),%ecx
mov    %ecx,0x1b(%rax)
movb   $0x2d,0x1f(%rax)
movzwl 0x1e(%rbx),%ecx
mov    %cx,0x24(%rax)
mov    0x1a(%rbx),%ecx
mov    %ecx,0x20(%rax)
pop    %rbx
ret

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

LLVM IR (-O2):
define noalias i8* @lvm_uuid_format(i8* nocapture %0) {
%2 = tail call dereferenceable_or_null(38) i8* @malloc(i32 38)
%3 = getelementptr inbounds i8, i8* %2, i64 6
store i8 45, i8* %3
%4 = getelementptr i8, i8* %2, i64 7
%5 = getelementptr i8, i8* %0, i64 6
%6 = bitcast i8* %5 to i32*
%7 = bitcast i8* %4 to i32*
%8 = load i32, i32* %6
store i32 %8, i32* %7
%9 = getelementptr inbounds i8, i8* %2, i64 11
store i8 45, i8* %9
%10 = getelementptr i8, i8* %2, i64 12
%11 = getelementptr i8, i8* %0, i64 10
%12 = bitcast i8* %11 to i32*
%13 = bitcast i8* %10 to i32*
%14 = load i32, i32* %12
store i32 %14, i32* %13
%15 = getelementptr inbounds i8, i8* %2, i64 16
store i8 45, i8* %15
%16 = getelementptr i8, i8* %2, i64 17
%17 = getelementptr i8, i8* %0, i64 14
%18 = bitcast i8* %17 to i32*
%19 = bitcast i8* %16 to i32*
%20 = load i32, i32* %18
store i32 %20, i32* %19
%21 = getelementptr inbounds i8, i8* %2, i64 21
store i8 45, i8* %21
%22 = getelementptr i8, i8* %2, i64 22
%23 = getelementptr i8, i8* %0, i64 18
%24 = bitcast i8* %23 to i32*
%25 = bitcast i8* %22 to i32*
%26 = load i32, i32* %24
store i32 %26, i32* %25
%27 = getelementptr inbounds i8, i8* %2, i64 26
store i8 45, i8* %27
%28 = getelementptr i8, i8* %2, i64 27
%29 = getelementptr i8, i8* %0, i64 22
%30 = bitcast i8* %29 to i32*
%31 = bitcast i8* %28 to i32*
%32 = load i32, i32* %30
store i32 %32, i32* %31
%33 = getelementptr inbounds i8, i8* %2, i64 31
store i8 45, i8* %33
%34 = getelementptr i8, i8* %2, i64 32
%35 = getelementptr i8, i8* %0, i64 26
ret i8* %2
}