#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ F_OK;
int access(char *, int /*<<< orphan*/);
int /*<<< orphan*/ clear_string(char *);
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fgets(char *, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fputs(char *, int /*<<< orphan*/ *);
int /*<<< orphan*/ printf(char *, char *);
int remove(char *);
int /*<<< orphan*/ strcat(char *, char *);
int strlen(char *);
void create_xml(void) {
  FILE *f;
  FILE *f_source;
  int i = 0;
  char first_string[100] = "<opml version=\"1.1\">\n";
  char second_string[100] = "    <body>\n";
  char first_part[100] = "        <outline stringname=\"";
  char second_part[100] = "\">\n";
  char second_part_2[100] = "\" />\n";
  char final_string_1[100] = "        </outline>\n";
  char final_string_2[100] = "    </body>\n";
  char final_string_3[100] = "</opml>\n";
  char full_string[600] = "";
  char getted_string[200] = "";
  if (access("names_of_strings.xml", F_OK) != -1) {
    i = remove("names_of_strings.xml");
    i = 0;
  };
  f = fopen("names_of_strings.xml", "a+");
  fputs(first_string, f);
  fputs(second_string, f);
  f_source = fopen("names_of_strings_list", "r");
  while (fgets(getted_string, 155, f_source) != NULL) {
    clear_string(full_string);
    getted_string[strlen(getted_string) - 1] = 0;
    strcat(full_string, first_part);
    strcat(full_string, getted_string);
    if (i == 0) {
      strcat(full_string, second_part);
    } else {
      strcat(full_string, second_part_2);
    }
    fputs(full_string, f);
    printf("in file names_of_string.xml send string %s\n", full_string);
    clear_string(getted_string);
    clear_string(full_string);
    i++;
  }
  fputs(final_string_1, f);
  fputs(final_string_2, f);
  fputs(final_string_3, f);
  fclose(f_source);
  fclose(f);
}


x86 assembly (clang, -O0):
<create_xml>:
push   %rbp
mov    %rsp,%rbp
sub    $0x6c0,%rsp
movl   $0x0,-0x14(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xe23(%rip),%rsi
mov    $0x64,%edx
call   10b0 <memcpy@plt>
lea    -0xf0(%rbp),%rdi
lea    0xe7b(%rip),%rsi
mov    $0x64,%edx
call   10b0 <memcpy@plt>
lea    -0x160(%rbp),%rdi
lea    0xed3(%rip),%rsi
mov    $0x64,%edx
call   10b0 <memcpy@plt>
lea    -0x1d0(%rbp),%rdi
xor    %esi,%esi
mov    $0x64,%edx
call   1090 <memset@plt>
movb   $0x22,-0x1d0(%rbp)
movb   $0x3e,-0x1cf(%rbp)
movb   $0xa,-0x1ce(%rbp)
lea    -0x240(%rbp),%rdi
xor    %esi,%esi
mov    $0x64,%edx
call   1090 <memset@plt>
movb   $0x22,-0x240(%rbp)
movb   $0x20,-0x23f(%rbp)
movb   $0x2f,-0x23e(%rbp)
movb   $0x3e,-0x23d(%rbp)
movb   $0xa,-0x23c(%rbp)
lea    -0x2b0(%rbp),%rdi
lea    0xecd(%rip),%rsi
mov    $0x64,%edx
call   10b0 <memcpy@plt>
lea    -0x320(%rbp),%rdi
lea    0xf25(%rip),%rsi
mov    $0x64,%edx
call   10b0 <memcpy@plt>
lea    -0x390(%rbp),%rdi
lea    0xf7d(%rip),%rsi
mov    $0x64,%edx
call   10b0 <memcpy@plt>
lea    -0x5f0(%rbp),%rdi
xor    %esi,%esi
mov    $0x258,%edx
call   1090 <memset@plt>
lea    -0x6c0(%rbp),%rdi
xor    %esi,%esi
mov    $0xc8,%edx
call   1090 <memset@plt>
mov    0x2cee(%rip),%rax
mov    (%rax),%esi
lea    0xfa1(%rip),%rdi
call   10c0 <access@plt>
cmp    $0xffffffff,%eax
je     1317 <create_xml+0x157>
lea    0xf8c(%rip),%rdi
call   1030 <remove@plt>
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x14(%rbp)
lea    0xf76(%rip),%rdi
lea    0xf84(%rip),%rsi
call   10d0 <fopen@plt>
mov    %rax,-0x8(%rbp)
lea    -0x80(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <fputs@plt>
lea    -0xf0(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <fputs@plt>
lea    0xf5a(%rip),%rdi
lea    0xf69(%rip),%rsi
call   10d0 <fopen@plt>
mov    %rax,-0x10(%rbp)
lea    -0x6c0(%rbp),%rdi
mov    -0x10(%rbp),%rdx
mov    $0x9b,%esi
call   10a0 <fgets@plt>
cmp    $0x0,%rax
je     144a <create_xml+0x28a>
lea    -0x5f0(%rbp),%rdi
call   1040 <clear_string@plt>
lea    -0x6c0(%rbp),%rdi
call   1060 <strlen@plt>
sub    $0x1,%eax
cltq
movb   $0x0,-0x6c0(%rbp,%rax,1)
lea    -0x5f0(%rbp),%rdi
lea    -0x160(%rbp),%rsi
call   10e0 <strcat@plt>
lea    -0x5f0(%rbp),%rdi
lea    -0x6c0(%rbp),%rsi
call   10e0 <strcat@plt>
cmpl   $0x0,-0x14(%rbp)
jne    13ee <create_xml+0x22e>
lea    -0x5f0(%rbp),%rdi
lea    -0x1d0(%rbp),%rsi
call   10e0 <strcat@plt>
jmp    1401 <create_xml+0x241>
lea    -0x5f0(%rbp),%rdi
lea    -0x240(%rbp),%rsi
call   10e0 <strcat@plt>
lea    -0x5f0(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <fputs@plt>
lea    -0x5f0(%rbp),%rsi
lea    0xea5(%rip),%rdi
call   1070 <printf@plt>
lea    -0x6c0(%rbp),%rdi
call   1040 <clear_string@plt>
lea    -0x5f0(%rbp),%rdi
call   1040 <clear_string@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1362 <create_xml+0x1a2>
lea    -0x2b0(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <fputs@plt>
lea    -0x320(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <fputs@plt>
lea    -0x390(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1080 <fputs@plt>
mov    -0x10(%rbp),%rdi
call   1050 <fclose@plt>
mov    -0x8(%rbp),%rdi
call   1050 <fclose@plt>
add    $0x6c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<create_xml>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x6a8,%rsp
movaps 0xe88(%rip),%xmm0
movaps %xmm0,0x360(%rsp)
movaps 0xe69(%rip),%xmm0
movaps %xmm0,0x350(%rsp)
movaps 0xe4a(%rip),%xmm0
movaps %xmm0,0x340(%rsp)
movaps 0xe2b(%rip),%xmm0
movaps %xmm0,0x330(%rsp)
movaps 0xe0c(%rip),%xmm0
movaps %xmm0,0x320(%rsp)
movaps 0xded(%rip),%xmm0
movaps %xmm0,0x310(%rsp)
movl   $0x0,0x370(%rsp)
movaps 0xe93(%rip),%xmm0
movaps %xmm0,0x2f0(%rsp)
movaps 0xe74(%rip),%xmm0
movaps %xmm0,0x2e0(%rsp)
movaps 0xe55(%rip),%xmm0
movaps %xmm0,0x2d0(%rsp)
movaps 0xe36(%rip),%xmm0
movaps %xmm0,0x2c0(%rsp)
movaps 0xe17(%rip),%xmm0
movaps %xmm0,0x2b0(%rsp)
movaps 0xdf8(%rip),%xmm0
movaps %xmm0,0x2a0(%rsp)
movl   $0x0,0x300(%rsp)
movaps 0xe9e(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0xe7f(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0xe60(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0xe41(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0xe22(%rip),%xmm0
movaps %xmm0,0xf0(%rsp)
movaps 0xe03(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movl   $0x0,0x140(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0xc0(%rsp)
movaps %xmm0,0xb0(%rsp)
movaps %xmm0,0xa0(%rsp)
movaps %xmm0,0x90(%rsp)
movaps %xmm0,0x80(%rsp)
movl   $0x0,0xd0(%rsp)
movw   $0x3e22,0x70(%rsp)
movb   $0xa,0x72(%rsp)
movaps %xmm0,(%rsp)
movaps %xmm0,0x50(%rsp)
movaps %xmm0,0x40(%rsp)
movaps %xmm0,0x30(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x10(%rsp)
movl   $0x0,0x60(%rsp)
movl   $0x3e2f2022,(%rsp)
movb   $0xa,0x4(%rsp)
movaps 0xe31(%rip),%xmm0
movaps %xmm0,0x280(%rsp)
movaps 0xe12(%rip),%xmm0
movaps %xmm0,0x270(%rsp)
movaps 0xdf3(%rip),%xmm0
movaps %xmm0,0x260(%rsp)
movaps 0xdd4(%rip),%xmm0
movaps %xmm0,0x250(%rsp)
movaps 0xdb5(%rip),%xmm0
movaps %xmm0,0x240(%rsp)
movaps 0xd96(%rip),%xmm0
movaps %xmm0,0x230(%rsp)
movl   $0x0,0x290(%rsp)
movaps 0xe3c(%rip),%xmm0
movaps %xmm0,0x210(%rsp)
movaps 0xe1d(%rip),%xmm0
movaps %xmm0,0x200(%rsp)
movaps 0xdfe(%rip),%xmm0
movaps %xmm0,0x1f0(%rsp)
movaps 0xddf(%rip),%xmm0
movaps %xmm0,0x1e0(%rsp)
movaps 0xdc0(%rip),%xmm0
movaps %xmm0,0x1d0(%rsp)
movaps 0xda1(%rip),%xmm0
movaps %xmm0,0x1c0(%rsp)
movl   $0x0,0x220(%rsp)
movaps 0xe47(%rip),%xmm0
movaps %xmm0,0x1a0(%rsp)
movaps 0xe28(%rip),%xmm0
movaps %xmm0,0x190(%rsp)
movaps 0xe09(%rip),%xmm0
movaps %xmm0,0x180(%rsp)
movaps 0xdea(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0xdcb(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0xdac(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movl   $0x0,0x1b0(%rsp)
lea    0x450(%rsp),%rdi
mov    $0x258,%edx
xor    %esi,%esi
call   1090 <memset@plt>
xorps  %xmm0,%xmm0
movaps %xmm0,0x430(%rsp)
movaps %xmm0,0x420(%rsp)
movaps %xmm0,0x410(%rsp)
movaps %xmm0,0x400(%rsp)
movaps %xmm0,0x3f0(%rsp)
movaps %xmm0,0x3e0(%rsp)
movaps %xmm0,0x3d0(%rsp)
movaps %xmm0,0x3c0(%rsp)
movaps %xmm0,0x3b0(%rsp)
movaps %xmm0,0x3a0(%rsp)
movaps %xmm0,0x390(%rsp)
movaps %xmm0,0x380(%rsp)
movq   $0x0,0x440(%rsp)
mov    0x2ab7(%rip),%rax
mov    (%rax),%esi
lea    0xd6a(%rip),%rdi
call   10b0 <access@plt>
cmp    $0xffffffff,%eax
je     1540 <create_xml+0x390>
lea    0xd59(%rip),%rdi
call   1030 <remove@plt>
lea    0xd4d(%rip),%rdi
lea    0xd5b(%rip),%rsi
call   10c0 <fopen@plt>
mov    %rax,%r15
lea    0x310(%rsp),%rdi
mov    %rax,%rsi
call   1080 <fputs@plt>
lea    0x2a0(%rsp),%rdi
mov    %r15,%rsi
call   1080 <fputs@plt>
lea    0xd2f(%rip),%rdi
lea    0xd3e(%rip),%rsi
call   10c0 <fopen@plt>
mov    %rax,%r14
lea    0x380(%rsp),%r12
mov    %r12,%rdi
mov    $0x9b,%esi
mov    %rax,%rdx
call   10a0 <fgets@plt>
test   %rax,%rax
je     16c9 <create_xml+0x519>
lea    0x450(%rsp),%rbx
mov    %rbx,%rdi
call   1040 <clear_string@plt>
mov    %r12,%rdi
call   1060 <strlen@plt>
cltq
movb   $0x0,-0x1(%rax,%r12,1)
lea    0xe0(%rsp),%rsi
mov    %rbx,%rdi
call   10d0 <strcat@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   10d0 <strcat@plt>
lea    0x70(%rsp),%rsi
mov    %rbx,%rdi
call   10d0 <strcat@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
call   1080 <fputs@plt>
lea    0xcbd(%rip),%rdi
mov    %rbx,%rsi
call   1070 <printf@plt>
mov    %r12,%rdi
call   1040 <clear_string@plt>
mov    %rbx,%rdi
call   1040 <clear_string@plt>
mov    %r12,%rdi
mov    $0x9b,%esi
mov    %r14,%rdx
call   10a0 <fgets@plt>
test   %rax,%rax
je     16c9 <create_xml+0x519>
lea    0x450(%rsp),%rbx
mov    %rsp,%rbp
lea    0xc7a(%rip),%r13
nopw   0x0(%rax,%rax,1)
mov    %rbx,%rdi
call   1040 <clear_string@plt>
mov    %r12,%rdi
call   1060 <strlen@plt>
cltq
movb   $0x0,-0x1(%rax,%r12,1)
mov    %rbx,%rdi
lea    0xe0(%rsp),%rsi
call   10d0 <strcat@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   10d0 <strcat@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   10d0 <strcat@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
call   1080 <fputs@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
call   1070 <printf@plt>
mov    %r12,%rdi
call   1040 <clear_string@plt>
mov    %rbx,%rdi
call   1040 <clear_string@plt>
mov    %r12,%rdi
mov    $0x9b,%esi
mov    %r14,%rdx
call   10a0 <fgets@plt>
test   %rax,%rax
jne    1650 <create_xml+0x4a0>
lea    0x230(%rsp),%rdi
mov    %r15,%rsi
call   1080 <fputs@plt>
lea    0x1c0(%rsp),%rdi
mov    %r15,%rsi
call   1080 <fputs@plt>
lea    0x150(%rsp),%rdi
mov    %r15,%rsi
call   1080 <fputs@plt>
mov    %r14,%rdi
call   1050 <fclose@plt>
mov    %r15,%rdi
call   1050 <fclose@plt>
add    $0x6a8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.create_xml.first_string = [100 x i8] c"<opml version=\221.1\22>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.second_string = [100 x i8] c" <body>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.first_part = [100 x i8] c" <outline stringname=\22\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.final_string_1 = [100 x i8] c" </outline>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.final_string_2 = [100 x i8] c" </body>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.final_string_3 = [100 x i8] c"</opml>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@.str = [21 x i8] c"names_of_strings.xml\00"
@F_OK = global i32 0
@.str.1 = [3 x i8] c"a+\00"
@.str.2 = [22 x i8] c"names_of_strings_list\00"
@.str.3 = [2 x i8] c"r\00"
@.str.4 = [44 x i8] c"in file names_of_string.xml send string %s\0A\00"
define void @create_xml() {
%1 = alloca i32*
%2 = alloca i32*
%3 = alloca i32
%4 = alloca [100 x i8]
%5 = alloca [100 x i8]
%6 = alloca [100 x i8]
%7 = alloca [100 x i8]
%8 = alloca [100 x i8]
%9 = alloca [100 x i8]
%10 = alloca [100 x i8]
%11 = alloca [100 x i8]
%12 = alloca [600 x i8]
%13 = alloca [200 x i8]
store i32 0, i32* %3
%14 = bitcast [100 x i8]* %4 to i8*
%15 = bitcast [100 x i8]* %5 to i8*
%16 = bitcast [100 x i8]* %6 to i8*
%17 = bitcast [100 x i8]* %7 to i8*
%18 = bitcast i8* %17 to [100 x i8]*
%19 = getelementptr inbounds [100 x i8], [100 x i8]* %18, i32 0, i32 0
store i8 34, i8* %19
%20 = getelementptr inbounds [100 x i8], [100 x i8]* %18, i32 0, i32 1
store i8 62, i8* %20
%21 = getelementptr inbounds [100 x i8], [100 x i8]* %18, i32 0, i32 2
store i8 10, i8* %21
%22 = bitcast [100 x i8]* %8 to i8*
%23 = bitcast i8* %22 to [100 x i8]*
%24 = getelementptr inbounds [100 x i8], [100 x i8]* %23, i32 0, i32 0
store i8 34, i8* %24
%25 = getelementptr inbounds [100 x i8], [100 x i8]* %23, i32 0, i32 1
store i8 32, i8* %25
%26 = getelementptr inbounds [100 x i8], [100 x i8]* %23, i32 0, i32 2
store i8 47, i8* %26
%27 = getelementptr inbounds [100 x i8], [100 x i8]* %23, i32 0, i32 3
store i8 62, i8* %27
%28 = getelementptr inbounds [100 x i8], [100 x i8]* %23, i32 0, i32 4
store i8 10, i8* %28
%29 = bitcast [100 x i8]* %9 to i8*
%30 = bitcast [100 x i8]* %10 to i8*
%31 = bitcast [100 x i8]* %11 to i8*
%32 = bitcast [600 x i8]* %12 to i8*
%33 = bitcast [200 x i8]* %13 to i8*
%34 = load i32, i32* @F_OK
%35 = call i32 @access(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i32 %34)
%36 = icmp ne i32 %35, -1
br i1 %36, label %37, label %39
37: ; preds = %0
%38 = call i32 @remove(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0))
store i32 %38, i32* %3
store i32 0, i32* %3
br label %39
39: ; preds = %37, %0
%40 = call i32* @fopen(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store i32* %40, i32** %1
%41 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 0
%42 = load i32*, i32** %1
%43 = call i32 @fputs(i8* %41, i32* %42)
%44 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 0
%45 = load i32*, i32** %1
%46 = call i32 @fputs(i8* %44, i32* %45)
%47 = call i32* @fopen(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i32* %47, i32** %2
br label %48
48: ; preds = %77, %39
%49 = getelementptr inbounds [200 x i8], [200 x i8]* %13, i64 0, i64 0
%50 = load i32*, i32** %2
%51 = call i32* @fgets(i8* %49, i32 155, i32* %50)
%52 = icmp ne i32* %51, null
br i1 %52, label %53, label %89
53: ; preds = %48
%54 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%55 = call i32 @clear_string(i8* %54)
%56 = getelementptr inbounds [200 x i8], [200 x i8]* %13, i64 0, i64 0
%57 = call i32 @strlen(i8* %56)
%58 = sub nsw i32 %57, 1
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds [200 x i8], [200 x i8]* %13, i64 0, i64 %59
store i8 0, i8* %60
%61 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%62 = getelementptr inbounds [100 x i8], [100 x i8]* %6, i64 0, i64 0
%63 = call i32 @strcat(i8* %61, i8* %62)
%64 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%65 = getelementptr inbounds [200 x i8], [200 x i8]* %13, i64 0, i64 0
%66 = call i32 @strcat(i8* %64, i8* %65)
%67 = load i32, i32* %3
%68 = icmp eq i32 %67, 0
br i1 %68, label %69, label %73
69: ; preds = %53
%70 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%71 = getelementptr inbounds [100 x i8], [100 x i8]* %7, i64 0, i64 0
%72 = call i32 @strcat(i8* %70, i8* %71)
br label %77
73: ; preds = %53
%74 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%75 = getelementptr inbounds [100 x i8], [100 x i8]* %8, i64 0, i64 0
%76 = call i32 @strcat(i8* %74, i8* %75)
br label %77
77: ; preds = %73, %69
%78 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%79 = load i32*, i32** %1
%80 = call i32 @fputs(i8* %78, i32* %79)
%81 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%82 = call i32 @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.4, i64 0, i64 0), i8* %81)
%83 = getelementptr inbounds [200 x i8], [200 x i8]* %13, i64 0, i64 0
%84 = call i32 @clear_string(i8* %83)
%85 = getelementptr inbounds [600 x i8], [600 x i8]* %12, i64 0, i64 0
%86 = call i32 @clear_string(i8* %85)
%87 = load i32, i32* %3
%88 = add nsw i32 %87, 1
store i32 %88, i32* %3
br label %48
89: ; preds = %48
%90 = getelementptr inbounds [100 x i8], [100 x i8]* %9, i64 0, i64 0
%91 = load i32*, i32** %1
%92 = call i32 @fputs(i8* %90, i32* %91)
%93 = getelementptr inbounds [100 x i8], [100 x i8]* %10, i64 0, i64 0
%94 = load i32*, i32** %1
%95 = call i32 @fputs(i8* %93, i32* %94)
%96 = getelementptr inbounds [100 x i8], [100 x i8]* %11, i64 0, i64 0
%97 = load i32*, i32** %1
%98 = call i32 @fputs(i8* %96, i32* %97)
%99 = load i32*, i32** %2
%100 = call i32 @fclose(i32* %99)
%101 = load i32*, i32** %1
%102 = call i32 @fclose(i32* %101)
ret void
}

LLVM IR (-O2):
@__const.create_xml.first_string = [100 x i8] c"<opml version=\221.1\22>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.second_string = [100 x i8] c" <body>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.first_part = [100 x i8] c" <outline stringname=\22\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.final_string_1 = [100 x i8] c" </outline>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.final_string_2 = [100 x i8] c" </body>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@__const.create_xml.final_string_3 = [100 x i8] c"</opml>\0A\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@.str = [21 x i8] c"names_of_strings.xml\00"
@F_OK = global i32 0
@.str.1 = [3 x i8] c"a+\00"
@.str.2 = [22 x i8] c"names_of_strings_list\00"
@.str.3 = [2 x i8] c"r\00"
@.str.4 = [44 x i8] c"in file names_of_string.xml send string %s\0A\00"
define void @create_xml() {
%1 = alloca [100 x i8]
%2 = alloca [100 x i8]
%3 = alloca [100 x i8]
%4 = alloca [100 x i8]
%5 = alloca [100 x i8]
%6 = alloca [100 x i8]
%7 = alloca [100 x i8]
%8 = alloca [100 x i8]
%9 = alloca [600 x i8]
%10 = alloca [200 x i8]
%11 = getelementptr inbounds [100 x i8], [100 x i8]* %1, i64 0, i64 0
%12 = getelementptr inbounds [100 x i8], [100 x i8]* %2, i64 0, i64 0
%13 = getelementptr inbounds [100 x i8], [100 x i8]* %3, i64 0, i64 0
%14 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 0
store i8 34, i8* %14
%15 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 1
store i8 62, i8* %15
%16 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 2
store i8 10, i8* %16
%17 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 0
store i8 34, i8* %17
%18 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 1
store i8 32, i8* %18
%19 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 2
store i8 47, i8* %19
%20 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 3
store i8 62, i8* %20
%21 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 4
store i8 10, i8* %21
%22 = getelementptr inbounds [100 x i8], [100 x i8]* %6, i64 0, i64 0
%23 = getelementptr inbounds [100 x i8], [100 x i8]* %7, i64 0, i64 0
%24 = getelementptr inbounds [100 x i8], [100 x i8]* %8, i64 0, i64 0
%25 = getelementptr inbounds [600 x i8], [600 x i8]* %9, i64 0, i64 0
%26 = getelementptr inbounds [200 x i8], [200 x i8]* %10, i64 0, i64 0
%27 = load i32, i32* @F_OK
%28 = tail call i32 @access(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i32 %27)
%29 = icmp eq i32 %28, -1
br i1 %29, label %32, label %30
30: ; preds = %0
%31 = tail call i32 @remove(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0))
br label %32
32: ; preds = %30, %0
%33 = tail call i32* @fopen(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
%34 = call i32 @fputs(i8* %11, i32* %33)
%35 = call i32 @fputs(i8* %12, i32* %33)
%36 = tail call i32* @fopen(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%37 = call i32* @fgets(i8* %26, i32 155, i32* %36)
%38 = icmp eq i32* %37, null
br i1 %38, label %69, label %39
39: ; preds = %32
%40 = call i32 @clear_string(i8* %25)
%41 = call i32 @strlen(i8* %26)
%42 = add nsw i32 %41, -1
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [200 x i8], [200 x i8]* %10, i64 0, i64 %43
store i8 0, i8* %44
%45 = call i32 @strcat(i8* %25, i8* %13)
%46 = call i32 @strcat(i8* %25, i8* %26)
%47 = call i32 @strcat(i8* %25, i8* %14)
%48 = call i32 @fputs(i8* %25, i32* %33)
%49 = call i32 @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.4, i64 0, i64 0), i8* %25)
%50 = call i32 @clear_string(i8* %26)
%51 = call i32 @clear_string(i8* %25)
%52 = call i32* @fgets(i8* %26, i32 155, i32* %36)
%53 = icmp eq i32* %52, null
br i1 %53, label %69, label %54
54: ; preds = %39, %54
%55 = call i32 @clear_string(i8* %25)
%56 = call i32 @strlen(i8* %26)
%57 = add nsw i32 %56, -1
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [200 x i8], [200 x i8]* %10, i64 0, i64 %58
store i8 0, i8* %59
%60 = call i32 @strcat(i8* %25, i8* %13)
%61 = call i32 @strcat(i8* %25, i8* %26)
%62 = call i32 @strcat(i8* %25, i8* %17)
%63 = call i32 @fputs(i8* %25, i32* %33)
%64 = call i32 @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.4, i64 0, i64 0), i8* %25)
%65 = call i32 @clear_string(i8* %26)
%66 = call i32 @clear_string(i8* %25)
%67 = call i32* @fgets(i8* %26, i32 155, i32* %36)
%68 = icmp eq i32* %67, null
br i1 %68, label %69, label %54
69: ; preds = %54, %39, %32
%70 = call i32 @fputs(i8* %22, i32* %33)
%71 = call i32 @fputs(i8* %23, i32* %33)
%72 = call i32 @fputs(i8* %24, i32* %33)
%73 = call i32 @fclose(i32* %36)
%74 = call i32 @fclose(i32* %33)
ret void
}