#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*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, ...);
int /*<<< orphan*/ stderr;
main(int argc, char *argv[]) {
  char *fname = argv[1];
  long one = 1;
  char *ffs = "ffffffffffffffff";
  struct {
    char c;
    short s;
  } ss;
  struct {
    char c;
    int i;
  } si;
  struct {
    char c;
    long l;
  } sl;
  struct {
    char c;
    char *p;
  } sp;
  struct {
    char c;
    float f;
  } sf;
  struct {
    char c;
    double d;
  } sd;
  static int log2s[17] = {0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4};
  long lm1 = -1;
  long lr1 = lm1 >> 1, lr2 = lm1 >> 2;
  unsigned long um1 = ~(unsigned long)0;
  int im1 = -1;
  int ir1 = im1 >> 1, ir2 = im1 >> 2;
  union {
    long l;
    char *p;
  } pl0, pl1;
  int ars;
  int lwidth = ((int)(sizeof(long))) * 8;
  union {
    float f;
    int i;
    long l;
  } f0, f1, fm1;
  FILE *f = fopen(fname, "w");
  if (f == NULL) {
    fprintf(stderr, "genarch.c: can't open %s for writing\n", fname);
    return 1;
  }
  fprintf(f,
          "/* Parameters derived from machine and compiler architecture */\n");
  fprintf(f, "\n\t%s\n\n",
          "/* ---------------- Scalar alignments ---------------- */");
  fprintf(f, "#define arch_align_short_mod %d\n",
          (int)((char *)&ss.s - (char *)&ss));
  fprintf(f, "#define arch_align_int_mod %d\n",
          (int)((char *)&si.i - (char *)&si));
  fprintf(f, "#define arch_align_long_mod %d\n",
          (int)((char *)&sl.l - (char *)&sl));
  fprintf(f, "#define arch_align_ptr_mod %d\n",
          (int)((char *)&sp.p - (char *)&sp));
  fprintf(f, "#define arch_align_float_mod %d\n",
          (int)((char *)&sf.f - (char *)&sf));
  fprintf(f, "#define arch_align_double_mod %d\n",
          (int)((char *)&sd.d - (char *)&sd));
  fprintf(f, "\n\t%s\n\n",
          "/* ---------------- Scalar sizes ---------------- */");
  fprintf(f, "#define arch_log2_sizeof_short %d\n",
          log2s[((int)(sizeof(short)))]);
  fprintf(f, "#define arch_log2_sizeof_int %d\n", log2s[((int)(sizeof(int)))]);
  fprintf(f, "#define arch_log2_sizeof_long %d\n",
          log2s[((int)(sizeof(long)))]);
  fprintf(f, "#define arch_sizeof_ds_ptr %d\n", ((int)(sizeof(char *))));
  fprintf(f, "#define arch_sizeof_ptr %d\n", ((int)(sizeof(char *))));
  fprintf(f, "#define arch_sizeof_float %d\n", ((int)(sizeof(float))));
  fprintf(f, "#define arch_sizeof_double %d\n", ((int)(sizeof(double))));
  fprintf(f, "\n\t%s\n\n",
          "/* ---------------- Unsigned max values ---------------- */");
  fprintf(f, "#define arch_max_%s ((%s)0x%s%s + (%s)0)\n", "uchar",
          "unsigned char", ffs + 16 - ((int)(sizeof(unsigned char))) * 2, "",
          "unsigned char");
  fprintf(f, "#define arch_max_%s ((%s)0x%s%s + (%s)0)\n", "ushort",
          "unsigned short", ffs + 16 - ((int)(sizeof(unsigned short))) * 2, "",
          "unsigned short");
  fprintf(f, "#define arch_max_%s ((%s)0x%s%s + (%s)0)\n", "uint",
          "unsigned int", ffs + 16 - ((int)(sizeof(unsigned int))) * 2, "",
          "unsigned int");
  fprintf(f, "#define arch_max_%s ((%s)0x%s%s + (%s)0)\n", "ulong",
          "unsigned long", ffs + 16 - ((int)(sizeof(unsigned long))) * 2, "L",
          "unsigned long");
  fprintf(f, "\n\t%s\n\n",
          "/* ---------------- Miscellaneous ---------------- */");
  fprintf(f, "#define arch_is_big_endian %d\n", 1 - *(char *)&one);
  pl0.l = 0;
  pl1.l = -1;
  fprintf(f, "#define arch_ptrs_are_signed %d\n", (pl1.p < pl0.p));
  f0.f = 0.0, f1.f = 1.0, fm1.f = -1.0;
  fprintf(
      f, "#define arch_floats_are_IEEE %d\n",
      ((((int)(sizeof(float))) == ((int)(sizeof(int)))
            ? f0.i == 0 && f1.i == (int)0x3f800000 && fm1.i == (int)0xbf800000
            : f0.l == 0 && f1.l == 0x3f800000L && fm1.l == 0xbf800000L)
           ? 1
           : 0));
  ars = (lr2 != -1 || ir1 != -1 || ir2 != -1 ? 0 : lr1 != -1 ? 1 : 2);
  fprintf(f, "#define arch_arith_rshift %d\n", ars);
  fprintf(f, "#define arch_can_shift_full_long %d\n", um1 >> lwidth == 0);
  fclose(f);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x18(%rbp)
movq   $0x1,-0x20(%rbp)
lea    0xea4(%rip),%rax
mov    %rax,-0x28(%rbp)
movq   $0xffffffffffffffff,-0x78(%rbp)
ff
mov    -0x78(%rbp),%rax
sar    $0x1,%rax
mov    %rax,-0x80(%rbp)
mov    -0x78(%rbp),%rax
sar    $0x2,%rax
mov    %rax,-0x88(%rbp)
movq   $0xffffffffffffffff,-0x90(%rbp)
ff ff ff ff
movl   $0xffffffff,-0x94(%rbp)
ff ff ff
mov    -0x94(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x98(%rbp)
mov    -0x94(%rbp),%eax
sar    $0x2,%eax
mov    %eax,-0x9c(%rbp)
movl   $0x40,-0xb8(%rbp)
mov    -0x18(%rbp),%rdi
lea    0xe46(%rip),%rsi
call   1050 <fopen@plt>
mov    %rax,-0xd8(%rbp)
cmpq   $0x0,-0xd8(%rbp)
jne    1215 <main+0xe5>
mov    0x2dec(%rip),%rax
movslq (%rax),%rdi
mov    -0x18(%rbp),%rdx
lea    0xe19(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movl   $0x1,-0x4(%rbp)
jmp    16e8 <main+0x5b8>
mov    -0xd8(%rbp),%rdi
lea    0xe1e(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xe4a(%rip),%rsi
lea    0xe4a(%rip),%rdx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    -0x30(%rbp),%rax
add    $0x2,%rax
lea    -0x30(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe5e(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    -0x38(%rbp),%rax
add    $0x4,%rax
lea    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe59(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    -0x48(%rbp),%rax
add    $0x8,%rax
lea    -0x48(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe52(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    -0x58(%rbp),%rax
add    $0x8,%rax
lea    -0x58(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe4c(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    -0x60(%rbp),%rax
add    $0x4,%rax
lea    -0x60(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe45(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    -0x70(%rbp),%rax
add    $0x8,%rax
lea    -0x70(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
lea    0xe40(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xd4a(%rip),%rsi
lea    0xe46(%rip),%rdx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    0x2cf5(%rip),%edx
lea    0xe60(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    0x2ce2(%rip),%edx
lea    0xe68(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    0x2cd7(%rip),%edx
lea    0xe6e(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xe7b(%rip),%rsi
mov    $0x8,%edx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xe80(%rip),%rsi
mov    $0x8,%edx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xe82(%rip),%rsi
mov    $0x4,%edx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xe86(%rip),%rsi
mov    $0x8,%edx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xc75(%rip),%rsi
lea    0xe84(%rip),%rdx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    -0x28(%rbp),%r8
add    $0x10,%r8
add    $0xfffffffffffffffe,%r8
lea    0xe9f(%rip),%rsi
lea    0xec2(%rip),%rdx
lea    0xec1(%rip),%rax
lea    0xc3e(%rip),%r9
mov    %rax,%rcx
mov    %rax,(%rsp)
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    -0x28(%rbp),%r8
add    $0x10,%r8
add    $0xfffffffffffffffc,%r8
lea    0xe62(%rip),%rsi
lea    0xe99(%rip),%rdx
lea    0xe99(%rip),%rax
lea    0xc01(%rip),%r9
mov    %rax,%rcx
mov    %rax,(%rsp)
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    -0x28(%rbp),%r8
add    $0x10,%r8
add    $0xfffffffffffffff8,%r8
lea    0xe25(%rip),%rsi
lea    0xe72(%rip),%rdx
lea    0xe70(%rip),%rax
lea    0xbc4(%rip),%r9
mov    %rax,%rcx
mov    %rax,(%rsp)
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    -0x28(%rbp),%r8
add    $0x10,%r8
add    $0xfffffffffffffff0,%r8
lea    0xde8(%rip),%rsi
lea    0xe47(%rip),%rdx
lea    0xe46(%rip),%rax
lea    0xe4d(%rip),%r9
mov    %rax,%rcx
mov    %rax,(%rsp)
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
lea    0xb65(%rip),%rsi
lea    0xe2c(%rip),%rdx
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
movsbl -0x20(%rbp),%eax
mov    $0x1,%edx
sub    %eax,%edx
lea    0xe42(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
movq   $0x0,-0xa8(%rbp)
movq   $0xffffffffffffffff,-0xb0(%rbp)
ff ff ff ff
mov    -0xd8(%rbp),%rdi
mov    -0xb0(%rbp),%rax
cmp    -0xa8(%rbp),%rax
setb   %al
and    $0x1,%al
movzbl %al,%edx
lea    0xe20(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0xc0(%rbp)
ff
movss  0xa65(%rip),%xmm0
movss  %xmm0,-0xc8(%rbp)
ff
movss  0xa51(%rip),%xmm0
movss  %xmm0,-0xd0(%rbp)
ff
mov    -0xd8(%rbp),%rax
mov    %rax,-0xe8(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0xc0(%rbp)
mov    %al,-0xd9(%rbp)
jne    1605 <main+0x4d5>
xor    %eax,%eax
cmpl   $0x3f800000,-0xc8(%rbp)
mov    %al,-0xd9(%rbp)
jne    1605 <main+0x4d5>
cmpl   $0xbf800000,-0xd0(%rbp)
sete   %al
mov    %al,-0xd9(%rbp)
mov    -0xe8(%rbp),%rdi
mov    -0xd9(%rbp),%cl
xor    %edx,%edx
mov    $0x1,%eax
test   $0x1,%cl
cmovne %eax,%edx
lea    0xda0(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
cmpq   $0xffffffffffffffff,-0x88(%rbp)
ff
jne    1655 <main+0x525>
cmpl   $0xffffffff,-0x98(%rbp)
jne    1655 <main+0x525>
cmpl   $0xffffffff,-0x9c(%rbp)
je     1662 <main+0x532>
xor    %eax,%eax
mov    %eax,-0xec(%rbp)
jmp    167d <main+0x54d>
mov    -0x80(%rbp),%rdx
mov    $0x2,%eax
mov    $0x1,%ecx
cmp    $0xffffffffffffffff,%rdx
cmovne %ecx,%eax
mov    %eax,-0xec(%rbp)
mov    -0xec(%rbp),%eax
mov    %eax,-0xb4(%rbp)
mov    -0xd8(%rbp),%rdi
mov    -0xb4(%rbp),%edx
lea    0xd4a(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
mov    -0x90(%rbp),%rax
mov    -0xb8(%rbp),%ecx
shr    %cl,%rax
cmp    $0x0,%rax
sete   %al
and    $0x1,%al
movzbl %al,%edx
lea    0xd37(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
mov    -0xd8(%rbp),%rdi
call   1030 <fclose@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    0x8(%rsi),%rbp
lea    0xebb(%rip),%rsi
mov    %rbp,%rdi
call   1050 <fopen@plt>
test   %rax,%rax
je     1421 <main+0x2e1>
mov    %rax,%rbx
lea    0xec8(%rip),%rdi
mov    $0x40,%esi
mov    $0x1,%edx
mov    %rax,%rcx
call   1060 <fwrite@plt>
lea    0xef0(%rip),%r14
lea    0xef0(%rip),%rdx
xor    %r15d,%r15d
mov    %rbx,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf13(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf1e(%rip),%rsi
mov    %rbx,%rdi
mov    $0x4,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf27(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf31(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf3a(%rip),%rsi
mov    %rbx,%rdi
mov    $0x4,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf45(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf51(%rip),%rdx
mov    %rbx,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf72(%rip),%rsi
mov    %rbx,%rdi
mov    $0x1,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf7f(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf8a(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf96(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xf9f(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfa5(%rip),%rsi
mov    %rbx,%rdi
mov    $0x4,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfad(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfb6(%rip),%rdx
mov    %rbx,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0x100e(%rip),%rcx
mov    %rcx,(%rsp)
lea    0xfd3(%rip),%rbp
lea    0xff6(%rip),%rdx
lea    0xd07(%rip),%r8
lea    0xd72(%rip),%r13
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %r13,%r9
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xcdb(%rip),%r12
lea    0xfe5(%rip),%rcx
mov    %rcx,(%rsp)
lea    0xfd3(%rip),%rdx
lea    0xcce(%rip),%r8
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %r13,%r9
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfd0(%rip),%rcx
mov    %rcx,(%rsp)
lea    0xfc0(%rip),%rdx
lea    0xca1(%rip),%r8
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %r13,%r9
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfba(%rip),%rcx
mov    %rcx,(%rsp)
lea    0xfa9(%rip),%rdx
lea    0xfb6(%rip),%r9
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %r12,%r8
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfa1(%rip),%rdx
mov    %rbx,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfc3(%rip),%rsi
mov    %rbx,%rdi
xor    %edx,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfcf(%rip),%rsi
mov    %rbx,%rdi
xor    %edx,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfdd(%rip),%rsi
mov    %rbx,%rdi
mov    $0x1,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xfe8(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
xor    %eax,%eax
call   1040 <fprintf@plt>
lea    0xff0(%rip),%rsi
mov    %rbx,%rdi
xor    %eax,%eax
call   1040 <fprintf@plt>
mov    %rbx,%rdi
call   1030 <fclose@plt>
jmp    1442 <main+0x302>
mov    0x2bb8(%rip),%rax
movslq (%rax),%rdi
lea    0xbe1(%rip),%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1040 <fprintf@plt>
mov    $0x1,%r15d
mov    %r15d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.anon = type { i8, i16 }
%struct.anon.0 = type { i8, i32 }
%struct.anon.1 = type { i8, i64 }
%struct.anon.2 = type { i8, i8* }
%struct.anon.3 = type { i8, float }
%struct.anon.4 = type { i8, double }
%union.anon = type { i64 }
%union.anon.5 = type { i64 }
@.str = [17 x i8] c"ffffffffffffffff\00"
@main.log2s = internal global [17 x i32] [i32 0, i32 0, i32 1, i32 0, i32 2, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 4]
@.str.1 = [2 x i8] c"w\00"
@stderr = global i32 0
@.str.2 = [38 x i8] c"genarch.c: can't open %s for writing\0A\00"
@.str.3 = [65 x i8] c"/* Parameters derived from machine and compiler architecture */\0A\00"
@.str.4 = [7 x i8] c"\0A\09%s\0A\0A\00"
@.str.5 = [58 x i8] c"/* ---------------- Scalar alignments ---------------- */\00"
@.str.6 = [33 x i8] c"#define arch_align_short_mod %d\0A\00"
@.str.7 = [31 x i8] c"#define arch_align_int_mod %d\0A\00"
@.str.8 = [32 x i8] c"#define arch_align_long_mod %d\0A\00"
@.str.9 = [31 x i8] c"#define arch_align_ptr_mod %d\0A\00"
@.str.10 = [33 x i8] c"#define arch_align_float_mod %d\0A\00"
@.str.11 = [34 x i8] c"#define arch_align_double_mod %d\0A\00"
@.str.12 = [53 x i8] c"/* ---------------- Scalar sizes ---------------- */\00"
@.str.13 = [35 x i8] c"#define arch_log2_sizeof_short %d\0A\00"
@.str.14 = [33 x i8] c"#define arch_log2_sizeof_int %d\0A\00"
@.str.15 = [34 x i8] c"#define arch_log2_sizeof_long %d\0A\00"
@.str.16 = [31 x i8] c"#define arch_sizeof_ds_ptr %d\0A\00"
@.str.17 = [28 x i8] c"#define arch_sizeof_ptr %d\0A\00"
@.str.18 = [30 x i8] c"#define arch_sizeof_float %d\0A\00"
@.str.19 = [31 x i8] c"#define arch_sizeof_double %d\0A\00"
@.str.20 = [60 x i8] c"/* ---------------- Unsigned max values ---------------- */\00"
@.str.21 = [42 x i8] c"#define arch_max_%s ((%s)0x%s%s + (%s)0)\0A\00"
@.str.22 = [6 x i8] c"uchar\00"
@.str.23 = [14 x i8] c"unsigned char\00"
@.str.24 = [1 x i8] zeroinitializer
@.str.25 = [7 x i8] c"ushort\00"
@.str.26 = [15 x i8] c"unsigned short\00"
@.str.27 = [5 x i8] c"uint\00"
@.str.28 = [13 x i8] c"unsigned int\00"
@.str.29 = [6 x i8] c"ulong\00"
@.str.30 = [14 x i8] c"unsigned long\00"
@.str.31 = [2 x i8] c"L\00"
@.str.32 = [54 x i8] c"/* ---------------- Miscellaneous ---------------- */\00"
@.str.33 = [31 x i8] c"#define arch_is_big_endian %d\0A\00"
@.str.34 = [33 x i8] c"#define arch_ptrs_are_signed %d\0A\00"
@.str.35 = [33 x i8] c"#define arch_floats_are_IEEE %d\0A\00"
@.str.36 = [30 x i8] c"#define arch_arith_rshift %d\0A\00"
@.str.37 = [37 x i8] c"#define arch_can_shift_full_long %d\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i8*
%9 = alloca %struct.anon
%10 = alloca %struct.anon.0
%11 = alloca %struct.anon.1
%12 = alloca %struct.anon.2
%13 = alloca %struct.anon.3
%14 = alloca %struct.anon.4
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca %union.anon
%23 = alloca %union.anon
%24 = alloca i32
%25 = alloca i32
%26 = alloca %union.anon.5
%27 = alloca %union.anon.5
%28 = alloca %union.anon.5
%29 = alloca i32*
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%30 = load i8**, i8*** %5
%31 = getelementptr inbounds i8*, i8** %30, i64 1
%32 = load i8*, i8** %31
store i8* %32, i8** %6
store i64 1, i64* %7
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8** %8
store i64 -1, i64* %15
%33 = load i64, i64* %15
%34 = ashr i64 %33, 1
store i64 %34, i64* %16
%35 = load i64, i64* %15
%36 = ashr i64 %35, 2
store i64 %36, i64* %17
store i64 -1, i64* %18
store i32 -1, i32* %19
%37 = load i32, i32* %19
%38 = ashr i32 %37, 1
store i32 %38, i32* %20
%39 = load i32, i32* %19
%40 = ashr i32 %39, 2
store i32 %40, i32* %21
store i32 64, i32* %25
%41 = load i8*, i8** %6
%42 = call i32* @fopen(i8* %41, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32* %42, i32** %29
%43 = load i32*, i32** %29
%44 = icmp eq i32* %43, null
br i1 %44, label %45, label %51
45: ; preds = %2
%46 = load i32, i32* @stderr
%47 = sext i32 %46 to i64
%48 = inttoptr i64 %47 to i32*
%49 = load i8*, i8** %6
%50 = call i32 (i32*, i8*, ...) @fprintf(i32* %48, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0), i8* %49)
store i32 1, i32* %3
br label %218
51: ; preds = %2
%52 = load i32*, i32** %29
%53 = call i32 (i32*, i8*, ...) @fprintf(i32* %52, i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.3, i64 0, i64 0))
%54 = load i32*, i32** %29
%55 = call i32 (i32*, i8*, ...) @fprintf(i32* %54, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.5, i64 0, i64 0))
%56 = load i32*, i32** %29
%57 = getelementptr inbounds %struct.anon, %struct.anon* %9, i32 0, i32 1
%58 = bitcast i16* %57 to i8*
%59 = bitcast %struct.anon* %9 to i8*
%60 = ptrtoint i8* %58 to i64
%61 = ptrtoint i8* %59 to i64
%62 = sub i64 %60, %61
%63 = trunc i64 %62 to i32
%64 = call i32 (i32*, i8*, ...) @fprintf(i32* %56, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.6, i64 0, i64 0), i32 %63)
%65 = load i32*, i32** %29
%66 = getelementptr inbounds %struct.anon.0, %struct.anon.0* %10, i32 0, i32 1
%67 = bitcast i32* %66 to i8*
%68 = bitcast %struct.anon.0* %10 to i8*
%69 = ptrtoint i8* %67 to i64
%70 = ptrtoint i8* %68 to i64
%71 = sub i64 %69, %70
%72 = trunc i64 %71 to i32
%73 = call i32 (i32*, i8*, ...) @fprintf(i32* %65, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.7, i64 0, i64 0), i32 %72)
%74 = load i32*, i32** %29
%75 = getelementptr inbounds %struct.anon.1, %struct.anon.1* %11, i32 0, i32 1
%76 = bitcast i64* %75 to i8*
%77 = bitcast %struct.anon.1* %11 to i8*
%78 = ptrtoint i8* %76 to i64
%79 = ptrtoint i8* %77 to i64
%80 = sub i64 %78, %79
%81 = trunc i64 %80 to i32
%82 = call i32 (i32*, i8*, ...) @fprintf(i32* %74, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i32 %81)
%83 = load i32*, i32** %29
%84 = getelementptr inbounds %struct.anon.2, %struct.anon.2* %12, i32 0, i32 1
%85 = bitcast i8** %84 to i8*
%86 = bitcast %struct.anon.2* %12 to i8*
%87 = ptrtoint i8* %85 to i64
%88 = ptrtoint i8* %86 to i64
%89 = sub i64 %87, %88
%90 = trunc i64 %89 to i32
%91 = call i32 (i32*, i8*, ...) @fprintf(i32* %83, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 %90)
%92 = load i32*, i32** %29
%93 = getelementptr inbounds %struct.anon.3, %struct.anon.3* %13, i32 0, i32 1
%94 = bitcast float* %93 to i8*
%95 = bitcast %struct.anon.3* %13 to i8*
%96 = ptrtoint i8* %94 to i64
%97 = ptrtoint i8* %95 to i64
%98 = sub i64 %96, %97
%99 = trunc i64 %98 to i32
%100 = call i32 (i32*, i8*, ...) @fprintf(i32* %92, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i32 %99)
%101 = load i32*, i32** %29
%102 = getelementptr inbounds %struct.anon.4, %struct.anon.4* %14, i32 0, i32 1
%103 = bitcast double* %102 to i8*
%104 = bitcast %struct.anon.4* %14 to i8*
%105 = ptrtoint i8* %103 to i64
%106 = ptrtoint i8* %104 to i64
%107 = sub i64 %105, %106
%108 = trunc i64 %107 to i32
%109 = call i32 (i32*, i8*, ...) @fprintf(i32* %101, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.11, i64 0, i64 0), i32 %108)
%110 = load i32*, i32** %29
%111 = call i32 (i32*, i8*, ...) @fprintf(i32* %110, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.12, i64 0, i64 0))
%112 = load i32*, i32** %29
%113 = load i32, i32* getelementptr inbounds ([17 x i32], [17 x i32]* @main.log2s, i64 0, i64 2)
%114 = call i32 (i32*, i8*, ...) @fprintf(i32* %112, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.13, i64 0, i64 0), i32 %113)
%115 = load i32*, i32** %29
%116 = load i32, i32* getelementptr inbounds ([17 x i32], [17 x i32]* @main.log2s, i64 0, i64 4)
%117 = call i32 (i32*, i8*, ...) @fprintf(i32* %115, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.14, i64 0, i64 0), i32 %116)
%118 = load i32*, i32** %29
%119 = load i32, i32* getelementptr inbounds ([17 x i32], [17 x i32]* @main.log2s, i64 0, i64 8)
%120 = call i32 (i32*, i8*, ...) @fprintf(i32* %118, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.15, i64 0, i64 0), i32 %119)
%121 = load i32*, i32** %29
%122 = call i32 (i32*, i8*, ...) @fprintf(i32* %121, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), i32 8)
%123 = load i32*, i32** %29
%124 = call i32 (i32*, i8*, ...) @fprintf(i32* %123, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.17, i64 0, i64 0), i32 8)
%125 = load i32*, i32** %29
%126 = call i32 (i32*, i8*, ...) @fprintf(i32* %125, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.18, i64 0, i64 0), i32 4)
%127 = load i32*, i32** %29
%128 = call i32 (i32*, i8*, ...) @fprintf(i32* %127, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.19, i64 0, i64 0), i32 8)
%129 = load i32*, i32** %29
%130 = call i32 (i32*, i8*, ...) @fprintf(i32* %129, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.20, i64 0, i64 0))
%131 = load i32*, i32** %29
%132 = load i8*, i8** %8
%133 = getelementptr inbounds i8, i8* %132, i64 16
%134 = getelementptr inbounds i8, i8* %133, i64 -2
%135 = call i32 (i32*, i8*, ...) @fprintf(i32* %131, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.23, i64 0, i64 0), i8* %134, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.23, i64 0, i64 0))
%136 = load i32*, i32** %29
%137 = load i8*, i8** %8
%138 = getelementptr inbounds i8, i8* %137, i64 16
%139 = getelementptr inbounds i8, i8* %138, i64 -4
%140 = call i32 (i32*, i8*, ...) @fprintf(i32* %136, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.25, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.26, i64 0, i64 0), i8* %139, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.26, i64 0, i64 0))
%141 = load i32*, i32** %29
%142 = load i8*, i8** %8
%143 = getelementptr inbounds i8, i8* %142, i64 16
%144 = getelementptr inbounds i8, i8* %143, i64 -8
%145 = call i32 (i32*, i8*, ...) @fprintf(i32* %141, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i64 0, i64 0), i8* %144, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i64 0, i64 0))
%146 = load i32*, i32** %29
%147 = load i8*, i8** %8
%148 = getelementptr inbounds i8, i8* %147, i64 16
%149 = getelementptr inbounds i8, i8* %148, i64 -16
%150 = call i32 (i32*, i8*, ...) @fprintf(i32* %146, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.29, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.30, i64 0, i64 0), i8* %149, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.31, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.30, i64 0, i64 0))
%151 = load i32*, i32** %29
%152 = call i32 (i32*, i8*, ...) @fprintf(i32* %151, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.32, i64 0, i64 0))
%153 = load i32*, i32** %29
%154 = bitcast i64* %7 to i8*
%155 = load i8, i8* %154
%156 = sext i8 %155 to i32
%157 = sub nsw i32 1, %156
%158 = call i32 (i32*, i8*, ...) @fprintf(i32* %153, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0), i32 %157)
%159 = bitcast %union.anon* %22 to i64*
store i64 0, i64* %159
%160 = bitcast %union.anon* %23 to i64*
store i64 -1, i64* %160
%161 = load i32*, i32** %29
%162 = bitcast %union.anon* %23 to i8**
%163 = load i8*, i8** %162
%164 = bitcast %union.anon* %22 to i8**
%165 = load i8*, i8** %164
%166 = icmp ult i8* %163, %165
%167 = zext i1 %166 to i32
%168 = call i32 (i32*, i8*, ...) @fprintf(i32* %161, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.34, i64 0, i64 0), i32 %167)
%169 = bitcast %union.anon.5* %26 to float*
store float 0.000000e+00, float* %169
%170 = bitcast %union.anon.5* %27 to float*
store float 1.000000e+00, float* %170
%171 = bitcast %union.anon.5* %28 to float*
store float -1.000000e+00, float* %171
%172 = load i32*, i32** %29
%173 = bitcast %union.anon.5* %26 to i32*
%174 = load i32, i32* %173
%175 = icmp eq i32 %174, 0
br i1 %175, label %176, label %184
176: ; preds = %51
%177 = bitcast %union.anon.5* %27 to i32*
%178 = load i32, i32* %177
%179 = icmp eq i32 %178, 1065353216
br i1 %179, label %180, label %184
180: ; preds = %176
%181 = bitcast %union.anon.5* %28 to i32*
%182 = load i32, i32* %181
%183 = icmp eq i32 %182, -1082130432
br label %184
184: ; preds = %180, %176, %51
%185 = phi i1 [ false, %176 ], [ false, %51 ], [ %183, %180 ]
%186 = zext i1 %185 to i64
%187 = select i1 %185, i32 1, i32 0
%188 = call i32 (i32*, i8*, ...) @fprintf(i32* %172, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.35, i64 0, i64 0), i32 %187)
%189 = load i64, i64* %17
%190 = icmp ne i64 %189, -1
br i1 %190, label %197, label %191
191: ; preds = %184
%192 = load i32, i32* %20
%193 = icmp ne i32 %192, -1
br i1 %193, label %197, label %194
194: ; preds = %191
%195 = load i32, i32* %21
%196 = icmp ne i32 %195, -1
br i1 %196, label %197, label %198
197: ; preds = %194, %191, %184
br label %203
198: ; preds = %194
%199 = load i64, i64* %16
%200 = icmp ne i64 %199, -1
%201 = zext i1 %200 to i64
%202 = select i1 %200, i32 1, i32 2
br label %203
203: ; preds = %198, %197
%204 = phi i32 [ 0, %197 ], [ %202, %198 ]
store i32 %204, i32* %24
%205 = load i32*, i32** %29
%206 = load i32, i32* %24
%207 = call i32 (i32*, i8*, ...) @fprintf(i32* %205, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.36, i64 0, i64 0), i32 %206)
%208 = load i32*, i32** %29
%209 = load i64, i64* %18
%210 = load i32, i32* %25
%211 = zext i32 %210 to i64
%212 = lshr i64 %209, %211
%213 = icmp eq i64 %212, 0
%214 = zext i1 %213 to i32
%215 = call i32 (i32*, i8*, ...) @fprintf(i32* %208, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.37, i64 0, i64 0), i32 %214)
%216 = load i32*, i32** %29
%217 = call i32 @fclose(i32* %216)
store i32 0, i32* %3
br label %218
218: ; preds = %203, %45
%219 = load i32, i32* %3
ret i32 %219
}

LLVM IR (-O2):
@.str = [17 x i8] c"ffffffffffffffff\00"
@.str.1 = [2 x i8] c"w\00"
@stderr = global i32 0
@.str.2 = [38 x i8] c"genarch.c: can't open %s for writing\0A\00"
@.str.3 = [65 x i8] c"/* Parameters derived from machine and compiler architecture */\0A\00"
@.str.4 = [7 x i8] c"\0A\09%s\0A\0A\00"
@.str.5 = [58 x i8] c"/* ---------------- Scalar alignments ---------------- */\00"
@.str.6 = [33 x i8] c"#define arch_align_short_mod %d\0A\00"
@.str.7 = [31 x i8] c"#define arch_align_int_mod %d\0A\00"
@.str.8 = [32 x i8] c"#define arch_align_long_mod %d\0A\00"
@.str.9 = [31 x i8] c"#define arch_align_ptr_mod %d\0A\00"
@.str.10 = [33 x i8] c"#define arch_align_float_mod %d\0A\00"
@.str.11 = [34 x i8] c"#define arch_align_double_mod %d\0A\00"
@.str.12 = [53 x i8] c"/* ---------------- Scalar sizes ---------------- */\00"
@.str.13 = [35 x i8] c"#define arch_log2_sizeof_short %d\0A\00"
@.str.14 = [33 x i8] c"#define arch_log2_sizeof_int %d\0A\00"
@.str.15 = [34 x i8] c"#define arch_log2_sizeof_long %d\0A\00"
@.str.16 = [31 x i8] c"#define arch_sizeof_ds_ptr %d\0A\00"
@.str.17 = [28 x i8] c"#define arch_sizeof_ptr %d\0A\00"
@.str.18 = [30 x i8] c"#define arch_sizeof_float %d\0A\00"
@.str.19 = [31 x i8] c"#define arch_sizeof_double %d\0A\00"
@.str.20 = [60 x i8] c"/* ---------------- Unsigned max values ---------------- */\00"
@.str.21 = [42 x i8] c"#define arch_max_%s ((%s)0x%s%s + (%s)0)\0A\00"
@.str.22 = [6 x i8] c"uchar\00"
@.str.23 = [14 x i8] c"unsigned char\00"
@.str.24 = [1 x i8] zeroinitializer
@.str.25 = [7 x i8] c"ushort\00"
@.str.26 = [15 x i8] c"unsigned short\00"
@.str.27 = [5 x i8] c"uint\00"
@.str.28 = [13 x i8] c"unsigned int\00"
@.str.29 = [6 x i8] c"ulong\00"
@.str.30 = [14 x i8] c"unsigned long\00"
@.str.31 = [2 x i8] c"L\00"
@.str.32 = [54 x i8] c"/* ---------------- Miscellaneous ---------------- */\00"
@.str.33 = [31 x i8] c"#define arch_is_big_endian %d\0A\00"
@.str.34 = [33 x i8] c"#define arch_ptrs_are_signed %d\0A\00"
@.str.35 = [33 x i8] c"#define arch_floats_are_IEEE %d\0A\00"
@.str.36 = [30 x i8] c"#define arch_arith_rshift %d\0A\00"
@.str.37 = [37 x i8] c"#define arch_can_shift_full_long %d\0A\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = getelementptr inbounds i8*, i8** %1, i64 1
%4 = load i8*, i8** %3
%5 = tail call i32* @fopen(i8* %4, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%6 = icmp eq i32* %5, null
br i1 %6, label %7, label %12
7: ; preds = %2
%8 = load i32, i32* @stderr
%9 = sext i32 %8 to i64
%10 = inttoptr i64 %9 to i32*
%11 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %10, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0), i8* %4)
br label %41
12: ; preds = %2
%13 = tail call i64 @fwrite(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.3, i64 0, i64 0), i64 64, i64 1, i32* %5)
%14 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.5, i64 0, i64 0))
%15 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.6, i64 0, i64 0), i32 2)
%16 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.7, i64 0, i64 0), i32 4)
%17 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i32 8)
%18 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i32 8)
%19 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i32 4)
%20 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.11, i64 0, i64 0), i32 8)
%21 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.12, i64 0, i64 0))
%22 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.13, i64 0, i64 0), i32 1)
%23 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.14, i64 0, i64 0), i32 2)
%24 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.15, i64 0, i64 0), i32 3)
%25 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), i32 8)
%26 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.17, i64 0, i64 0), i32 8)
%27 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.18, i64 0, i64 0), i32 4)
%28 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.19, i64 0, i64 0), i32 8)
%29 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.20, i64 0, i64 0))
%30 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.23, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 14), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.23, i64 0, i64 0))
%31 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.25, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.26, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 12), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.26, i64 0, i64 0))
%32 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 8), i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i64 0, i64 0))
%33 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.29, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.30, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.31, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.30, i64 0, i64 0))
%34 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.32, i64 0, i64 0))
%35 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.33, i64 0, i64 0), i32 0)
%36 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.34, i64 0, i64 0), i32 0)
%37 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.35, i64 0, i64 0), i32 1)
%38 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.36, i64 0, i64 0), i32 2)
%39 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %5, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.37, i64 0, i64 0), i32 poison)
%40 = tail call i32 @fclose(i32* %5)
br label %41
41: ; preds = %12, %7
%42 = phi i32 [ 1, %7 ], [ 0, %12 ]
ret i32 %42
}