#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 *buildString(char **, int);
int /*<<< orphan*/ eipa_free(void **, int, char *);
char *eipa_malloc(scalar_t__, int, char *);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
scalar_t__ strlen(char *);
char *skeleton(char *kernel_name) {
  char *aux1 = "__global__ void ";
  char *aux2 = "(TODO:add parameters) {";
  char *aux3 =
      eipa_malloc((strlen(kernel_name) + strlen(aux1) + strlen(aux2) + 1), 477,
                  "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/"
                  "outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/"
                  "heads/master/Cuda-SAK/functions.c");
  strcpy(aux3, aux1);
  strcat(aux3, kernel_name);
  strcat(aux3, aux2);
  char *aux4 = "	";
  char *aux5 = "<<<blocks,grid>>>(TODO:parameters);";
  char *aux6 =
      eipa_malloc((strlen(kernel_name) + strlen(aux4) + strlen(aux5) + 1), 485,
                  "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/"
                  "outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/"
                  "heads/master/Cuda-SAK/functions.c");
  strcpy(aux6, aux4);
  strcat(aux6, kernel_name);
  strcat(aux6, aux5);
  char *string[51] = {
      "#include <stdio.h>",
      "#include \"HandleError.h\"",
      "",
      aux3,
      "	//TODO: Kernel code here",
      "}",
      "",
      "int main(void) {",
      "	/*TODO: declare and initialize variables for device and host",
      "	* Example:",
      "	* int histo_h[256];	",
      "	* unsigned int *histo_d;",
      "	*/",
      "",
      "	/*TODO: prepare device memory",
      "	* Example:",
      "	* size_t histo_size_bytes = 256 * sizeof(unsigned int);",
      "	* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );",
      "	*/",
      "	",
      "	HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device "
      "variable name,TODO:size to allocate in the device memory);",
      "",
      "	/*TODO: initialize device variables",
      "	* Example: ",
      "	* "
      "HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,"
      "cudaMemcpyHostToDevice));",
      "	*/",
      "",
      "	HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host "
      "variable,TODO:size allocated to device variable, "
      "cudaMemcpyHostToDevice))",
      "",
      "	//Kernel Call",
      "	dim3 grid(TODO:set grid dimensions);",
      "	dim3 blocks(TODO:set block dimensions);",
      aux6,
      "	cudaDeviceSynchronize();",
      "	cudaError_t err = cudaGetLastError();",
      "	HANDLE_ERROR( err );",
      "",
      "	/*TODO: copy variables from device to host",
      "	* Example: "
      "HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,"
      "cudaMemcpyDeviceToHost));",
      "	*/",
      "	",
      "	HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: "
      "size allocated to device variable, cudaMemcpyDeviceToHost));",
      "",
      "	/*TODO: free device memory",
      "	* Example: HANDLE_ERROR(cudaFree(buffer_d));",
      "	*/",
      "	",
      "	HANDLE_ERROR(cudaFree(TODO:variable to free));",
      "",
      "	return 0;",
      "}"};
  char *final = buildString(string, 51);
  eipa_free((void **)(&(aux3)), 546,
            "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
            "2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/"
            "Cuda-SAK/functions.c");
  eipa_free((void **)(&(aux6)), 547,
            "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
            "2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/"
            "Cuda-SAK/functions.c");
  return final;
}


