#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 *construct_insert(char *, char **, char **);
int /*<<< orphan*/ exec_nonquery(char *);
char *format_string(char *);
int /*<<< orphan*/ free(char *);
int new_task_id();
int /*<<< orphan*/ sprintf(char *, char *, int);
char *strdup(char *);
char *upper(char *);
void create_task(char *name, char *state, char *desc, char *notes,
                 char *est_start, char *est_end, char *start, char *end,
                 char *prior, char *type, char *est_time, char *time) {
  char *f_name = format_string(name);
  char *f_state = format_string(state);
  char *u_state = upper(f_state);
  char *f_desc = NULL;
  if (desc != NULL)
    f_desc = format_string(desc);
  else {
    f_desc = strdup("NULL");
  }
  char *f_notes = NULL;
  if (notes != NULL)
    notes = format_string(notes);
  else {
    f_notes = strdup("NULL");
  }
  char *f_est_start = NULL;
  if (est_start != NULL)
    f_est_start = format_string(est_start);
  else {
    f_est_start = strdup("NULL");
  }
  char *f_est_end = NULL;
  if (est_end != NULL)
    f_est_end = format_string(est_end);
  else {
    f_est_end = strdup("NULL");
  }
  char *f_start = NULL;
  if (start != NULL)
    f_start = format_string(start);
  else {
    f_start = strdup("NULL");
  }
  char *f_end = NULL;
  if (end != NULL)
    f_end = format_string(end);
  else {
    f_end = strdup("NULL");
  }
  char *f_prior = format_string(prior);
  char *u_prior = upper(f_prior);
  char *f_type = format_string(type);
  char *u_type = upper(f_type);
  char *f_est_time = NULL;
  if (est_time != NULL)
    f_est_time = strdup(est_time);
  else {
    f_est_time = strdup("NULL");
  }
  char *f_time = NULL;
  if (time != NULL)
    f_time = strdup(time);
  else {
    f_time = strdup("NULL");
  }
  int id = new_task_id();
  char new_id[10 + 1];
  sprintf(new_id, "%d", id);
  char *insert = NULL;
  char *field_names[] = {"ID",
                         "NOMBRE_TAREA",
                         "ESTADO_TAREA",
                         "DESCRIPCION",
                         "NOTAS",
                         "FECHA_INICIO_ESTIMADA",
                         "FECHA_FINAL_ESTIMADA",
                         "FECHA_INICIO_REAL",
                         "FECHA_FINAL_REAL",
                         "PRIORIDAD_TAREA",
                         "TIPO_TAREA",
                         "TIEMPO_REAL",
                         "TIEMPO_ESTIMADO",
                         0};
  char *field_data[] = {new_id,      f_name,     u_state, f_desc, f_notes,
                        f_est_start, f_est_end,  f_start, f_end,  u_prior,
                        u_type,      f_est_time, f_time,  0};
  insert = construct_insert("GP_TAREA", field_names, field_data);
  exec_nonquery(insert);
  free(u_state);
  free(u_type);
  free(u_prior);
  free(f_name);
  free(f_state);
  free(f_desc);
  free(f_notes);
  free(f_est_start);
  free(f_est_end);
  free(f_start);
  free(f_end);
  free(f_prior);
  free(f_type);
  free(f_est_time);
  free(f_time);
  free(insert);
}


