LLI(1)
π LLI β the lli(1) page, but make it make sense π
okay bestie, gather round, because today we're talking about lli, and she's from the LLVM family, and she is iconic. this is section 1 of the manual, and yes, she ate. π
β¨ NAME β¨
lli β directly execute programs from LLVM bitcode. that's it, that's the whole job description. no notes. π
πΈ SYNOPSIS πΈ
lli [options] [filename] [program args]
look at her. so simple. so powerful. π¦
π§ DESCRIPTION π§
so lli directly executes programs in LLVM bitcode format. like, you hand her a program written in LLVM bitcode and she runs it β either through a just-in-time compiler or through an interpreter. two paths, one slay. β¨
and listen, because this part matters: lli is not an emulator. she will not execute IR of different architectures, and she can only interpret (or JIT-compile) for the host architecture. no cap. if you were hoping she'd cosplay as some other CPU, she will not, and honestly? respect the boundaries. π
the JIT compiler takes the same arguments as other tools, like llc, but heads up β they don't necessarily work for the interpreter. iykyk. π
if filename is not specified, then lli reads the LLVM bitcode for the program from standard input. so you can just pipe it in. main character energy. π«Ά
and the optional args you put on the command line? those get passed to the program as arguments. giving "here's your snacks, go be great." π
β¨ GENERAL OPTIONS β¨
the everyday fits. the basics. the essentials. π
-fake-argv0=executableβ override theargv[0]value that gets passed into the executing program. yes, she can lie about her name, and it's fine, it's for science. π-force-interpreter={false,true}β if you set this totrue, she'll use the interpreter even if a just-in-time compiler is available for this architecture. it defaults tofalse. so by default she's JIT-ing like normal. π-helpβ prints a summary of command line options. when in doubt, ask for help, we love a girl who asks for help. π«Ά-load=pluginfilenameβ causesllito load the plugin (shared object) namedpluginfilenameand use it for optimization. plug her in. πβ¨-statsβ print statistics from the code-generation passes. at present, this is only meaningful for the just-in-time compiler. noted. π-time-passesβ record the amount of time needed for each code-generation pass and print it to standard error. clocking the tea. β±οΈ-versionβ print out the version oflliand exit without doing anything else. she said "here's my ID, bye." π
π― TARGET OPTIONS π―
picking who she's performing for. choose wisely, bestie, this is highkey important. π
-mtriple=target tripleβ override the target triple specified in the input bitcode file with the specified string. β οΈ this may result in a crash if you pick an architecture which is not compatible with the current system. so like, don't. or do, and then don't be surprised. π-march=archβ specify the architecture for which to generate assembly, overriding the target encoded in the bitcode file. see the output ofllc -helpfor a list of valid architectures. by default this is inferred from the target triple or autodetected to the current architecture. π§-mcpu=cpunameβ specify a specific chip in the current architecture to generate code for. by default this is inferred from the target triple and autodetected to the current architecture. for a list of available CPUs, use:
llvm-as < /dev/null | llc -march=xyz -mcpu=help
π
-mattr=a1,+a2,-a3,...β override or control specific attributes of the target, like whether SIMD operations are enabled or not. the default set of attributes is set by the current CPU. for a list of available attributes, use:
llvm-as < /dev/null | llc -march=xyz -mattr=help
β
π FLOATING POINT OPTIONS π
the floaty girlies. math but make it β¨choicesβ¨. be careful, some of these are giving "chaos". πΈ
-disable-excess-fp-precisionβ disable optimizations that may increase floating point precision. π-enable-no-infs-fp-mathβ enable optimizations that assume no Inf values. π«βΎοΈ-enable-no-nans-fp-mathβ enable optimizations that assume no NAN values. π«π»-enable-unsafe-fp-mathβ causesllito enable optimizations that may decrease floating point precision. β οΈ unsafe is right there in the name, bestie. π-soft-floatβ causesllito generate software floating point library calls instead of equivalent hardware instructions. doing it by hand, no hardware, no problem. π§
π₯ CODE GENERATION OPTIONS π₯
the machinery. the engine room. she's literally built different. βοΈβ¨
-code-model=modelβ choose the code model from:default: Target default code modeltiny: Tiny code modelsmall: Small code modelkernel: Kernel code modelmedium: Medium code modellarge: Large code model
pick your size, goldilocks. π»
-disable-post-RA-schedulerβ disable scheduling after register allocation. π«π-disable-spill-fusingβ disable fusing of spill code into instructions. π«-jit-enable-ehβ exception handling should be enabled in the just-in-time compiler. π¨-join-liveintervalsβ coalesce copies (default=true). she's a joiner. π«Ά-nozero-initialized-in-bssβ don't place zero-initialized symbols into the BSS section. π«0οΈβ£-pre-RA-sched=schedulerβ instruction schedulers available (before register allocation):=default: Best scheduler for the target=none: No scheduling: breadth first sequencing=simple: Simple two pass scheduling: minimize critical path and maximize processor utilization=simple-noitin: Simple two pass scheduling: Same as simple except using generic latency=list-burr: Bottom-up register reduction list scheduling=list-tdrr: Top-down register reduction list scheduling=list-td: Top-down list scheduler -print-machineinstrs - Print generated machine code
so many options, so little time. π
-regalloc=allocatorβ register allocator to use (default=linearscan)=bigblock: Big-block register allocator=linearscan: linear scan register allocator =local - local register allocator=simple: simple register allocator
π
-relocation-model=modelβ choose relocation model from:=default: Target default relocation model=static: Non-relocatable code =pic - Fully relocatable, position independent code=dynamic-no-pic: Relocatable external references, non-relocatable code
π¦
-spillerβ spiller to use (default=local)=simple: simple spiller=local: local spiller
π
-x86-asm-syntax=syntaxβ choose style of code to emit from X86 backend:=att: Emit AT&T-style assembly=intel: Emit Intel-style assembly
team AT&T vs team Intel, the eternal war. βοΈ
πͺ EXIT STATUS πͺ
if lli fails to load the program, she will exit with an exit code of 1. otherwise, she will return the exit code of the program she executes. so like, she's not taking credit for someone else's W or their L. periodt. π―
π SEE ALSO π
llc(1)β go read her too, she's also iconic. π«Ά
π AUTHOR π
maintained by the LLVM Team (<https://llvm.org/>). they're doing the lord's work fr fr. π
π COPYRIGHT π
2003-2024, LLVM Project π
and that's the whole page, bestie!! this was lli, section 1 of the manual, from the LLVM source, dated 2024-07-18, and the page number is 11. mwah. π now go execute something. slay β¨ππ
π¦ where this page comes from
- fedora 43: llvm11 11.1.0-14.fc41 Β· NCSA
- fedora 43: llvm11 11.1.0-14.fc41 Β· NCSA
- fedora 44: llvm11 11.1.0-14.fc41 Β· NCSA
- fedora 44: llvm11 11.1.0-14.fc41 Β· NCSA
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms