#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*/ fprintf(int /*<<< orphan*/, char *, char *);
int /*<<< orphan*/ stderr;
void describe_function(void) {
  fprintf(stderr,
          "\n%s translates a (suitable) ANSI C source to a form acceptable to "
          "a pcc-\ncompatible C compiler. Top-level function declarations get "
          "their arguments\nenclosed in /* and */ (original /* and */ tokens "
          "are removed); function\ndefinition prototypes are re-written the "
          "pcc way (e.g. void foo(int x) {...}\n-> void foo(x) int x; {...}); "
          "ANSI keywords const, signed, and volatile are\nelided (with a "
          "warning); enums are warned of (stricter usage under pcc);\ntype "
          "void * is converted to VoidStar, which should be typedef'd to char "
          "* to\nbe compatible with pcc; ANSI unsigned [long] int constants "
          "are re-written\nas (unsigned [long])<int>[L] (e.g. 300ul -> "
          "(unsigned long)300L)\n\nOther differences must be addressed in the "
          "source before or after translation.\n",
          "topcc");
}


x86 assembly (clang, -O0):
<describe_function>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
lea    0x11bc(%rip),%rdx
call   1030 <fprintf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<describe_function>:
mov    0x2ec9(%rip),%rax
mov    (%rax),%edi
lea    0xee0(%rip),%rsi
lea    0x11c0(%rip),%rdx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [743 x i8] c"\0A%s translates a (suitable) ANSI C source to a form acceptable to a pcc-\0Acompatible C compiler. Top-level function declarations get their arguments\0Aenclosed in /* and */ (original /* and */ tokens are removed); function\0Adefinition prototypes are re-written the pcc way (e.g. void foo(int x) {...}\0A-> void foo(x) int x; {...}); ANSI keywords const, signed, and volatile are\0Aelided (with a warning); enums are warned of (stricter usage under pcc);\0Atype void * is converted to VoidStar, which should be typedef'd to char * to\0Abe compatible with pcc; ANSI unsigned [long] int constants are re-written\0Aas (unsigned [long])<int>[L] (e.g. 300ul -> (unsigned long)300L)\0A\0AOther differences must be addressed in the source before or after translation.\0A\00"
@.str.1 = [6 x i8] c"topcc\00"
define void @describe_function() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([743 x i8], [743 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [743 x i8] c"\0A%s translates a (suitable) ANSI C source to a form acceptable to a pcc-\0Acompatible C compiler. Top-level function declarations get their arguments\0Aenclosed in /* and */ (original /* and */ tokens are removed); function\0Adefinition prototypes are re-written the pcc way (e.g. void foo(int x) {...}\0A-> void foo(x) int x; {...}); ANSI keywords const, signed, and volatile are\0Aelided (with a warning); enums are warned of (stricter usage under pcc);\0Atype void * is converted to VoidStar, which should be typedef'd to char * to\0Abe compatible with pcc; ANSI unsigned [long] int constants are re-written\0Aas (unsigned [long])<int>[L] (e.g. 300ul -> (unsigned long)300L)\0A\0AOther differences must be addressed in the source before or after translation.\0A\00"
@.str.1 = [6 x i8] c"topcc\00"
define void @describe_function() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([743 x i8], [743 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0))
ret void
}