x86 assembly (clang, -O0):
<create_task>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%rsp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
call   1080 <upper@plt>
mov    %rax,-0x48(%rbp)
movq   $0x0,-0x50(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1217 <create_task+0x87>
mov    -0x18(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x50(%rbp)
jmp    1227 <create_task+0x97>
lea    0xde2(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
cmpq   $0x0,-0x20(%rbp)
je     124c <create_task+0xbc>
mov    -0x20(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x20(%rbp)
jmp    125c <create_task+0xcc>
lea    0xdad(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x58(%rbp)
movq   $0x0,-0x60(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     1281 <create_task+0xf1>
mov    -0x28(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x60(%rbp)
jmp    1291 <create_task+0x101>
lea    0xd78(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x60(%rbp)
movq   $0x0,-0x68(%rbp)
cmpq   $0x0,-0x30(%rbp)
je     12b6 <create_task+0x126>
mov    -0x30(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x68(%rbp)
jmp    12c6 <create_task+0x136>
lea    0xd43(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x68(%rbp)
movq   $0x0,-0x70(%rbp)
cmpq   $0x0,0x10(%rbp)
je     12eb <create_task+0x15b>
mov    0x10(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x70(%rbp)
jmp    12fb <create_task+0x16b>
lea    0xd0e(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x70(%rbp)
movq   $0x0,-0x78(%rbp)
cmpq   $0x0,0x18(%rbp)
je     1320 <create_task+0x190>
mov    0x18(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x78(%rbp)
jmp    1330 <create_task+0x1a0>
lea    0xcd9(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x78(%rbp)
mov    0x20(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x80(%rbp)
mov    -0x80(%rbp),%rdi
call   1080 <upper@plt>
mov    %rax,-0x88(%rbp)
mov    0x28(%rbp),%rdi
call   1070 <format_string@plt>
mov    %rax,-0x90(%rbp)
mov    -0x90(%rbp),%rdi
call   1080 <upper@plt>
mov    %rax,-0x98(%rbp)
movq   $0x0,-0xa0(%rbp)
cmpq   $0x0,0x30(%rbp)
je     139b <create_task+0x20b>
mov    0x30(%rbp),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0xa0(%rbp)
jmp    13ae <create_task+0x21e>
lea    0xc5e(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0xa0(%rbp)
movq   $0x0,-0xa8(%rbp)
cmpq   $0x0,0x38(%rbp)
je     13d9 <create_task+0x249>
mov    0x38(%rbp),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0xa8(%rbp)
jmp    13ec <create_task+0x25c>
lea    0xc20(%rip),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0xa8(%rbp)
mov    $0x0,%al
call   1040 <new_task_id@plt>
mov    %eax,-0xac(%rbp)
lea    -0xb7(%rbp),%rdi
mov    -0xac(%rbp),%edx
lea    0xbf8(%rip),%rsi
call   10a0 <sprintf@plt>
movq   $0x0,-0xc0(%rbp)
lea    -0x130(%rbp),%rdi
lea    0x2985(%rip),%rsi
mov    $0x70,%edx
call   1050 <memcpy@plt>
lea    -0xb7(%rbp),%rax
mov    %rax,-0x1a0(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x198(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x190(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0x188(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x180(%rbp)
mov    -0x60(%rbp),%rax
mov    %rax,-0x178(%rbp)
mov    -0x68(%rbp),%rax
mov    %rax,-0x170(%rbp)
mov    -0x70(%rbp),%rax
mov    %rax,-0x168(%rbp)
mov    -0x78(%rbp),%rax
mov    %rax,-0x160(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,-0x158(%rbp)
mov    -0x98(%rbp),%rax
mov    %rax,-0x150(%rbp)
mov    -0xa0(%rbp),%rax
mov    %rax,-0x148(%rbp)
mov    -0xa8(%rbp),%rax
mov    %rax,-0x140(%rbp)
movq   $0x0,-0x138(%rbp)
lea    -0x130(%rbp),%rsi
lea    -0x1a0(%rbp),%rdx
lea    0xbc9(%rip),%rdi
call   1090 <construct_insert@plt>
mov    %rax,-0xc0(%rbp)
mov    -0xc0(%rbp),%rdi
call   1060 <exec_nonquery@plt>
mov    -0x48(%rbp),%rdi
call   1030 <free@plt>
mov    -0x98(%rbp),%rdi
call   1030 <free@plt>
mov    -0x88(%rbp),%rdi
call   1030 <free@plt>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
mov    -0x40(%rbp),%rdi
call   1030 <free@plt>
mov    -0x50(%rbp),%rdi
call   1030 <free@plt>
mov    -0x58(%rbp),%rdi
call   1030 <free@plt>
mov    -0x60(%rbp),%rdi
call   1030 <free@plt>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
mov    -0x70(%rbp),%rdi
call   1030 <free@plt>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
mov    -0x80(%rbp),%rdi
call   1030 <free@plt>
mov    -0x90(%rbp),%rdi
call   1030 <free@plt>
mov    -0xa0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xc0(%rbp),%rdi
call   1030 <free@plt>
add    $0x1a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<create_task>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x178,%rsp
mov    %r9,%r14
mov    %r8,%r15
mov    %rcx,%r12
mov    %rdx,%rbp
mov    %rsi,%rbx
call   1060 <format_string@plt>
mov    %rax,0x78(%rsp)
mov    %rbx,%rdi
call   1060 <format_string@plt>
mov    %rax,0x70(%rsp)
mov    %rax,%rdi
call   1070 <upper@plt>
mov    %rax,0x68(%rsp)
test   %rbp,%rbp
je     11d3 <create_task+0x53>
mov    %rbp,%rdi
call   1060 <format_string@plt>
jmp    11df <create_task+0x5f>
lea    0xe26(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x38(%rsp)
test   %r12,%r12
je     11f5 <create_task+0x75>
mov    %r12,%rdi
call   1060 <format_string@plt>
xor    %eax,%eax
jmp    1201 <create_task+0x81>
lea    0xe04(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x30(%rsp)
test   %r15,%r15
je     1215 <create_task+0x95>
mov    %r15,%rdi
call   1060 <format_string@plt>
jmp    1221 <create_task+0xa1>
lea    0xde4(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x28(%rsp)
mov    0x1b0(%rsp),%rbp
test   %r14,%r14
je     123d <create_task+0xbd>
mov    %r14,%rdi
call   1060 <format_string@plt>
jmp    1249 <create_task+0xc9>
lea    0xdbc(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x20(%rsp)
mov    0x1b8(%rsp),%rbx
test   %rbp,%rbp
je     1265 <create_task+0xe5>
mov    %rbp,%rdi
call   1060 <format_string@plt>
jmp    1271 <create_task+0xf1>
lea    0xd94(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x18(%rsp)
mov    0x1d0(%rsp),%r13
mov    0x1c8(%rsp),%r15
mov    0x1c0(%rsp),%rbp
test   %rbx,%rbx
je     129d <create_task+0x11d>
mov    %rbx,%rdi
call   1060 <format_string@plt>
jmp    12a9 <create_task+0x129>
lea    0xd5c(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x10(%rsp)
mov    0x1d8(%rsp),%rbx
mov    %rbp,%rdi
call   1060 <format_string@plt>
mov    %rax,0x60(%rsp)
mov    %rax,%rdi
call   1070 <upper@plt>
mov    %rax,0x50(%rsp)
mov    %r15,%rdi
call   1060 <format_string@plt>
mov    %rax,0x58(%rsp)
mov    %rax,%rdi
call   1070 <upper@plt>
mov    %rax,0x48(%rsp)
test   %r13,%r13
je     12f4 <create_task+0x174>
mov    %r13,%rdi
jmp    12fb <create_task+0x17b>
lea    0xd05(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,0x8(%rsp)
test   %rbx,%rbx
je     130f <create_task+0x18f>
mov    %rbx,%rdi
jmp    1316 <create_task+0x196>
lea    0xcea(%rip),%rdi
call   10a0 <strdup@plt>
mov    %rax,(%rsp)
xor    %eax,%eax
call   1040 <new_task_id@plt>
lea    0xcd8(%rip),%rsi
lea    0xf5(%rsp),%rbx
mov    %rbx,%rdi
mov    %eax,%edx
call   1090 <sprintf@plt>
movaps 0x2aca(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0x2aab(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0x2a8c(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0x2a6d(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0x2a4e(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0x2a2f(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0x2a10(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
mov    %rbx,0x80(%rsp)
mov    0x78(%rsp),%rbx
mov    %rbx,0x88(%rsp)
mov    0x68(%rsp),%r14
mov    %r14,0x90(%rsp)
mov    0x38(%rsp),%rbp
mov    %rbp,0x98(%rsp)
mov    0x30(%rsp),%r15
mov    %r15,0xa0(%rsp)
mov    0x28(%rsp),%rax
mov    %rax,0xa8(%rsp)
mov    0x20(%rsp),%rax
mov    %rax,0xb0(%rsp)
mov    0x18(%rsp),%rax
mov    %rax,0xb8(%rsp)
mov    0x10(%rsp),%rax
mov    %rax,0xc0(%rsp)
mov    0x50(%rsp),%r13
mov    %r13,0xc8(%rsp)
mov    0x48(%rsp),%r12
mov    %r12,0xd0(%rsp)
mov    0x8(%rsp),%rax
mov    %rax,0xd8(%rsp)
mov    (%rsp),%rax
mov    %rax,0xe0(%rsp)
movq   $0x0,0xe8(%rsp)
lea    0xc5e(%rip),%rdi
lea    0x100(%rsp),%rsi
lea    0x80(%rsp),%rdx
call   1080 <construct_insert@plt>
mov    %rax,0x40(%rsp)
mov    %rax,%rdi
call   1050 <exec_nonquery@plt>
mov    %r14,%rdi
call   1030 <free@plt>
mov    %r12,%rdi
call   1030 <free@plt>
mov    %r13,%rdi
call   1030 <free@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
mov    0x70(%rsp),%rdi
call   1030 <free@plt>
mov    %rbp,%rdi
call   1030 <free@plt>
mov    %r15,%rdi
call   1030 <free@plt>
mov    0x28(%rsp),%rdi
call   1030 <free@plt>
mov    0x20(%rsp),%rdi
call   1030 <free@plt>
mov    0x18(%rsp),%rdi
call   1030 <free@plt>
mov    0x10(%rsp),%rdi
call   1030 <free@plt>
mov    0x60(%rsp),%rdi
call   1030 <free@plt>
mov    0x58(%rsp),%rdi
call   1030 <free@plt>
mov    0x8(%rsp),%rdi
call   1030 <free@plt>
mov    (%rsp),%rdi
call   1030 <free@plt>
mov    0x40(%rsp),%rdi
call   1030 <free@plt>
add    $0x178,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [5 x i8] c"NULL\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [3 x i8] c"ID\00"
@.str.3 = [13 x i8] c"NOMBRE_TAREA\00"
@.str.4 = [13 x i8] c"ESTADO_TAREA\00"
@.str.5 = [12 x i8] c"DESCRIPCION\00"
@.str.6 = [6 x i8] c"NOTAS\00"
@.str.7 = [22 x i8] c"FECHA_INICIO_ESTIMADA\00"
@.str.8 = [21 x i8] c"FECHA_FINAL_ESTIMADA\00"
@.str.9 = [18 x i8] c"FECHA_INICIO_REAL\00"
@.str.10 = [17 x i8] c"FECHA_FINAL_REAL\00"
@.str.11 = [16 x i8] c"PRIORIDAD_TAREA\00"
@.str.12 = [11 x i8] c"TIPO_TAREA\00"
@.str.13 = [12 x i8] c"TIEMPO_REAL\00"
@.str.14 = [16 x i8] c"TIEMPO_ESTIMADO\00"
@__const.create_task.field_names = [14 x i8*] [i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i32 0, i32 0), i8* null]
@.str.15 = [9 x i8] c"GP_TAREA\00"
define void @create_task(i8* %0, i8* %1, i8* %2, i8* %3, i8* %4, i8* %5, i8* %6, i8* %7, i8* %8, i8* %9, i8* %10, i8* %11) {
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i8*
%18 = alloca i8*
%19 = alloca i8*
%20 = alloca i8*
%21 = alloca i8*
%22 = alloca i8*
%23 = alloca i8*
%24 = alloca i8*
%25 = alloca i8*
%26 = alloca i8*
%27 = alloca i8*
%28 = alloca i8*
%29 = alloca i8*
%30 = alloca i8*
%31 = alloca i8*
%32 = alloca i8*
%33 = alloca i8*
%34 = alloca i8*
%35 = alloca i8*
%36 = alloca i8*
%37 = alloca i8*
%38 = alloca i8*
%39 = alloca i8*
%40 = alloca i32
%41 = alloca [11 x i8]
%42 = alloca i8*
%43 = alloca [14 x i8*]
%44 = alloca [14 x i8*]
store i8* %0, i8** %13
store i8* %1, i8** %14
store i8* %2, i8** %15
store i8* %3, i8** %16
store i8* %4, i8** %17
store i8* %5, i8** %18
store i8* %6, i8** %19
store i8* %7, i8** %20
store i8* %8, i8** %21
store i8* %9, i8** %22
store i8* %10, i8** %23
store i8* %11, i8** %24
%45 = load i8*, i8** %13
%46 = call i8* @format_string(i8* %45)
store i8* %46, i8** %25
%47 = load i8*, i8** %14
%48 = call i8* @format_string(i8* %47)
store i8* %48, i8** %26
%49 = load i8*, i8** %26
%50 = call i8* @upper(i8* %49)
store i8* %50, i8** %27
store i8* null, i8** %28
%51 = load i8*, i8** %15
%52 = icmp ne i8* %51, null
br i1 %52, label %53, label %56
53: ; preds = %12
%54 = load i8*, i8** %15
%55 = call i8* @format_string(i8* %54)
store i8* %55, i8** %28
br label %58
56: ; preds = %12
%57 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %57, i8** %28
br label %58
58: ; preds = %56, %53
store i8* null, i8** %29
%59 = load i8*, i8** %16
%60 = icmp ne i8* %59, null
br i1 %60, label %61, label %64
61: ; preds = %58
%62 = load i8*, i8** %16
%63 = call i8* @format_string(i8* %62)
store i8* %63, i8** %16
br label %66
64: ; preds = %58
%65 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %65, i8** %29
br label %66
66: ; preds = %64, %61
store i8* null, i8** %30
%67 = load i8*, i8** %17
%68 = icmp ne i8* %67, null
br i1 %68, label %69, label %72
69: ; preds = %66
%70 = load i8*, i8** %17
%71 = call i8* @format_string(i8* %70)
store i8* %71, i8** %30
br label %74
72: ; preds = %66
%73 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %73, i8** %30
br label %74
74: ; preds = %72, %69
store i8* null, i8** %31
%75 = load i8*, i8** %18
%76 = icmp ne i8* %75, null
br i1 %76, label %77, label %80
77: ; preds = %74
%78 = load i8*, i8** %18
%79 = call i8* @format_string(i8* %78)
store i8* %79, i8** %31
br label %82
80: ; preds = %74
%81 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %81, i8** %31
br label %82
82: ; preds = %80, %77
store i8* null, i8** %32
%83 = load i8*, i8** %19
%84 = icmp ne i8* %83, null
br i1 %84, label %85, label %88
85: ; preds = %82
%86 = load i8*, i8** %19
%87 = call i8* @format_string(i8* %86)
store i8* %87, i8** %32
br label %90
88: ; preds = %82
%89 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %89, i8** %32
br label %90
90: ; preds = %88, %85
store i8* null, i8** %33
%91 = load i8*, i8** %20
%92 = icmp ne i8* %91, null
br i1 %92, label %93, label %96
93: ; preds = %90
%94 = load i8*, i8** %20
%95 = call i8* @format_string(i8* %94)
store i8* %95, i8** %33
br label %98
96: ; preds = %90
%97 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %97, i8** %33
br label %98
98: ; preds = %96, %93
%99 = load i8*, i8** %21
%100 = call i8* @format_string(i8* %99)
store i8* %100, i8** %34
%101 = load i8*, i8** %34
%102 = call i8* @upper(i8* %101)
store i8* %102, i8** %35
%103 = load i8*, i8** %22
%104 = call i8* @format_string(i8* %103)
store i8* %104, i8** %36
%105 = load i8*, i8** %36
%106 = call i8* @upper(i8* %105)
store i8* %106, i8** %37
store i8* null, i8** %38
%107 = load i8*, i8** %23
%108 = icmp ne i8* %107, null
br i1 %108, label %109, label %112
109: ; preds = %98
%110 = load i8*, i8** %23
%111 = call i8* @strdup(i8* %110)
store i8* %111, i8** %38
br label %114
112: ; preds = %98
%113 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %113, i8** %38
br label %114
114: ; preds = %112, %109
store i8* null, i8** %39
%115 = load i8*, i8** %24
%116 = icmp ne i8* %115, null
br i1 %116, label %117, label %120
117: ; preds = %114
%118 = load i8*, i8** %24
%119 = call i8* @strdup(i8* %118)
store i8* %119, i8** %39
br label %122
120: ; preds = %114
%121 = call i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %121, i8** %39
br label %122
122: ; preds = %120, %117
%123 = call i32 (...) @new_task_id()
store i32 %123, i32* %40
%124 = getelementptr inbounds [11 x i8], [11 x i8]* %41, i64 0, i64 0
%125 = load i32, i32* %40
%126 = call i32 @sprintf(i8* %124, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %125)
store i8* null, i8** %42
%127 = bitcast [14 x i8*]* %43 to i8*
%128 = getelementptr inbounds [14 x i8*], [14 x i8*]* %44, i64 0, i64 0
%129 = getelementptr inbounds [11 x i8], [11 x i8]* %41, i64 0, i64 0
store i8* %129, i8** %128
%130 = getelementptr inbounds i8*, i8** %128, i64 1
%131 = load i8*, i8** %25
store i8* %131, i8** %130
%132 = getelementptr inbounds i8*, i8** %130, i64 1
%133 = load i8*, i8** %27
store i8* %133, i8** %132
%134 = getelementptr inbounds i8*, i8** %132, i64 1
%135 = load i8*, i8** %28
store i8* %135, i8** %134
%136 = getelementptr inbounds i8*, i8** %134, i64 1
%137 = load i8*, i8** %29
store i8* %137, i8** %136
%138 = getelementptr inbounds i8*, i8** %136, i64 1
%139 = load i8*, i8** %30
store i8* %139, i8** %138
%140 = getelementptr inbounds i8*, i8** %138, i64 1
%141 = load i8*, i8** %31
store i8* %141, i8** %140
%142 = getelementptr inbounds i8*, i8** %140, i64 1
%143 = load i8*, i8** %32
store i8* %143, i8** %142
%144 = getelementptr inbounds i8*, i8** %142, i64 1
%145 = load i8*, i8** %33
store i8* %145, i8** %144
%146 = getelementptr inbounds i8*, i8** %144, i64 1
%147 = load i8*, i8** %35
store i8* %147, i8** %146
%148 = getelementptr inbounds i8*, i8** %146, i64 1
%149 = load i8*, i8** %37
store i8* %149, i8** %148
%150 = getelementptr inbounds i8*, i8** %148, i64 1
%151 = load i8*, i8** %38
store i8* %151, i8** %150
%152 = getelementptr inbounds i8*, i8** %150, i64 1
%153 = load i8*, i8** %39
store i8* %153, i8** %152
%154 = getelementptr inbounds i8*, i8** %152, i64 1
store i8* null, i8** %154
%155 = getelementptr inbounds [14 x i8*], [14 x i8*]* %43, i64 0, i64 0
%156 = getelementptr inbounds [14 x i8*], [14 x i8*]* %44, i64 0, i64 0
%157 = call i8* @construct_insert(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0), i8** %155, i8** %156)
store i8* %157, i8** %42
%158 = load i8*, i8** %42
%159 = call i32 @exec_nonquery(i8* %158)
%160 = load i8*, i8** %27
%161 = call i32 @free(i8* %160)
%162 = load i8*, i8** %37
%163 = call i32 @free(i8* %162)
%164 = load i8*, i8** %35
%165 = call i32 @free(i8* %164)
%166 = load i8*, i8** %25
%167 = call i32 @free(i8* %166)
%168 = load i8*, i8** %26
%169 = call i32 @free(i8* %168)
%170 = load i8*, i8** %28
%171 = call i32 @free(i8* %170)
%172 = load i8*, i8** %29
%173 = call i32 @free(i8* %172)
%174 = load i8*, i8** %30
%175 = call i32 @free(i8* %174)
%176 = load i8*, i8** %31
%177 = call i32 @free(i8* %176)
%178 = load i8*, i8** %32
%179 = call i32 @free(i8* %178)
%180 = load i8*, i8** %33
%181 = call i32 @free(i8* %180)
%182 = load i8*, i8** %34
%183 = call i32 @free(i8* %182)
%184 = load i8*, i8** %36
%185 = call i32 @free(i8* %184)
%186 = load i8*, i8** %38
%187 = call i32 @free(i8* %186)
%188 = load i8*, i8** %39
%189 = call i32 @free(i8* %188)
%190 = load i8*, i8** %42
%191 = call i32 @free(i8* %190)
ret void
}

LLVM IR (-O2):
@.str = [5 x i8] c"NULL\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [3 x i8] c"ID\00"
@.str.3 = [13 x i8] c"NOMBRE_TAREA\00"
@.str.4 = [13 x i8] c"ESTADO_TAREA\00"
@.str.5 = [12 x i8] c"DESCRIPCION\00"
@.str.6 = [6 x i8] c"NOTAS\00"
@.str.7 = [22 x i8] c"FECHA_INICIO_ESTIMADA\00"
@.str.8 = [21 x i8] c"FECHA_FINAL_ESTIMADA\00"
@.str.9 = [18 x i8] c"FECHA_INICIO_REAL\00"
@.str.10 = [17 x i8] c"FECHA_FINAL_REAL\00"
@.str.11 = [16 x i8] c"PRIORIDAD_TAREA\00"
@.str.12 = [11 x i8] c"TIPO_TAREA\00"
@.str.13 = [12 x i8] c"TIEMPO_REAL\00"
@.str.14 = [16 x i8] c"TIEMPO_ESTIMADO\00"
@__const.create_task.field_names = [14 x i8*] [i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i32 0, i32 0), i8* null]
@.str.15 = [9 x i8] c"GP_TAREA\00"
define void @create_task(i8* %0, i8* %1, i8* %2, i8* %3, i8* %4, i8* %5, i8* %6, i8* %7, i8* %8, i8* %9, i8* %10, i8* %11) {
%13 = alloca [11 x i8]
%14 = alloca [14 x i8*]
%15 = alloca [14 x i8*]
%16 = tail call i8* @format_string(i8* %0)
%17 = tail call i8* @format_string(i8* %1)
%18 = tail call i8* @upper(i8* %17)
%19 = icmp eq i8* %2, null
br i1 %19, label %22, label %20
20: ; preds = %12
%21 = tail call i8* @format_string(i8* %2)
br label %24
22: ; preds = %12
%23 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %24
24: ; preds = %22, %20
%25 = phi i8* [ %21, %20 ], [ %23, %22 ]
%26 = icmp eq i8* %3, null
br i1 %26, label %29, label %27
27: ; preds = %24
%28 = tail call i8* @format_string(i8* %3)
br label %31
29: ; preds = %24
%30 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %31
31: ; preds = %29, %27
%32 = phi i8* [ null, %27 ], [ %30, %29 ]
%33 = icmp eq i8* %4, null
br i1 %33, label %36, label %34
34: ; preds = %31
%35 = tail call i8* @format_string(i8* %4)
br label %38
36: ; preds = %31
%37 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %38
38: ; preds = %36, %34
%39 = phi i8* [ %35, %34 ], [ %37, %36 ]
%40 = icmp eq i8* %5, null
br i1 %40, label %43, label %41
41: ; preds = %38
%42 = tail call i8* @format_string(i8* %5)
br label %45
43: ; preds = %38
%44 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %45
45: ; preds = %43, %41
%46 = phi i8* [ %42, %41 ], [ %44, %43 ]
%47 = icmp eq i8* %6, null
br i1 %47, label %50, label %48
48: ; preds = %45
%49 = tail call i8* @format_string(i8* %6)
br label %52
50: ; preds = %45
%51 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %52
52: ; preds = %50, %48
%53 = phi i8* [ %49, %48 ], [ %51, %50 ]
%54 = icmp eq i8* %7, null
br i1 %54, label %57, label %55
55: ; preds = %52
%56 = tail call i8* @format_string(i8* %7)
br label %59
57: ; preds = %52
%58 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %59
59: ; preds = %57, %55
%60 = phi i8* [ %56, %55 ], [ %58, %57 ]
%61 = tail call i8* @format_string(i8* %8)
%62 = tail call i8* @upper(i8* %61)
%63 = tail call i8* @format_string(i8* %9)
%64 = tail call i8* @upper(i8* %63)
%65 = icmp eq i8* %10, null
br i1 %65, label %68, label %66
66: ; preds = %59
%67 = tail call i8* @strdup(i8* %10)
br label %70
68: ; preds = %59
%69 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %70
70: ; preds = %68, %66
%71 = phi i8* [ %67, %66 ], [ %69, %68 ]
%72 = icmp eq i8* %11, null
br i1 %72, label %75, label %73
73: ; preds = %70
%74 = tail call i8* @strdup(i8* %11)
br label %77
75: ; preds = %70
%76 = tail call dereferenceable_or_null(5) i8* @strdup(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %77
77: ; preds = %75, %73
%78 = phi i8* [ %74, %73 ], [ %76, %75 ]
%79 = tail call i32 (...) @new_task_id()
%80 = getelementptr inbounds [11 x i8], [11 x i8]* %13, i64 0, i64 0
%81 = call i32 @sprintf(i8* %80, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 %79)
%82 = bitcast [14 x i8*]* %14 to i8*
%83 = bitcast [14 x i8*]* %15 to i8*
%84 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 0
store i8* %80, i8** %84
%85 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 1
store i8* %16, i8** %85
%86 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 2
store i8* %18, i8** %86
%87 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 3
store i8* %25, i8** %87
%88 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 4
store i8* %32, i8** %88
%89 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 5
store i8* %39, i8** %89
%90 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 6
store i8* %46, i8** %90
%91 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 7
store i8* %53, i8** %91
%92 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 8
store i8* %60, i8** %92
%93 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 9
store i8* %62, i8** %93
%94 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 10
store i8* %64, i8** %94
%95 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 11
store i8* %71, i8** %95
%96 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 12
store i8* %78, i8** %96
%97 = getelementptr inbounds [14 x i8*], [14 x i8*]* %15, i64 0, i64 13
store i8* null, i8** %97
%98 = getelementptr inbounds [14 x i8*], [14 x i8*]* %14, i64 0, i64 0
%99 = call i8* @construct_insert(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0), i8** %98, i8** %84)
%100 = call i32 @exec_nonquery(i8* %99)
%101 = call i32 @free(i8* %18)
%102 = call i32 @free(i8* %64)
%103 = call i32 @free(i8* %62)
%104 = call i32 @free(i8* %16)
%105 = call i32 @free(i8* %17)
%106 = call i32 @free(i8* %25)
%107 = call i32 @free(i8* %32)
%108 = call i32 @free(i8* %39)
%109 = call i32 @free(i8* %46)
%110 = call i32 @free(i8* %53)
%111 = call i32 @free(i8* %60)
%112 = call i32 @free(i8* %61)
%113 = call i32 @free(i8* %63)
%114 = call i32 @free(i8* %71)
%115 = call i32 @free(i8* %78)
%116 = call i32 @free(i8* %99)
ret void
}