#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 */
typedef struct TYPE_3__ TYPE_1__;

/* Type definitions */
struct TYPE_3__ {
  scalar_t__ window_bdrwidth;
  scalar_t__ window_y;
  scalar_t__ window_x;
  scalar_t__ window_height;
  scalar_t__ window_width;
  scalar_t__ ncolors;
  scalar_t__ colormap_entries;
  scalar_t__ bits_per_rgb;
  scalar_t__ blue_mask;
  scalar_t__ green_mask;
  scalar_t__ red_mask;
  scalar_t__ visual_class;
  scalar_t__ bytes_per_line;
  scalar_t__ bits_per_pixel;
  scalar_t__ bitmap_pad;
  scalar_t__ bitmap_bit_order;
  scalar_t__ bitmap_unit;
  scalar_t__ byte_order;
  scalar_t__ xoffset;
  scalar_t__ pixmap_height;
  scalar_t__ pixmap_width;
  scalar_t__ pixmap_depth;
  scalar_t__ pixmap_format;
  scalar_t__ file_version;
  scalar_t__ header_size;
};
typedef TYPE_1__ XWDFileHeader;

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
void DumpHeader(const XWDFileHeader *header, const char *win_name) {
  printf("window name:        %s\n", win_name);
  printf("sizeof(XWDheader):  %d\n", (int)sizeof(*header));
  printf("header size:        %d\n", (int)header->header_size);
  printf("file version:       %d\n", (int)header->file_version);
  printf("pixmap format:      %d\n", (int)header->pixmap_format);
  printf("pixmap depth:       %d\n", (int)header->pixmap_depth);
  printf("pixmap width:       %d\n", (int)header->pixmap_width);
  printf("pixmap height:      %d\n", (int)header->pixmap_height);
  printf("x offset:           %d\n", (int)header->xoffset);
  printf("byte order:         %d\n", (int)header->byte_order);
  printf("bitmap unit:        %d\n", (int)header->bitmap_unit);
  printf("bitmap bit order:   %d\n", (int)header->bitmap_bit_order);
  printf("bitmap pad:         %d\n", (int)header->bitmap_pad);
  printf("bits per pixel:     %d\n", (int)header->bits_per_pixel);
  printf("bytes per line:     %d\n", (int)header->bytes_per_line);
  printf("visual class:       %d\n", (int)header->visual_class);
  printf("red mask:           %d\n", (int)header->red_mask);
  printf("green mask:         %d\n", (int)header->green_mask);
  printf("blue mask:          %d\n", (int)header->blue_mask);
  printf("bits per rgb:       %d\n", (int)header->bits_per_rgb);
  printf("colormap entries:   %d\n", (int)header->colormap_entries);
  printf("num colors:         %d\n", (int)header->ncolors);
  printf("window width:       %d\n", (int)header->window_width);
  printf("window height:      %d\n", (int)header->window_height);
  printf("window x:           %d\n", (int)header->window_x);
  printf("window y:           %d\n", (int)header->window_y);
  printf("border width:       %d\n", (int)header->window_bdrwidth);
}


