#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) K&R-style or PCC-style C source program to "
      "a\nform acceptable to an ANSI-C compiler. Top-level function "
      "declarations with\ncomments imbedded within their '()'s have the '/*'s "
      "and '*/'s removed on the\nassumption that they contain ANSI-style "
      "formal argument lists. Function\ndefinition prototypes are re-written "
      "the ANSI way (e.g. void foo(x) int x;\n{...} is re-written as void "
      "foo(int x) {...}).\n\nOther differences between the dialects must be "
      "addressed in the source\nbefore or after translation.\n\n",
      "toansi");
}


x86 assembly (clang, -O0):
<describe_function>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
lea    0x10e0(%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    0x10e4(%rip),%rdx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [523 x i8] c"\0A%s translates a (suitable) K&R-style or PCC-style C source program to a\0Aform acceptable to an ANSI-C compiler. Top-level function declarations with\0Acomments imbedded within their '()'s have the '/*'s and '*/'s removed on the\0Aassumption that they contain ANSI-style formal argument lists. Function\0Adefinition prototypes are re-written the ANSI way (e.g. void foo(x) int x;\0A{...} is re-written as void foo(int x) {...}).\0A\0AOther differences between the dialects must be addressed in the source\0Abefore or after translation.\0A\0A\00"
@.str.1 = [7 x i8] c"toansi\00"
define void @describe_function() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([523 x i8], [523 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [523 x i8] c"\0A%s translates a (suitable) K&R-style or PCC-style C source program to a\0Aform acceptable to an ANSI-C compiler. Top-level function declarations with\0Acomments imbedded within their '()'s have the '/*'s and '*/'s removed on the\0Aassumption that they contain ANSI-style formal argument lists. Function\0Adefinition prototypes are re-written the ANSI way (e.g. void foo(x) int x;\0A{...} is re-written as void foo(int x) {...}).\0A\0AOther differences between the dialects must be addressed in the source\0Abefore or after translation.\0A\0A\00"
@.str.1 = [7 x i8] c"toansi\00"
define void @describe_function() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([523 x i8], [523 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
ret void
}