x86 assembly (clang, -O0):
<skeleton>:
push   %rbp
mov    %rsp,%rbp
sub    $0x200,%rsp
mov    %rdi,-0x8(%rbp)
lea    0xe8a(%rip),%rax
mov    %rax,-0x10(%rbp)
lea    0xe90(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,-0x1f8(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,%rcx
mov    -0x1f8(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x1f0(%rbp)
mov    -0x18(%rbp),%rdi
call   1040 <strlen@plt>
mov    -0x1f0(%rbp),%rdi
add    %rax,%rdi
add    $0x1,%rdi
mov    $0x1dd,%esi
lea    0xe54(%rip),%rdx
call   1070 <eipa_malloc@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <strcat@plt>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1080 <strcat@plt>
lea    0xf8d(%rip),%rax
mov    %rax,-0x28(%rbp)
lea    0xea7(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,-0x1e8(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,%rcx
mov    -0x1e8(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x1e0(%rbp)
mov    -0x30(%rbp),%rdi
call   1040 <strlen@plt>
mov    -0x1e0(%rbp),%rdi
add    %rax,%rdi
add    $0x1,%rdi
mov    $0x1e5,%esi
lea    0xdbe(%rip),%rdx
call   1070 <eipa_malloc@plt>
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x38(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <strcat@plt>
mov    -0x38(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1080 <strcat@plt>
lea    0xe40(%rip),%rax
mov    %rax,-0x1d0(%rbp)
lea    0xe45(%rip),%rax
mov    %rax,-0x1c8(%rbp)
lea    0xedc(%rip),%rax
mov    %rax,-0x1c0(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x1b8(%rbp)
lea    0xe37(%rip),%rax
mov    %rax,-0x1b0(%rbp)
lea    0xe43(%rip),%rax
mov    %rax,-0x1a8(%rbp)
lea    0xea7(%rip),%rax
mov    %rax,-0x1a0(%rbp)
lea    0xe29(%rip),%rax
mov    %rax,-0x198(%rbp)
lea    0xe2c(%rip),%rax
mov    %rax,-0x190(%rbp)
lea    0xe5c(%rip),%rax
mov    %rax,-0x188(%rbp)
lea    0xe5a(%rip),%rax
mov    %rax,-0x180(%rbp)
lea    0xe62(%rip),%rax
mov    %rax,-0x178(%rbp)
lea    0xe6e(%rip),%rax
mov    %rax,-0x170(%rbp)
lea    0xe45(%rip),%rax
mov    %rax,-0x168(%rbp)
lea    0xe56(%rip),%rax
mov    %rax,-0x160(%rbp)
lea    0xe08(%rip),%rax
mov    %rax,-0x158(%rbp)
lea    0xe59(%rip),%rax
mov    %rax,-0x150(%rbp)
lea    0xe84(%rip),%rax
mov    %rax,-0x148(%rbp)
lea    0xe1a(%rip),%rax
mov    %rax,-0x140(%rbp)
lea    0xdf0(%rip),%rax
mov    %rax,-0x138(%rbp)
lea    0xe9b(%rip),%rax
mov    %rax,-0x130(%rbp)
lea    0xdd5(%rip),%rax
mov    %rax,-0x128(%rbp)
lea    0xf01(%rip),%rax
mov    %rax,-0x120(%rbp)
lea    0xf18(%rip),%rax
mov    %rax,-0x118(%rbp)
lea    0xf17(%rip),%rax
mov    %rax,-0x110(%rbp)
lea    0xdb8(%rip),%rax
mov    %rax,-0x108(%rbp)
lea    0xd8f(%rip),%rax
mov    %rax,-0x100(%rbp)
lea    0xf46(%rip),%rax
mov    %rax,-0xf8(%rbp)
lea    0xd73(%rip),%rax
mov    %rax,-0xf0(%rbp)
lea    0xfac(%rip),%rax
mov    %rax,-0xe8(%rbp)
lea    0xfad(%rip),%rax
mov    %rax,-0xe0(%rbp)
lea    0xfc5(%rip),%rax
mov    %rax,-0xd8(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0xd0(%rbp)
lea    0xfd5(%rip),%rax
mov    %rax,-0xc8(%rbp)
lea    0xfe1(%rip),%rax
mov    %rax,-0xc0(%rbp)
lea    0xffa(%rip),%rax
mov    %rax,-0xb8(%rbp)
lea    0xd06(%rip),%rax
mov    %rax,-0xb0(%rbp)
lea    0xff4(%rip),%rax
mov    %rax,-0xa8(%rbp)
lea    0x1012(%rip),%rax
mov    %rax,-0xa0(%rbp)
lea    0xcf7(%rip),%rax
mov    %rax,-0x98(%rbp)
lea    0xccd(%rip),%rax
mov    %rax,-0x90(%rbp)
lea    0x1047(%rip),%rax
mov    %rax,-0x88(%rbp)
lea    0xcb2(%rip),%rax
mov    %rax,-0x80(%rbp)
lea    0x10b2(%rip),%rax
mov    %rax,-0x78(%rbp)
lea    0x10c3(%rip),%rax
mov    %rax,-0x70(%rbp)
lea    0xcac(%rip),%rax
mov    %rax,-0x68(%rbp)
lea    0xc85(%rip),%rax
mov    %rax,-0x60(%rbp)
lea    0x10d0(%rip),%rax
mov    %rax,-0x58(%rbp)
lea    0xc70(%rip),%rax
mov    %rax,-0x50(%rbp)
lea    0x10ea(%rip),%rax
mov    %rax,-0x48(%rbp)
lea    0xbe8(%rip),%rax
mov    %rax,-0x40(%rbp)
lea    -0x1d0(%rbp),%rdi
mov    $0x33,%esi
call   1050 <buildString@plt>
mov    %rax,-0x1d8(%rbp)
lea    -0x20(%rbp),%rdi
mov    $0x222,%esi
lea    0xabd(%rip),%rdx
call   1060 <eipa_free@plt>
lea    -0x38(%rbp),%rdi
mov    $0x223,%esi
lea    0xaa8(%rip),%rdx
call   1060 <eipa_free@plt>
mov    -0x1d8(%rbp),%rax
add    $0x200,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<skeleton>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1b0,%rsp
mov    %rdi,%r12
call   1040 <strlen@plt>
lea    0x28(%rax),%rdi
lea    0xea6(%rip),%r14
mov    $0x1dd,%esi
mov    %r14,%rdx
call   1070 <eipa_malloc@plt>
mov    %rax,%rbx
mov    %rax,0x8(%rsp)
lea    0xe61(%rip),%rsi
mov    %rax,%rdi
call   1030 <strcpy@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1080 <strcat@plt>
lea    0xe58(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcat@plt>
mov    %r12,%rdi
call   1040 <strlen@plt>
lea    0x25(%rax),%rdi
mov    $0x1e5,%esi
mov    %r14,%rdx
call   1070 <eipa_malloc@plt>
mov    %rax,%r13
mov    %rax,(%rsp)
lea    0xfb1(%rip),%r15
mov    %rax,%rdi
mov    %r15,%rsi
call   1030 <strcpy@plt>
mov    %r13,%rdi
mov    %r12,%rsi
call   1080 <strcat@plt>
lea    0xeb9(%rip),%rsi
mov    %r13,%rdi
call   1080 <strcat@plt>
lea    0xece(%rip),%rax
mov    %rax,0x10(%rsp)
lea    0xed5(%rip),%rax
mov    %rax,0x18(%rsp)
lea    0xf6e(%rip),%rax
mov    %rax,0x20(%rsp)
mov    %rbx,0x28(%rsp)
lea    0xed1(%rip),%rcx
mov    %rcx,0x30(%rsp)
lea    0xedf(%rip),%rcx
mov    %rcx,0x38(%rsp)
mov    %rax,0x40(%rsp)
lea    0xed0(%rip),%rdx
mov    %rdx,0x48(%rsp)
lea    0xed5(%rip),%rdx
mov    %rdx,0x50(%rsp)
lea    0xf07(%rip),%rsi
mov    %rsi,0x58(%rsp)
lea    0xf07(%rip),%rdx
mov    %rdx,0x60(%rsp)
lea    0xf11(%rip),%rdx
mov    %rdx,0x68(%rsp)
lea    0xf1f(%rip),%rdx
mov    %rdx,0x70(%rsp)
mov    %rax,0x78(%rsp)
lea    0xf12(%rip),%rdi
mov    %rdi,0x80(%rsp)
mov    %rsi,0x88(%rsp)
lea    0xf1a(%rip),%rsi
mov    %rsi,0x90(%rsp)
lea    0xf44(%rip),%rsi
mov    %rsi,0x98(%rsp)
mov    %rdx,0xa0(%rsp)
mov    %r15,0xa8(%rsp)
lea    0xf66(%rip),%rsi
mov    %rsi,0xb0(%rsp)
mov    %rax,0xb8(%rsp)
lea    0xfd1(%rip),%rsi
mov    %rsi,0xc0(%rsp)
lea    0xfe7(%rip),%rsi
mov    %rsi,0xc8(%rsp)
lea    0xfe5(%rip),%rsi
mov    %rsi,0xd0(%rsp)
mov    %rdx,0xd8(%rsp)
mov    %rax,0xe0(%rsp)
lea    0x101f(%rip),%rsi
mov    %rsi,0xe8(%rsp)
mov    %rax,0xf0(%rsp)
lea    0x108a(%rip),%rsi
mov    %rsi,0xf8(%rsp)
lea    0x108a(%rip),%rsi
mov    %rsi,0x100(%rsp)
lea    0x10a1(%rip),%rsi
mov    %rsi,0x108(%rsp)
mov    %r13,0x110(%rsp)
lea    0x10b3(%rip),%rsi
mov    %rsi,0x118(%rsp)
lea    0x10be(%rip),%rsi
mov    %rsi,0x120(%rsp)
lea    0x10d6(%rip),%rsi
mov    %rsi,0x128(%rsp)
mov    %rax,0x130(%rsp)
lea    0x10d5(%rip),%rsi
mov    %rsi,0x138(%rsp)
lea    0x10f2(%rip),%rsi
mov    %rsi,0x140(%rsp)
mov    %rdx,0x148(%rsp)
mov    %r15,0x150(%rsp)
lea    0x1132(%rip),%rsi
mov    %rsi,0x158(%rsp)
mov    %rax,0x160(%rsp)
lea    0x119f(%rip),%rsi
mov    %rsi,0x168(%rsp)
lea    0x11ac(%rip),%rsi
mov    %rsi,0x170(%rsp)
mov    %rdx,0x178(%rsp)
mov    %r15,0x180(%rsp)
lea    0x11bb(%rip),%rdx
mov    %rdx,0x188(%rsp)
mov    %rax,0x190(%rsp)
lea    0x11d4(%rip),%rax
mov    %rax,0x198(%rsp)
mov    %rcx,0x1a0(%rsp)
lea    0x10(%rsp),%rdi
mov    $0x33,%esi
call   1050 <buildString@plt>
mov    %rax,%rbx
lea    0x8(%rsp),%rdi
mov    $0x222,%esi
mov    %r14,%rdx
call   1060 <eipa_free@plt>
mov    %rsp,%rdi
mov    $0x223,%esi
mov    %r14,%rdx
call   1060 <eipa_free@plt>
mov    %rbx,%rax
add    $0x1b0,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [17 x i8] c"__global__ void \00"
@.str.1 = [24 x i8] c"(TODO:add parameters) {\00"
@.str.2 = [149 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c\00"
@.str.3 = [2 x i8] c"\09\00"
@.str.4 = [36 x i8] c"<<<blocks,grid>>>(TODO:parameters);\00"
@.str.5 = [19 x i8] c"#include <stdio.h>\00"
@.str.6 = [25 x i8] c"#include \22HandleError.h\22\00"
@.str.7 = [1 x i8] zeroinitializer
@.str.8 = [26 x i8] c"\09//TODO: Kernel code here\00"
@.str.9 = [2 x i8] c"}\00"
@.str.10 = [17 x i8] c"int main(void) {\00"
@.str.11 = [62 x i8] c"\09/*TODO: declare and initialize variables for device and host\00"
@.str.12 = [12 x i8] c"\09* Example:\00"
@.str.13 = [22 x i8] c"\09* int histo_h[256];\09\00"
@.str.14 = [26 x i8] c"\09* unsigned int *histo_d;\00"
@.str.15 = [4 x i8] c"\09*/\00"
@.str.16 = [31 x i8] c"\09/*TODO: prepare device memory\00"
@.str.17 = [57 x i8] c"\09* size_t histo_size_bytes = 256 * sizeof(unsigned int);\00"
@.str.18 = [65 x i8] c"\09* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );\00"
@.str.19 = [130 x i8] c"\09HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device variable name,TODO:size to allocate in the device memory);\00"
@.str.20 = [37 x i8] c"\09/*TODO: initialize device variables\00"
@.str.21 = [13 x i8] c"\09* Example: \00"
@.str.22 = [89 x i8] c"\09* HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,cudaMemcpyHostToDevice));\00"
@.str.23 = [130 x i8] c"\09HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host variable,TODO:size allocated to device variable, cudaMemcpyHostToDevice))\00"
@.str.24 = [15 x i8] c"\09//Kernel Call\00"
@.str.25 = [38 x i8] c"\09dim3 grid(TODO:set grid dimensions);\00"
@.str.26 = [41 x i8] c"\09dim3 blocks(TODO:set block dimensions);\00"
@.str.27 = [26 x i8] c"\09cudaDeviceSynchronize();\00"
@.str.28 = [39 x i8] c"\09cudaError_t err = cudaGetLastError();\00"
@.str.29 = [22 x i8] c"\09HANDLE_ERROR( err );\00"
@.str.30 = [44 x i8] c"\09/*TODO: copy variables from device to host\00"
@.str.31 = [95 x i8] c"\09* Example: HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,cudaMemcpyDeviceToHost));\00"
@.str.32 = [132 x i8] c"\09HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: size allocated to device variable, cudaMemcpyDeviceToHost));\00"
@.str.33 = [28 x i8] c"\09/*TODO: free device memory\00"
@.str.34 = [46 x i8] c"\09* Example: HANDLE_ERROR(cudaFree(buffer_d));\00"
@.str.35 = [48 x i8] c"\09HANDLE_ERROR(cudaFree(TODO:variable to free));\00"
@.str.36 = [11 x i8] c"\09return 0;\00"
define i8* @skeleton(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca [51 x i8*]
%10 = alloca i8*
store i8* %0, i8** %2
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8** %3
store i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0), i8** %4
%11 = load i8*, i8** %2
%12 = call i64 @strlen(i8* %11)
%13 = load i8*, i8** %3
%14 = call i64 @strlen(i8* %13)
%15 = add nsw i64 %12, %14
%16 = load i8*, i8** %4
%17 = call i64 @strlen(i8* %16)
%18 = add nsw i64 %15, %17
%19 = add nsw i64 %18, 1
%20 = call i8* @eipa_malloc(i64 %19, i32 477, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
store i8* %20, i8** %5
%21 = load i8*, i8** %5
%22 = load i8*, i8** %3
%23 = call i32 @strcpy(i8* %21, i8* %22)
%24 = load i8*, i8** %5
%25 = load i8*, i8** %2
%26 = call i32 @strcat(i8* %24, i8* %25)
%27 = load i8*, i8** %5
%28 = load i8*, i8** %4
%29 = call i32 @strcat(i8* %27, i8* %28)
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %6
store i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0), i8** %7
%30 = load i8*, i8** %2
%31 = call i64 @strlen(i8* %30)
%32 = load i8*, i8** %6
%33 = call i64 @strlen(i8* %32)
%34 = add nsw i64 %31, %33
%35 = load i8*, i8** %7
%36 = call i64 @strlen(i8* %35)
%37 = add nsw i64 %34, %36
%38 = add nsw i64 %37, 1
%39 = call i8* @eipa_malloc(i64 %38, i32 485, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
store i8* %39, i8** %8
%40 = load i8*, i8** %8
%41 = load i8*, i8** %6
%42 = call i32 @strcpy(i8* %40, i8* %41)
%43 = load i8*, i8** %8
%44 = load i8*, i8** %2
%45 = call i32 @strcat(i8* %43, i8* %44)
%46 = load i8*, i8** %8
%47 = load i8*, i8** %7
%48 = call i32 @strcat(i8* %46, i8* %47)
%49 = getelementptr inbounds [51 x i8*], [51 x i8*]* %9, i64 0, i64 0
store i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.5, i64 0, i64 0), i8** %49
%50 = getelementptr inbounds i8*, i8** %49, i64 1
store i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0), i8** %50
%51 = getelementptr inbounds i8*, i8** %50, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %51
%52 = getelementptr inbounds i8*, i8** %51, i64 1
%53 = load i8*, i8** %5
store i8* %53, i8** %52
%54 = getelementptr inbounds i8*, i8** %52, i64 1
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.8, i64 0, i64 0), i8** %54
%55 = getelementptr inbounds i8*, i8** %54, i64 1
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0), i8** %55
%56 = getelementptr inbounds i8*, i8** %55, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %56
%57 = getelementptr inbounds i8*, i8** %56, i64 1
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i64 0, i64 0), i8** %57
%58 = getelementptr inbounds i8*, i8** %57, i64 1
store i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.11, i64 0, i64 0), i8** %58
%59 = getelementptr inbounds i8*, i8** %58, i64 1
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0), i8** %59
%60 = getelementptr inbounds i8*, i8** %59, i64 1
store i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.13, i64 0, i64 0), i8** %60
%61 = getelementptr inbounds i8*, i8** %60, i64 1
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.14, i64 0, i64 0), i8** %61
%62 = getelementptr inbounds i8*, i8** %61, i64 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %62
%63 = getelementptr inbounds i8*, i8** %62, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %63
%64 = getelementptr inbounds i8*, i8** %63, i64 1
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), i8** %64
%65 = getelementptr inbounds i8*, i8** %64, i64 1
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0), i8** %65
%66 = getelementptr inbounds i8*, i8** %65, i64 1
store i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.17, i64 0, i64 0), i8** %66
%67 = getelementptr inbounds i8*, i8** %66, i64 1
store i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.18, i64 0, i64 0), i8** %67
%68 = getelementptr inbounds i8*, i8** %67, i64 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %68
%69 = getelementptr inbounds i8*, i8** %68, i64 1
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %69
%70 = getelementptr inbounds i8*, i8** %69, i64 1
store i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str.19, i64 0, i64 0), i8** %70
%71 = getelementptr inbounds i8*, i8** %70, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %71
%72 = getelementptr inbounds i8*, i8** %71, i64 1
store i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.20, i64 0, i64 0), i8** %72
%73 = getelementptr inbounds i8*, i8** %72, i64 1
store i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.21, i64 0, i64 0), i8** %73
%74 = getelementptr inbounds i8*, i8** %73, i64 1
store i8* getelementptr inbounds ([89 x i8], [89 x i8]* @.str.22, i64 0, i64 0), i8** %74
%75 = getelementptr inbounds i8*, i8** %74, i64 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %75
%76 = getelementptr inbounds i8*, i8** %75, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %76
%77 = getelementptr inbounds i8*, i8** %76, i64 1
store i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str.23, i64 0, i64 0), i8** %77
%78 = getelementptr inbounds i8*, i8** %77, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %78
%79 = getelementptr inbounds i8*, i8** %78, i64 1
store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.24, i64 0, i64 0), i8** %79
%80 = getelementptr inbounds i8*, i8** %79, i64 1
store i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0), i8** %80
%81 = getelementptr inbounds i8*, i8** %80, i64 1
store i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.26, i64 0, i64 0), i8** %81
%82 = getelementptr inbounds i8*, i8** %81, i64 1
%83 = load i8*, i8** %8
store i8* %83, i8** %82
%84 = getelementptr inbounds i8*, i8** %82, i64 1
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.27, i64 0, i64 0), i8** %84
%85 = getelementptr inbounds i8*, i8** %84, i64 1
store i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.28, i64 0, i64 0), i8** %85
%86 = getelementptr inbounds i8*, i8** %85, i64 1
store i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.29, i64 0, i64 0), i8** %86
%87 = getelementptr inbounds i8*, i8** %86, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %87
%88 = getelementptr inbounds i8*, i8** %87, i64 1
store i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.30, i64 0, i64 0), i8** %88
%89 = getelementptr inbounds i8*, i8** %88, i64 1
store i8* getelementptr inbounds ([95 x i8], [95 x i8]* @.str.31, i64 0, i64 0), i8** %89
%90 = getelementptr inbounds i8*, i8** %89, i64 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %90
%91 = getelementptr inbounds i8*, i8** %90, i64 1
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %91
%92 = getelementptr inbounds i8*, i8** %91, i64 1
store i8* getelementptr inbounds ([132 x i8], [132 x i8]* @.str.32, i64 0, i64 0), i8** %92
%93 = getelementptr inbounds i8*, i8** %92, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %93
%94 = getelementptr inbounds i8*, i8** %93, i64 1
store i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.33, i64 0, i64 0), i8** %94
%95 = getelementptr inbounds i8*, i8** %94, i64 1
store i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.34, i64 0, i64 0), i8** %95
%96 = getelementptr inbounds i8*, i8** %95, i64 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %96
%97 = getelementptr inbounds i8*, i8** %96, i64 1
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %97
%98 = getelementptr inbounds i8*, i8** %97, i64 1
store i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.35, i64 0, i64 0), i8** %98
%99 = getelementptr inbounds i8*, i8** %98, i64 1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %99
%100 = getelementptr inbounds i8*, i8** %99, i64 1
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.36, i64 0, i64 0), i8** %100
%101 = getelementptr inbounds i8*, i8** %100, i64 1
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0), i8** %101
%102 = getelementptr inbounds [51 x i8*], [51 x i8*]* %9, i64 0, i64 0
%103 = call i8* @buildString(i8** %102, i32 51)
store i8* %103, i8** %10
%104 = call i32 @eipa_free(i8** %5, i32 546, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
%105 = call i32 @eipa_free(i8** %8, i32 547, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
%106 = load i8*, i8** %10
ret i8* %106
}

LLVM IR (-O2):
@.str = [17 x i8] c"__global__ void \00"
@.str.1 = [24 x i8] c"(TODO:add parameters) {\00"
@.str.2 = [149 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/WikiDreams/CUDA-SAK/refs/heads/master/Cuda-SAK/functions.c\00"
@.str.3 = [2 x i8] c"\09\00"
@.str.4 = [36 x i8] c"<<<blocks,grid>>>(TODO:parameters);\00"
@.str.5 = [19 x i8] c"#include <stdio.h>\00"
@.str.6 = [25 x i8] c"#include \22HandleError.h\22\00"
@.str.7 = [1 x i8] zeroinitializer
@.str.8 = [26 x i8] c"\09//TODO: Kernel code here\00"
@.str.9 = [2 x i8] c"}\00"
@.str.10 = [17 x i8] c"int main(void) {\00"
@.str.11 = [62 x i8] c"\09/*TODO: declare and initialize variables for device and host\00"
@.str.12 = [12 x i8] c"\09* Example:\00"
@.str.13 = [22 x i8] c"\09* int histo_h[256];\09\00"
@.str.14 = [26 x i8] c"\09* unsigned int *histo_d;\00"
@.str.15 = [4 x i8] c"\09*/\00"
@.str.16 = [31 x i8] c"\09/*TODO: prepare device memory\00"
@.str.17 = [57 x i8] c"\09* size_t histo_size_bytes = 256 * sizeof(unsigned int);\00"
@.str.18 = [65 x i8] c"\09* HANDLE_ERROR( cudaMalloc((int**)&histo_d,histo_size_bytes) );\00"
@.str.19 = [130 x i8] c"\09HANDLE_ERROR( cudaMalloc((TODO:add cast to variable type)&TODO:device variable name,TODO:size to allocate in the device memory);\00"
@.str.20 = [37 x i8] c"\09/*TODO: initialize device variables\00"
@.str.21 = [13 x i8] c"\09* Example: \00"
@.str.22 = [89 x i8] c"\09* HANDLE_ERROR(cudaMemcpy(buffer_d,buffer_h,buffer_size_bytes,cudaMemcpyHostToDevice));\00"
@.str.23 = [130 x i8] c"\09HANDLE_ERROR(cudaMemcpy(TODO:device variable,TODO:host variable,TODO:size allocated to device variable, cudaMemcpyHostToDevice))\00"
@.str.24 = [15 x i8] c"\09//Kernel Call\00"
@.str.25 = [38 x i8] c"\09dim3 grid(TODO:set grid dimensions);\00"
@.str.26 = [41 x i8] c"\09dim3 blocks(TODO:set block dimensions);\00"
@.str.27 = [26 x i8] c"\09cudaDeviceSynchronize();\00"
@.str.28 = [39 x i8] c"\09cudaError_t err = cudaGetLastError();\00"
@.str.29 = [22 x i8] c"\09HANDLE_ERROR( err );\00"
@.str.30 = [44 x i8] c"\09/*TODO: copy variables from device to host\00"
@.str.31 = [95 x i8] c"\09* Example: HANDLE_ERROR(cudaMemcpy(histo_h,histo_d,histo_size_bytes,cudaMemcpyDeviceToHost));\00"
@.str.32 = [132 x i8] c"\09HANDLE_ERROR(cudaMemcpy(TODO:host variable,TODO:device variable,TODO: size allocated to device variable, cudaMemcpyDeviceToHost));\00"
@.str.33 = [28 x i8] c"\09/*TODO: free device memory\00"
@.str.34 = [46 x i8] c"\09* Example: HANDLE_ERROR(cudaFree(buffer_d));\00"
@.str.35 = [48 x i8] c"\09HANDLE_ERROR(cudaFree(TODO:variable to free));\00"
@.str.36 = [11 x i8] c"\09return 0;\00"
define i8* @skeleton(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca [51 x i8*]
%5 = bitcast i8** %2 to i8*
%6 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%7 = add nsw i64 %6, 40
%8 = tail call i8* @eipa_malloc(i64 %7, i32 477, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
store i8* %8, i8** %2
%9 = tail call i32 @strcpy(i8* %8, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0))
%10 = tail call i32 @strcat(i8* %8, i8* %0)
%11 = tail call i32 @strcat(i8* %8, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0))
%12 = bitcast i8** %3 to i8*
%13 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%14 = add nsw i64 %13, 37
%15 = tail call i8* @eipa_malloc(i64 %14, i32 485, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
store i8* %15, i8** %3
%16 = tail call i32 @strcpy(i8* %15, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%17 = tail call i32 @strcat(i8* %15, i8* %0)
%18 = tail call i32 @strcat(i8* %15, i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.4, i64 0, i64 0))
%19 = bitcast [51 x i8*]* %4 to i8*
%20 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 0
store i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.5, i64 0, i64 0), i8** %20
%21 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 1
store i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0), i8** %21
%22 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 2
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %22
%23 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 3
store i8* %8, i8** %23
%24 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 4
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.8, i64 0, i64 0), i8** %24
%25 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 5
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0), i8** %25
%26 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 6
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %26
%27 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 7
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i64 0, i64 0), i8** %27
%28 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 8
store i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.11, i64 0, i64 0), i8** %28
%29 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 9
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0), i8** %29
%30 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 10
store i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.13, i64 0, i64 0), i8** %30
%31 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 11
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.14, i64 0, i64 0), i8** %31
%32 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 12
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %32
%33 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 13
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %33
%34 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 14
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), i8** %34
%35 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 15
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0), i8** %35
%36 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 16
store i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.17, i64 0, i64 0), i8** %36
%37 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 17
store i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.18, i64 0, i64 0), i8** %37
%38 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 18
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %38
%39 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 19
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %39
%40 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 20
store i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str.19, i64 0, i64 0), i8** %40
%41 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 21
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %41
%42 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 22
store i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.20, i64 0, i64 0), i8** %42
%43 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 23
store i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.21, i64 0, i64 0), i8** %43
%44 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 24
store i8* getelementptr inbounds ([89 x i8], [89 x i8]* @.str.22, i64 0, i64 0), i8** %44
%45 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 25
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %45
%46 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 26
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %46
%47 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 27
store i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str.23, i64 0, i64 0), i8** %47
%48 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 28
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %48
%49 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 29
store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.24, i64 0, i64 0), i8** %49
%50 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 30
store i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.25, i64 0, i64 0), i8** %50
%51 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 31
store i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.26, i64 0, i64 0), i8** %51
%52 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 32
store i8* %15, i8** %52
%53 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 33
store i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.27, i64 0, i64 0), i8** %53
%54 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 34
store i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.28, i64 0, i64 0), i8** %54
%55 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 35
store i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.29, i64 0, i64 0), i8** %55
%56 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 36
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %56
%57 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 37
store i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.30, i64 0, i64 0), i8** %57
%58 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 38
store i8* getelementptr inbounds ([95 x i8], [95 x i8]* @.str.31, i64 0, i64 0), i8** %58
%59 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 39
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %59
%60 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 40
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %60
%61 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 41
store i8* getelementptr inbounds ([132 x i8], [132 x i8]* @.str.32, i64 0, i64 0), i8** %61
%62 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 42
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %62
%63 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 43
store i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.33, i64 0, i64 0), i8** %63
%64 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 44
store i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.34, i64 0, i64 0), i8** %64
%65 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 45
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i64 0, i64 0), i8** %65
%66 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 46
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0), i8** %66
%67 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 47
store i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.35, i64 0, i64 0), i8** %67
%68 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 48
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.7, i64 0, i64 0), i8** %68
%69 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 49
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.36, i64 0, i64 0), i8** %69
%70 = getelementptr inbounds [51 x i8*], [51 x i8*]* %4, i64 0, i64 50
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0), i8** %70
%71 = call i8* @buildString(i8** %20, i32 51)
%72 = call i32 @eipa_free(i8** %2, i32 546, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
%73 = call i32 @eipa_free(i8** %3, i32 547, i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.2, i64 0, i64 0))
ret i8* %71
}