#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 *, ...);
void print_usage(const char *name) {
  printf("usage: %s [(-b|-m|-g|-p) <start>:<end>]... <output file>\n", name);
  printf("\n"
         "   -b | --bios       <start>:<end>   BIOS region\n"
         "   -m | --me         <start>:<end>   Intel ME region\n"
         "   -g | --gbe        <start>:<end>   Gigabit Ethernet region\n"
         "   -p | --platform   <start>:<end>   Platform Data region\n"
         "   -h | --help                       print this help\n\n"
         "<start> and <end> bounds are given in bytes, the <end> bound is "
         "inclusive.\n"
         "All regions must be multiples of 4K in size and 4K aligned.\n"
         "The descriptor region always resides in the first 4K.\n\n"
         "An IFD created with ifdfake won't work as a replacement for a real "
         "IFD.\n"
         "Never try to flash such an IFD to your board!\n\n");
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf05(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_usage>:
push   %rax
mov    %rdi,%rsi
lea    0xed5(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf01(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [58 x i8] c"usage: %s [(-b|-m|-g|-p) <start>:<end>]... <output file>\0A\00"
@.str.1 = [586 x i8] c"\0A -b | --bios <start>:<end> BIOS region\0A -m | --me <start>:<end> Intel ME region\0A -g | --gbe <start>:<end> Gigabit Ethernet region\0A -p | --platform <start>:<end> Platform Data region\0A -h | --help print this help\0A\0A<start> and <end> bounds are given in bytes, the <end> bound is inclusive.\0AAll regions must be multiples of 4K in size and 4K aligned.\0AThe descriptor region always resides in the first 4K.\0A\0AAn IFD created with ifdfake won't work as a replacement for a real IFD.\0ANever try to flash such an IFD to your board!\0A\0A\00"
define void @print_usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str, i64 0, i64 0), i8* %3)
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([586 x i8], [586 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [58 x i8] c"usage: %s [(-b|-m|-g|-p) <start>:<end>]... <output file>\0A\00"
@str = [585 x i8] c"\0A -b | --bios <start>:<end> BIOS region\0A -m | --me <start>:<end> Intel ME region\0A -g | --gbe <start>:<end> Gigabit Ethernet region\0A -p | --platform <start>:<end> Platform Data region\0A -h | --help print this help\0A\0A<start> and <end> bounds are given in bytes, the <end> bound is inclusive.\0AAll regions must be multiples of 4K in size and 4K aligned.\0AThe descriptor region always resides in the first 4K.\0A\0AAn IFD created with ifdfake won't work as a replacement for a real IFD.\0ANever try to flash such an IFD to your board!\0A\00"
define void @print_usage(i8* %0) {
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str, i64 0, i64 0), i8* %0)
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([585 x i8], [585 x i8]* @str, i64 0, i64 0))
ret void
}