#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 */
int /*<<< orphan*/ printf(char *, ...);
int main(void) {
  char c = 'X';
  char s[] = "abcdefghijklmnopqrstuvwxyz";
  int i = 425;
  short int j = 17;
  unsigned int u = 0xf179U;
  long int l = 75000L;
  long long int L = 0x1234567812345678LL;
  float f = 12.978F;
  double d = -97.4583;
  char *cp = &c;
  int *ip = &i;
  int c1, c2;
  printf("Integers:\n");
  printf("%i %o %x %u\n", i, i, i, i);
  printf("%x %X %#x %#X\n", i, i, i, i);
  printf("%+i % i %07i %.7i\n", i, i, i, i);
  printf("%i %o %x %u\n", j, j, j, j);
  printf("%i %o %x %u\n", u, u, u, u);
  printf("%ld %lo %lx %lu\n", l, l, l, l);
  printf("%lli %llo %llx %llu\n", L, L, L, L);
  printf("\nFloats and Doubles:\n");
  printf("%f %e %g\n", f, f, f);
  printf("%.2f %.2e\n", f, f);
  printf("%.0f %.0e\n", f, f);
  printf("%7.2f %7.2e\n", f, f);
  printf("%f %e %g\n", d, d, d);
  printf("%.*f\n", 3, d);
  printf("%*.*f\n", 8, 2, d);
  printf("\nCharacters:\n");
  printf("%c\n", c);
  printf("%3c%3c\n", c, c);
  printf("%x\n", c);
  printf("\nStrings:\n");
  printf("%s\n", s);
  printf("%.5s\n", s);
  printf("%30s\n", s);
  printf("%20.5s\n", s);
  printf("%-20.5s\n", s);
  printf("\nPointers:\n");
  printf("%p  %p\n\n", ip, cp);
  printf("This%n is fun.%n\n", &c1, &c2);
  printf("c1 = %i, c2 = %i\n", c1, c2);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
movb   $0x58,-0x5(%rbp)
mov    0xee6(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xee3(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0xee0(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    0xedd(%rip),%ax
mov    %ax,-0x8(%rbp)
mov    0xed5(%rip),%al
mov    %al,-0x6(%rbp)
movl   $0x1a9,-0x24(%rbp)
movw   $0x11,-0x26(%rbp)
movl   $0xf179,-0x2c(%rbp)
movq   $0x124f8,-0x38(%rbp)
movabs $0x1234567812345678,%rax
56 34 12
mov    %rax,-0x40(%rbp)
movss  0xe7e(%rip),%xmm0
movss  %xmm0,-0x44(%rbp)
movsd  0xe69(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
lea    -0x5(%rbp),%rax
mov    %rax,-0x58(%rbp)
lea    -0x24(%rbp),%rax
mov    %rax,-0x60(%rbp)
lea    0xe78(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x24(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x24(%rbp),%r8d
lea    0xe68(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x24(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x24(%rbp),%r8d
lea    0xe5a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x24(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    -0x24(%rbp),%ecx
mov    -0x24(%rbp),%r8d
lea    0xe4e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movswl -0x26(%rbp),%esi
movswl -0x26(%rbp),%edx
movswl -0x26(%rbp),%ecx
movswl -0x26(%rbp),%r8d
lea    0xe13(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x2c(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    -0x2c(%rbp),%ecx
mov    -0x2c(%rbp),%r8d
lea    0xdf8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x38(%rbp),%rsi
mov    -0x38(%rbp),%rdx
mov    -0x38(%rbp),%rcx
mov    -0x38(%rbp),%r8
lea    0xe09(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x40(%rbp),%rsi
mov    -0x40(%rbp),%rdx
mov    -0x40(%rbp),%rcx
mov    -0x40(%rbp),%r8
lea    0xdfc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe03(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movss  -0x44(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
lea    0xdf0(%rip),%rdi
mov    $0x3,%al
call   1030 <printf@plt>
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xdda(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xdc5(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x44(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xdb0(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
lea    0xd73(%rip),%rdi
mov    $0x3,%al
call   1030 <printf@plt>
movsd  -0x50(%rbp),%xmm0
lea    0xd8d(%rip),%rdi
mov    $0x3,%esi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x50(%rbp),%xmm0
lea    0xd7b(%rip),%rdi
mov    $0x8,%esi
mov    $0x2,%edx
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xd6a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x5(%rbp),%esi
lea    0xd66(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x5(%rbp),%esi
movsbl -0x5(%rbp),%edx
lea    0xd54(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl -0x5(%rbp),%esi
lea    0xd4a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd40(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x20(%rbp),%rsi
lea    0xd39(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x20(%rbp),%rsi
lea    0xd2b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x20(%rbp),%rsi
lea    0xd1f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x20(%rbp),%rsi
lea    0xd13(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x20(%rbp),%rsi
lea    0xd09(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd04(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x60(%rbp),%rsi
mov    -0x58(%rbp),%rdx
lea    0xcfa(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xcf5(%rip),%rdi
lea    -0x64(%rbp),%rsi
lea    -0x68(%rbp),%rdx
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x64(%rbp),%esi
mov    -0x68(%rbp),%edx
lea    0xceb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x30,%rsp
movb   $0x58,0x3(%rsp)
movups 0xeea(%rip),%xmm0
movups %xmm0,0x1b(%rsp)
movaps 0xed3(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movl   $0x1a9,0xc(%rsp)
lea    0xfc3(%rip),%rdi
call   1030 <puts@plt>
lea    0xece(%rip),%rbx
mov    %rbx,%rdi
mov    $0x1a9,%esi
mov    $0x1a9,%edx
mov    $0x1a9,%ecx
mov    $0x1a9,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xeb5(%rip),%rdi
mov    $0x1a9,%esi
mov    $0x1a9,%edx
mov    $0x1a9,%ecx
mov    $0x1a9,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xea1(%rip),%rdi
mov    $0x1a9,%esi
mov    $0x1a9,%edx
mov    $0x1a9,%ecx
mov    $0x1a9,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0x11,%esi
mov    $0x11,%edx
mov    $0x11,%ecx
mov    $0x11,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
mov    $0xf179,%esi
mov    $0xf179,%edx
mov    $0xf179,%ecx
mov    $0xf179,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xe53(%rip),%rdi
mov    $0x124f8,%esi
mov    $0x124f8,%edx
mov    $0x124f8,%ecx
mov    $0x124f8,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xe41(%rip),%rdi
movabs $0x1234567812345678,%rcx
56 34 12
mov    %rcx,%rsi
mov    %rcx,%rdx
mov    %rcx,%r8
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xed3(%rip),%rdi
call   1030 <puts@plt>
lea    0xe29(%rip),%rbx
movsd  0xda1(%rip),%xmm0
mov    %rbx,%rdi
movaps %xmm0,%xmm1
movaps %xmm0,%xmm2
mov    $0x3,%al
call   1040 <printf@plt>
lea    0xe14(%rip),%rdi
movsd  0xd82(%rip),%xmm0
movaps %xmm0,%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xe06(%rip),%rdi
movsd  0xd69(%rip),%xmm0
movaps %xmm0,%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xdf8(%rip),%rdi
movsd  0xd50(%rip),%xmm0
movaps %xmm0,%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0xd46(%rip),%xmm0
mov    %rbx,%rdi
movaps %xmm0,%xmm1
movaps %xmm0,%xmm2
mov    $0x3,%al
call   1040 <printf@plt>
lea    0xdd4(%rip),%rdi
mov    $0x3,%esi
movsd  0xd22(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xdbf(%rip),%rdi
mov    $0x8,%esi
mov    $0x2,%edx
movsd  0xd02(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xe1f(%rip),%rdi
call   1030 <puts@plt>
lea    0xd9a(%rip),%rdi
mov    $0x58,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd8b(%rip),%rdi
mov    $0x58,%esi
mov    $0x58,%edx
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd7b(%rip),%rdi
mov    $0x58,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xde2(%rip),%rdi
call   1030 <puts@plt>
lea    0x10(%rsp),%rbx
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0xd53(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd48(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd3d(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd34(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd8f(%rip),%rdi
call   1030 <puts@plt>
lea    0xd20(%rip),%rdi
lea    0xc(%rsp),%rsi
lea    0x3(%rsp),%rdx
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xd11(%rip),%rdi
lea    0x8(%rsp),%rsi
lea    0x4(%rsp),%rdx
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%esi
mov    0x4(%rsp),%edx
lea    0xd03(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.main.s = [27 x i8] c"abcdefghijklmnopqrstuvwxyz\00"
@.str = [11 x i8] c"Integers:\0A\00"
@.str.1 = [13 x i8] c"%i %o %x %u\0A\00"
@.str.2 = [15 x i8] c"%x %X %#x %#X\0A\00"
@.str.3 = [19 x i8] c"%+i % i %07i %.7i\0A\00"
@.str.4 = [17 x i8] c"%ld %lo %lx %lu\0A\00"
@.str.5 = [21 x i8] c"%lli %llo %llx %llu\0A\00"
@.str.6 = [22 x i8] c"\0AFloats and Doubles:\0A\00"
@.str.7 = [10 x i8] c"%f %e %g\0A\00"
@.str.8 = [11 x i8] c"%.2f %.2e\0A\00"
@.str.9 = [11 x i8] c"%.0f %.0e\0A\00"
@.str.10 = [13 x i8] c"%7.2f %7.2e\0A\00"
@.str.11 = [6 x i8] c"%.*f\0A\00"
@.str.12 = [7 x i8] c"%*.*f\0A\00"
@.str.13 = [14 x i8] c"\0ACharacters:\0A\00"
@.str.14 = [4 x i8] c"%c\0A\00"
@.str.15 = [8 x i8] c"%3c%3c\0A\00"
@.str.16 = [4 x i8] c"%x\0A\00"
@.str.17 = [11 x i8] c"\0AStrings:\0A\00"
@.str.18 = [4 x i8] c"%s\0A\00"
@.str.19 = [6 x i8] c"%.5s\0A\00"
@.str.20 = [6 x i8] c"%30s\0A\00"
@.str.21 = [8 x i8] c"%20.5s\0A\00"
@.str.22 = [9 x i8] c"%-20.5s\0A\00"
@.str.23 = [12 x i8] c"\0APointers:\0A\00"
@.str.24 = [9 x i8] c"%p %p\0A\0A\00"
@.str.25 = [18 x i8] c"This%n is fun.%n\0A\00"
@.str.26 = [18 x i8] c"c1 = %i, c2 = %i\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8
%3 = alloca [27 x i8]
%4 = alloca i32
%5 = alloca i16
%6 = alloca i32
%7 = alloca i64
%8 = alloca i64
%9 = alloca float
%10 = alloca double
%11 = alloca i8*
%12 = alloca i32*
%13 = alloca i32
%14 = alloca i32
store i32 0, i32* %1
store i8 88, i8* %2
%15 = bitcast [27 x i8]* %3 to i8*
store i32 425, i32* %4
store i16 17, i16* %5
store i32 61817, i32* %6
store i64 75000, i64* %7
store i64 1311768465173141112, i64* %8
store float 0x4029F4BC60000000, float* %9
store double 0xC0585D54C985F06F, double* %10
store i8* %2, i8** %11
store i32* %4, i32** %12
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0))
%17 = load i32, i32* %4
%18 = load i32, i32* %4
%19 = load i32, i32* %4
%20 = load i32, i32* %4
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 %17, i32 %18, i32 %19, i32 %20)
%22 = load i32, i32* %4
%23 = load i32, i32* %4
%24 = load i32, i32* %4
%25 = load i32, i32* %4
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.2, i64 0, i64 0), i32 %22, i32 %23, i32 %24, i32 %25)
%27 = load i32, i32* %4
%28 = load i32, i32* %4
%29 = load i32, i32* %4
%30 = load i32, i32* %4
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i32 %27, i32 %28, i32 %29, i32 %30)
%32 = load i16, i16* %5
%33 = sext i16 %32 to i32
%34 = load i16, i16* %5
%35 = sext i16 %34 to i32
%36 = load i16, i16* %5
%37 = sext i16 %36 to i32
%38 = load i16, i16* %5
%39 = sext i16 %38 to i32
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 %33, i32 %35, i32 %37, i32 %39)
%41 = load i32, i32* %6
%42 = load i32, i32* %6
%43 = load i32, i32* %6
%44 = load i32, i32* %6
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 %41, i32 %42, i32 %43, i32 %44)
%46 = load i64, i64* %7
%47 = load i64, i64* %7
%48 = load i64, i64* %7
%49 = load i64, i64* %7
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.4, i64 0, i64 0), i64 %46, i64 %47, i64 %48, i64 %49)
%51 = load i64, i64* %8
%52 = load i64, i64* %8
%53 = load i64, i64* %8
%54 = load i64, i64* %8
%55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0), i64 %51, i64 %52, i64 %53, i64 %54)
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.6, i64 0, i64 0))
%57 = load float, float* %9
%58 = fpext float %57 to double
%59 = load float, float* %9
%60 = fpext float %59 to double
%61 = load float, float* %9
%62 = fpext float %61 to double
%63 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.7, i64 0, i64 0), double %58, double %60, double %62)
%64 = load float, float* %9
%65 = fpext float %64 to double
%66 = load float, float* %9
%67 = fpext float %66 to double
%68 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0), double %65, double %67)
%69 = load float, float* %9
%70 = fpext float %69 to double
%71 = load float, float* %9
%72 = fpext float %71 to double
%73 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.9, i64 0, i64 0), double %70, double %72)
%74 = load float, float* %9
%75 = fpext float %74 to double
%76 = load float, float* %9
%77 = fpext float %76 to double
%78 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0), double %75, double %77)
%79 = load double, double* %10
%80 = load double, double* %10
%81 = load double, double* %10
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.7, i64 0, i64 0), double %79, double %80, double %81)
%83 = load double, double* %10
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 3, double %83)
%85 = load double, double* %10
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0), i32 8, i32 2, double %85)
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.13, i64 0, i64 0))
%88 = load i8, i8* %2
%89 = sext i8 %88 to i32
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0), i32 %89)
%91 = load i8, i8* %2
%92 = sext i8 %91 to i32
%93 = load i8, i8* %2
%94 = sext i8 %93 to i32
%95 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0), i32 %92, i32 %94)
%96 = load i8, i8* %2
%97 = sext i8 %96 to i32
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 %97)
%99 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.17, i64 0, i64 0))
%100 = getelementptr inbounds [27 x i8], [27 x i8]* %3, i64 0, i64 0
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i64 0, i64 0), i8* %100)
%102 = getelementptr inbounds [27 x i8], [27 x i8]* %3, i64 0, i64 0
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0), i8* %102)
%104 = getelementptr inbounds [27 x i8], [27 x i8]* %3, i64 0, i64 0
%105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i8* %104)
%106 = getelementptr inbounds [27 x i8], [27 x i8]* %3, i64 0, i64 0
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0), i8* %106)
%108 = getelementptr inbounds [27 x i8], [27 x i8]* %3, i64 0, i64 0
%109 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.22, i64 0, i64 0), i8* %108)
%110 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.23, i64 0, i64 0))
%111 = load i32*, i32** %12
%112 = load i8*, i8** %11
%113 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.24, i64 0, i64 0), i32* %111, i8* %112)
%114 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.25, i64 0, i64 0), i32* %13, i32* %14)
%115 = load i32, i32* %13
%116 = load i32, i32* %14
%117 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.26, i64 0, i64 0), i32 %115, i32 %116)
ret i32 0
}

LLVM IR (-O2):
@__const.main.s = [27 x i8] c"abcdefghijklmnopqrstuvwxyz\00"
@.str.1 = [13 x i8] c"%i %o %x %u\0A\00"
@.str.2 = [15 x i8] c"%x %X %#x %#X\0A\00"
@.str.3 = [19 x i8] c"%+i % i %07i %.7i\0A\00"
@.str.4 = [17 x i8] c"%ld %lo %lx %lu\0A\00"
@.str.5 = [21 x i8] c"%lli %llo %llx %llu\0A\00"
@.str.7 = [10 x i8] c"%f %e %g\0A\00"
@.str.8 = [11 x i8] c"%.2f %.2e\0A\00"
@.str.9 = [11 x i8] c"%.0f %.0e\0A\00"
@.str.10 = [13 x i8] c"%7.2f %7.2e\0A\00"
@.str.11 = [6 x i8] c"%.*f\0A\00"
@.str.12 = [7 x i8] c"%*.*f\0A\00"
@.str.14 = [4 x i8] c"%c\0A\00"
@.str.15 = [8 x i8] c"%3c%3c\0A\00"
@.str.16 = [4 x i8] c"%x\0A\00"
@.str.19 = [6 x i8] c"%.5s\0A\00"
@.str.20 = [6 x i8] c"%30s\0A\00"
@.str.21 = [8 x i8] c"%20.5s\0A\00"
@.str.22 = [9 x i8] c"%-20.5s\0A\00"
@.str.24 = [9 x i8] c"%p %p\0A\0A\00"
@.str.25 = [18 x i8] c"This%n is fun.%n\0A\00"
@.str.26 = [18 x i8] c"c1 = %i, c2 = %i\0A\00"
@str = [10 x i8] c"Integers:\00"
@str.27 = [21 x i8] c"\0AFloats and Doubles:\00"
@str.28 = [13 x i8] c"\0ACharacters:\00"
@str.29 = [10 x i8] c"\0AStrings:\00"
@str.30 = [11 x i8] c"\0APointers:\00"
define i32 @main() {
%1 = alloca i8
%2 = alloca [27 x i8]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store i8 88, i8* %1
%6 = getelementptr inbounds [27 x i8], [27 x i8]* %2, i64 0, i64 0
%7 = bitcast i32* %3 to i8*
store i32 425, i32* %3
%8 = bitcast i32* %4 to i8*
%9 = bitcast i32* %5 to i8*
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str, i64 0, i64 0))
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 425, i32 425, i32 425, i32 425)
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.2, i64 0, i64 0), i32 425, i32 425, i32 425, i32 425)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i32 425, i32 425, i32 425, i32 425)
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 17, i32 17, i32 17, i32 17)
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i32 61817, i32 61817, i32 61817, i32 61817)
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.4, i64 0, i64 0), i64 75000, i64 75000, i64 75000, i64 75000)
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.5, i64 0, i64 0), i64 1311768465173141112, i64 1311768465173141112, i64 1311768465173141112, i64 1311768465173141112)
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.27, i64 0, i64 0))
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.7, i64 0, i64 0), double 0x4029F4BC60000000, double 0x4029F4BC60000000, double 0x4029F4BC60000000)
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0), double 0x4029F4BC60000000, double 0x4029F4BC60000000)
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.9, i64 0, i64 0), double 0x4029F4BC60000000, double 0x4029F4BC60000000)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0), double 0x4029F4BC60000000, double 0x4029F4BC60000000)
%23 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.7, i64 0, i64 0), double 0xC0585D54C985F06F, double 0xC0585D54C985F06F, double 0xC0585D54C985F06F)
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 3, double 0xC0585D54C985F06F)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i64 0, i64 0), i32 8, i32 2, double 0xC0585D54C985F06F)
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str.28, i64 0, i64 0))
%27 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i64 0, i64 0), i32 88)
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i64 0, i64 0), i32 88, i32 88)
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 88)
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.29, i64 0, i64 0))
%31 = call i32 @puts(i8* %6)
%32 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.19, i64 0, i64 0), i8* %6)
%33 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.20, i64 0, i64 0), i8* %6)
%34 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0), i8* %6)
%35 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.22, i64 0, i64 0), i8* %6)
%36 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.30, i64 0, i64 0))
%37 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.24, i64 0, i64 0), i32* %3, i8* %1)
%38 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.25, i64 0, i64 0), i32* %4, i32* %5)
%39 = load i32, i32* %4
%40 = load i32, i32* %5
%41 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.26, i64 0, i64 0), i32 %39, i32 %40)
ret i32 0
}