x86 assembly (clang, -O0):
<DumpHeader>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rsi
lea    0xed5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xedf(%rip),%rdi
mov    $0xc8,%esi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0xc0(%rax),%rax
mov    %eax,%esi
lea    0xed7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0xb8(%rax),%rax
mov    %eax,%esi
lea    0xed4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0xb0(%rax),%rax
mov    %eax,%esi
lea    0xed1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0xa8(%rax),%rax
mov    %eax,%esi
lea    0xece(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0xa0(%rax),%rax
mov    %eax,%esi
lea    0xecb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x98(%rax),%rax
mov    %eax,%esi
lea    0xec8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x90(%rax),%rax
mov    %eax,%esi
lea    0xec5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x88(%rax),%rax
mov    %eax,%esi
lea    0xec2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x80(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x78(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x70(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x68(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x60(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x58(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x50(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x48(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x40(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x38(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x30(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x28(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x20(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
mov    %eax,%esi
lea    0xebf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %eax,%esi
lea    0xec0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<DumpHeader>:
push   %rbx
mov    %rdi,%rbx
lea    0xee5(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
lea    0xeef(%rip),%rdi
mov    $0xc8,%esi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0xc0(%rbx),%esi
lea    0xeee(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0xb8(%rbx),%esi
lea    0xef2(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0xb0(%rbx),%esi
lea    0xef6(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0xa8(%rbx),%esi
lea    0xefa(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0xa0(%rbx),%esi
lea    0xefe(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x98(%rbx),%esi
lea    0xf02(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x90(%rbx),%esi
lea    0xf06(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x88(%rbx),%esi
lea    0xf0a(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x80(%rbx),%esi
lea    0xf0e(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x78(%rbx),%esi
lea    0xf15(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x70(%rbx),%esi
lea    0xf1c(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x68(%rbx),%esi
lea    0xf23(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x60(%rbx),%esi
lea    0xf2a(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x58(%rbx),%esi
lea    0xf31(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x50(%rbx),%esi
lea    0xf38(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x48(%rbx),%esi
lea    0xf3f(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x40(%rbx),%esi
lea    0xf46(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x38(%rbx),%esi
lea    0xf4d(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x30(%rbx),%esi
lea    0xf54(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x28(%rbx),%esi
lea    0xf5b(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x20(%rbx),%esi
lea    0xf62(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x18(%rbx),%esi
lea    0xf69(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x10(%rbx),%esi
lea    0xf70(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    0x8(%rbx),%esi
lea    0xf77(%rip),%rdi
xor    %eax,%eax
call   1030 <printf@plt>
mov    (%rbx),%esi
lea    0xf7f(%rip),%rdi
xor    %eax,%eax
pop    %rbx
jmp    1030 <printf@plt>

LLVM IR (-O0):
%struct.TYPE_3__ = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }
@.str = [24 x i8] c"window name: %s\0A\00"
@.str.1 = [24 x i8] c"sizeof(XWDheader): %d\0A\00"
@.str.2 = [24 x i8] c"header size: %d\0A\00"
@.str.3 = [24 x i8] c"file version: %d\0A\00"
@.str.4 = [24 x i8] c"pixmap format: %d\0A\00"
@.str.5 = [24 x i8] c"pixmap depth: %d\0A\00"
@.str.6 = [24 x i8] c"pixmap width: %d\0A\00"
@.str.7 = [24 x i8] c"pixmap height: %d\0A\00"
@.str.8 = [24 x i8] c"x offset: %d\0A\00"
@.str.9 = [24 x i8] c"byte order: %d\0A\00"
@.str.10 = [24 x i8] c"bitmap unit: %d\0A\00"
@.str.11 = [24 x i8] c"bitmap bit order: %d\0A\00"
@.str.12 = [24 x i8] c"bitmap pad: %d\0A\00"
@.str.13 = [24 x i8] c"bits per pixel: %d\0A\00"
@.str.14 = [24 x i8] c"bytes per line: %d\0A\00"
@.str.15 = [24 x i8] c"visual class: %d\0A\00"
@.str.16 = [24 x i8] c"red mask: %d\0A\00"
@.str.17 = [24 x i8] c"green mask: %d\0A\00"
@.str.18 = [24 x i8] c"blue mask: %d\0A\00"
@.str.19 = [24 x i8] c"bits per rgb: %d\0A\00"
@.str.20 = [24 x i8] c"colormap entries: %d\0A\00"
@.str.21 = [24 x i8] c"num colors: %d\0A\00"
@.str.22 = [24 x i8] c"window width: %d\0A\00"
@.str.23 = [24 x i8] c"window height: %d\0A\00"
@.str.24 = [24 x i8] c"window x: %d\0A\00"
@.str.25 = [24 x i8] c"window y: %d\0A\00"
@.str.26 = [24 x i8] c"border width: %d\0A\00"
define void @DumpHeader(%struct.TYPE_3__* %0, i8* %1) {
%3 = alloca %struct.TYPE_3__*
%4 = alloca i8*
store %struct.TYPE_3__* %0, %struct.TYPE_3__** %3
store i8* %1, i8** %4
%5 = load i8*, i8** %4
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), i8* %5)
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0), i32 200)
%8 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%9 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %8, i32 0, i32 24
%10 = load i64, i64* %9
%11 = trunc i64 %10 to i32
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.2, i64 0, i64 0), i32 %11)
%13 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%14 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %13, i32 0, i32 23
%15 = load i64, i64* %14
%16 = trunc i64 %15 to i32
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0), i32 %16)
%18 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%19 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %18, i32 0, i32 22
%20 = load i64, i64* %19
%21 = trunc i64 %20 to i32
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.4, i64 0, i64 0), i32 %21)
%23 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%24 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %23, i32 0, i32 21
%25 = load i64, i64* %24
%26 = trunc i64 %25 to i32
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.5, i64 0, i64 0), i32 %26)
%28 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%29 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %28, i32 0, i32 20
%30 = load i64, i64* %29
%31 = trunc i64 %30 to i32
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.6, i64 0, i64 0), i32 %31)
%33 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%34 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %33, i32 0, i32 19
%35 = load i64, i64* %34
%36 = trunc i64 %35 to i32
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i32 %36)
%38 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%39 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %38, i32 0, i32 18
%40 = load i64, i64* %39
%41 = trunc i64 %40 to i32
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.8, i64 0, i64 0), i32 %41)
%43 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%44 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %43, i32 0, i32 17
%45 = load i64, i64* %44
%46 = trunc i64 %45 to i32
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0), i32 %46)
%48 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%49 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %48, i32 0, i32 16
%50 = load i64, i64* %49
%51 = trunc i64 %50 to i32
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.10, i64 0, i64 0), i32 %51)
%53 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%54 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %53, i32 0, i32 15
%55 = load i64, i64* %54
%56 = trunc i64 %55 to i32
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0), i32 %56)
%58 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%59 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %58, i32 0, i32 14
%60 = load i64, i64* %59
%61 = trunc i64 %60 to i32
%62 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.12, i64 0, i64 0), i32 %61)
%63 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%64 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %63, i32 0, i32 13
%65 = load i64, i64* %64
%66 = trunc i64 %65 to i32
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.13, i64 0, i64 0), i32 %66)
%68 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%69 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %68, i32 0, i32 12
%70 = load i64, i64* %69
%71 = trunc i64 %70 to i32
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), i32 %71)
%73 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%74 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %73, i32 0, i32 11
%75 = load i64, i64* %74
%76 = trunc i64 %75 to i32
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.15, i64 0, i64 0), i32 %76)
%78 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%79 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %78, i32 0, i32 10
%80 = load i64, i64* %79
%81 = trunc i64 %80 to i32
%82 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.16, i64 0, i64 0), i32 %81)
%83 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%84 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %83, i32 0, i32 9
%85 = load i64, i64* %84
%86 = trunc i64 %85 to i32
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.17, i64 0, i64 0), i32 %86)
%88 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%89 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %88, i32 0, i32 8
%90 = load i64, i64* %89
%91 = trunc i64 %90 to i32
%92 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.18, i64 0, i64 0), i32 %91)
%93 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%94 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %93, i32 0, i32 7
%95 = load i64, i64* %94
%96 = trunc i64 %95 to i32
%97 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.19, i64 0, i64 0), i32 %96)
%98 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%99 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %98, i32 0, i32 6
%100 = load i64, i64* %99
%101 = trunc i64 %100 to i32
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.20, i64 0, i64 0), i32 %101)
%103 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%104 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %103, i32 0, i32 5
%105 = load i64, i64* %104
%106 = trunc i64 %105 to i32
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.21, i64 0, i64 0), i32 %106)
%108 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%109 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %108, i32 0, i32 4
%110 = load i64, i64* %109
%111 = trunc i64 %110 to i32
%112 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.22, i64 0, i64 0), i32 %111)
%113 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%114 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %113, i32 0, i32 3
%115 = load i64, i64* %114
%116 = trunc i64 %115 to i32
%117 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.23, i64 0, i64 0), i32 %116)
%118 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%119 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %118, i32 0, i32 2
%120 = load i64, i64* %119
%121 = trunc i64 %120 to i32
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.24, i64 0, i64 0), i32 %121)
%123 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%124 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %123, i32 0, i32 1
%125 = load i64, i64* %124
%126 = trunc i64 %125 to i32
%127 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.25, i64 0, i64 0), i32 %126)
%128 = load %struct.TYPE_3__*, %struct.TYPE_3__** %3
%129 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %128, i32 0, i32 0
%130 = load i64, i64* %129
%131 = trunc i64 %130 to i32
%132 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.26, i64 0, i64 0), i32 %131)
ret void
}

