#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 *);
int /*<<< orphan*/ stderr;
void usage(void) {
  fprintf(stderr, "Usage: ip link set DEVICE type can\n"
                  "\t[ bitrate BITRATE [ sample-point SAMPLE-POINT] ] | \n"
                  "\t[ tq TQ prop-seg PROP_SEG phase-seg1 PHASE-SEG1\n "
                  "\t  phase-seg2 PHASE-SEG2 [ sjw SJW ] ]\n"
                  "\n"
                  "\t[ loopback { on | off } ]\n"
                  "\t[ listen-only { on | off } ]\n"
                  "\t[ triple-sampling { on | off } ]\n"
                  "\t[ one-shot { on | off } ]\n"
                  "\t[ berr-reporting { on | off } ]\n"
                  "\n"
                  "\t[ restart-ms TIME-MS ]\n"
                  "\t[ restart ]\n"
                  "\n"
                  "\tWhere: BITRATE       := { 1..1000000 }\n"
                  "\t       SAMPLE-POINT  := { 0.000..0.999 }\n"
                  "\t       TQ            := { NUMBER }\n"
                  "\t       PROP-SEG      := { 1..8 }\n"
                  "\t       PHASE-SEG1    := { 1..8 }\n"
                  "\t       PHASE-SEG2    := { 1..8 }\n"
                  "\t       SJW           := { 1..4 }\n"
                  "\t       RESTART-MS    := { 0 | NUMBER }\n");
}


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

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

LLVM IR (-O0):
@stderr = global i32 0
@.str = [663 x i8] c"Usage: ip link set DEVICE type can\0A\09[ bitrate BITRATE [ sample-point SAMPLE-POINT] ] | \0A\09[ tq TQ prop-seg PROP_SEG phase-seg1 PHASE-SEG1\0A \09 phase-seg2 PHASE-SEG2 [ sjw SJW ] ]\0A\0A\09[ loopback { on | off } ]\0A\09[ listen-only { on | off } ]\0A\09[ triple-sampling { on | off } ]\0A\09[ one-shot { on | off } ]\0A\09[ berr-reporting { on | off } ]\0A\0A\09[ restart-ms TIME-MS ]\0A\09[ restart ]\0A\0A\09Where: BITRATE := { 1..1000000 }\0A\09 SAMPLE-POINT := { 0.000..0.999 }\0A\09 TQ := { NUMBER }\0A\09 PROP-SEG := { 1..8 }\0A\09 PHASE-SEG1 := { 1..8 }\0A\09 PHASE-SEG2 := { 1..8 }\0A\09 SJW := { 1..4 }\0A\09 RESTART-MS := { 0 | NUMBER }\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([663 x i8], [663 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [663 x i8] c"Usage: ip link set DEVICE type can\0A\09[ bitrate BITRATE [ sample-point SAMPLE-POINT] ] | \0A\09[ tq TQ prop-seg PROP_SEG phase-seg1 PHASE-SEG1\0A \09 phase-seg2 PHASE-SEG2 [ sjw SJW ] ]\0A\0A\09[ loopback { on | off } ]\0A\09[ listen-only { on | off } ]\0A\09[ triple-sampling { on | off } ]\0A\09[ one-shot { on | off } ]\0A\09[ berr-reporting { on | off } ]\0A\0A\09[ restart-ms TIME-MS ]\0A\09[ restart ]\0A\0A\09Where: BITRATE := { 1..1000000 }\0A\09 SAMPLE-POINT := { 0.000..0.999 }\0A\09 TQ := { NUMBER }\0A\09 PROP-SEG := { 1..8 }\0A\09 PHASE-SEG1 := { 1..8 }\0A\09 PHASE-SEG2 := { 1..8 }\0A\09 SJW := { 1..4 }\0A\09 RESTART-MS := { 0 | NUMBER }\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([663 x i8], [663 x i8]* @.str, i64 0, i64 0))
ret void
}