LLVM IR (-O2):
%struct.TYPE_3__ = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }
@.str = [24 x i8] c"window name: %s\0A\00"
@.str.1 = [24 x i8] c"sizeof(XWDheader): %d\0A\00"
@.str.2 = [24 x i8] c"header size: %d\0A\00"
@.str.3 = [24 x i8] c"file version: %d\0A\00"
@.str.4 = [24 x i8] c"pixmap format: %d\0A\00"
@.str.5 = [24 x i8] c"pixmap depth: %d\0A\00"
@.str.6 = [24 x i8] c"pixmap width: %d\0A\00"
@.str.7 = [24 x i8] c"pixmap height: %d\0A\00"
@.str.8 = [24 x i8] c"x offset: %d\0A\00"
@.str.9 = [24 x i8] c"byte order: %d\0A\00"
@.str.10 = [24 x i8] c"bitmap unit: %d\0A\00"
@.str.11 = [24 x i8] c"bitmap bit order: %d\0A\00"
@.str.12 = [24 x i8] c"bitmap pad: %d\0A\00"
@.str.13 = [24 x i8] c"bits per pixel: %d\0A\00"
@.str.14 = [24 x i8] c"bytes per line: %d\0A\00"
@.str.15 = [24 x i8] c"visual class: %d\0A\00"
@.str.16 = [24 x i8] c"red mask: %d\0A\00"
@.str.17 = [24 x i8] c"green mask: %d\0A\00"
@.str.18 = [24 x i8] c"blue mask: %d\0A\00"
@.str.19 = [24 x i8] c"bits per rgb: %d\0A\00"
@.str.20 = [24 x i8] c"colormap entries: %d\0A\00"
@.str.21 = [24 x i8] c"num colors: %d\0A\00"
@.str.22 = [24 x i8] c"window width: %d\0A\00"
@.str.23 = [24 x i8] c"window height: %d\0A\00"
@.str.24 = [24 x i8] c"window x: %d\0A\00"
@.str.25 = [24 x i8] c"window y: %d\0A\00"
@.str.26 = [24 x i8] c"border width: %d\0A\00"
define void @DumpHeader(%struct.TYPE_3__* %0, i8* %1) {
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), i8* %1)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.1, i64 0, i64 0), i32 200)
%5 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 24
%6 = load i64, i64* %5
%7 = trunc i64 %6 to i32
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.2, i64 0, i64 0), i32 %7)
%9 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 23
%10 = load i64, i64* %9
%11 = trunc i64 %10 to i32
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0), i32 %11)
%13 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 22
%14 = load i64, i64* %13
%15 = trunc i64 %14 to i32
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.4, i64 0, i64 0), i32 %15)
%17 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 21
%18 = load i64, i64* %17
%19 = trunc i64 %18 to i32
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.5, i64 0, i64 0), i32 %19)
%21 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 20
%22 = load i64, i64* %21
%23 = trunc i64 %22 to i32
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.6, i64 0, i64 0), i32 %23)
%25 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 19
%26 = load i64, i64* %25
%27 = trunc i64 %26 to i32
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.7, i64 0, i64 0), i32 %27)
%29 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 18
%30 = load i64, i64* %29
%31 = trunc i64 %30 to i32
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.8, i64 0, i64 0), i32 %31)
%33 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 17
%34 = load i64, i64* %33
%35 = trunc i64 %34 to i32
%36 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0), i32 %35)
%37 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 16
%38 = load i64, i64* %37
%39 = trunc i64 %38 to i32
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.10, i64 0, i64 0), i32 %39)
%41 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 15
%42 = load i64, i64* %41
%43 = trunc i64 %42 to i32
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0), i32 %43)
%45 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 14
%46 = load i64, i64* %45
%47 = trunc i64 %46 to i32
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.12, i64 0, i64 0), i32 %47)
%49 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 13
%50 = load i64, i64* %49
%51 = trunc i64 %50 to i32
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.13, i64 0, i64 0), i32 %51)
%53 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 12
%54 = load i64, i64* %53
%55 = trunc i64 %54 to i32
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), i32 %55)
%57 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 11
%58 = load i64, i64* %57
%59 = trunc i64 %58 to i32
%60 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.15, i64 0, i64 0), i32 %59)
%61 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 10
%62 = load i64, i64* %61
%63 = trunc i64 %62 to i32
%64 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.16, i64 0, i64 0), i32 %63)
%65 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 9
%66 = load i64, i64* %65
%67 = trunc i64 %66 to i32
%68 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.17, i64 0, i64 0), i32 %67)
%69 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 8
%70 = load i64, i64* %69
%71 = trunc i64 %70 to i32
%72 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.18, i64 0, i64 0), i32 %71)
%73 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 7
%74 = load i64, i64* %73
%75 = trunc i64 %74 to i32
%76 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.19, i64 0, i64 0), i32 %75)
%77 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 6
%78 = load i64, i64* %77
%79 = trunc i64 %78 to i32
%80 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.20, i64 0, i64 0), i32 %79)
%81 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 5
%82 = load i64, i64* %81
%83 = trunc i64 %82 to i32
%84 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.21, i64 0, i64 0), i32 %83)
%85 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 4
%86 = load i64, i64* %85
%87 = trunc i64 %86 to i32
%88 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.22, i64 0, i64 0), i32 %87)
%89 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 3
%90 = load i64, i64* %89
%91 = trunc i64 %90 to i32
%92 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.23, i64 0, i64 0), i32 %91)
%93 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 2
%94 = load i64, i64* %93
%95 = trunc i64 %94 to i32
%96 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.24, i64 0, i64 0), i32 %95)
%97 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 1
%98 = load i64, i64* %97
%99 = trunc i64 %98 to i32
%100 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.25, i64 0, i64 0), i32 %99)
%101 = getelementptr inbounds %struct.TYPE_3__, %struct.TYPE_3__* %0, i64 0, i32 0
%102 = load i64, i64* %101
%103 = trunc i64 %102 to i32
%104 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.26, i64 0, i64 0), i32 %103)
ret void
}