mirror of
https://github.com/LLVMParty/llvm-nanobind
synced 2026-06-21 13:43:38 +00:00
7.2 KiB
7.2 KiB
Exercise Catalog (Workshop Draft)
This catalog is ordered by teaching priority. Each exercise is intended to run in an interactive portal with fixed input IR and deterministic checks.
Track 1: Foundations
F01Parse and Print- Focus:
Context.parse_ir, module printing - Pitfall: parse errors and diagnostic handling
- Validation: output IR round-trip +
verify
- Focus:
F02Add a Function Signature- Focus:
TypeFactory.function,Module.add_function - Pitfall: varargs and return type mismatch
- Validation: function signature check
- Focus:
F03Create Entry Block and Return- Focus:
append_basic_block,Builder.ret - Pitfall: missing terminator
- Validation: block terminator property
- Focus:
F04Integer Constants and Types- Focus: integer types, constants
- Pitfall: width mismatch (
i32vsi64) - Validation: constant type + operand type checks
F05Verify Broken IR- Focus:
verify,get_verification_error - Pitfall: assuming parse success implies valid IR
- Validation: expected verifier failure message category
- Focus:
F06Context Lifetime Guard- Focus: context manager semantics
- Pitfall: use-after-context-destroyed
- Validation: raises
LLVMMemoryError
F07Module Manager Misuse- Focus: enter/exit/dispose behavior
- Pitfall: double enter/double dispose
- Validation: expected exception class
F08Global Variable Basics- Focus:
add_global, initializer, linkage - Pitfall: invalid initializer type
- Validation: global properties + verifier
- Focus:
Track 2: Builder Fundamentals
B01Arithmetic Chain- Focus:
add,sub,mul - Pitfall: signed/unsigned assumptions
- Validation: exact instruction opcode sequence
- Focus:
B02Memory Roundtrip- Focus:
alloca,store,load - Pitfall: loading wrong pointee type
- Validation: verifier + type checks
- Focus:
B03Pointer Arithmetic with GEP- Focus:
gep2,struct_gep - Pitfall: wrong index types/order
- Validation: resulting pointer element type
- Focus:
B04Integer Cast Decision- Focus:
trunc,zext,sext,get_cast_opcode - Pitfall: sign extension mistakes
- Validation: expected cast opcode
- Focus:
B05Compare and Select- Focus:
icmp,select - Pitfall: predicate/type mismatch
- Validation: predicate + result type
- Focus:
B06Floating Compare- Focus:
fcmp, fast-math awareness - Pitfall: ordered vs unordered comparisons
- Validation: expected predicate
- Focus:
B07Call Builder Basics- Focus:
call, callee type rules - Pitfall: argument count/type mismatch
- Validation: verifier + call signature properties
- Focus:
B08Insertion Point Recovery- Focus:
position_at_end,clear_insertion_position - Pitfall: emitting with no insertion point
- Validation: expected exception on bad path
- Focus:
Track 3: Control Flow and SSA
S01If/Else Diamond- Focus:
cond_br, merge block - Pitfall: missing merge terminator
- Validation: CFG shape check
- Focus:
S02PHI in Diamond- Focus:
phi,add_incoming - Pitfall: missing predecessor edge
- Validation: incoming count equals predecessor count
- Focus:
S03Counting Loop- Focus: loop header/latch
- Pitfall: wrong backedge condition
- Validation: expected loop trip semantics on constants
S04Loop-Carried PHI- Focus: multi-incoming PHI correctness
- Pitfall: incoming block/value mismatch
- Validation: verifier + phi incoming pair checks
S05Switch Construction- Focus:
switch, default + cases - Pitfall: duplicate case values
- Validation: case table properties
- Focus:
S06Split Basic Block Safely- Focus:
split_basic_block,split_basic_block_before - Pitfall: splitting at invalid instruction (PHI/wrong block)
- Validation: expected exception class
- Focus:
S07Predecessor Introspection- Focus:
predecessors,successors - Pitfall: assuming ordering guarantees
- Validation: set comparison (order-independent)
- Focus:
S08Exception Edges Intro- Focus:
invoke, unwind destination basics - Pitfall: invalid unwind targets
- Validation: verifier + unwind edge checks
- Focus:
Track 4: Module, Attributes, Metadata
M01Function Attributes- Focus: enum/string attributes
- Pitfall: wrong attribute index (
-1, return, param) - Validation: attribute presence query
M02Callsite Attributes- Focus: call/invoke attribute APIs
- Pitfall: non-call instruction misuse
- Validation: expected assertion path
M03Linkage and Visibility- Focus: linkage, visibility, DLL storage class
- Pitfall: incompatible combinations
- Validation: printed IR property checks
M04Named Metadata- Focus: module named metadata nodes
- Pitfall: wrong operand kind conversion
- Validation: metadata node count
M05Instruction Metadata- Focus: set/get metadata on instructions
- Pitfall: MD kind ID confusion across contexts
- Validation: metadata round-trip check
M06Clone and Link Modules- Focus:
clone,link_module - Pitfall: symbol conflicts and ownership assumptions
- Validation: linked symbol table checks
- Focus:
Track 5: Optimization and Target
P01Runinstcombine- Focus:
run_passes - Pitfall: expecting optimization without passes
- Validation: before/after IR delta
- Focus:
P02Custom PassBuilderOptions- Focus: option toggles
- Pitfall: assuming all options affect all pipelines
- Validation: pipeline runs and IR remains valid
P03Target Triple and Data Layout- Focus: target discovery and assignment
- Pitfall: mismatched triple/data layout
- Validation: module fields + verifier
P04Emit Object to Memory Buffer- Focus: target machine codegen
- Pitfall: missing target initialization
- Validation: non-empty object bytes
P05Parse Object and List Symbols- Focus: binary iterators
- Pitfall: iterator lifetime/order misuse
- Validation: stable symbol list properties
P06Disassemble Bytes- Focus: disassembly context
- Pitfall: wrong triple/cpu/features
- Validation: expected mnemonic subset
Track 6: Debug Info (Optional Advanced)
D01Minimal Compile Unit- Focus:
DIBuilder.create_compile_unit - Pitfall: forgetting
finalize - Validation: debug metadata present
- Focus:
D02Function Debug Info- Focus: subprogram metadata +
set_subprogram - Pitfall: dangling debug references
- Validation: function has
!dbg
- Focus: subprogram metadata +
D03Source Location Records- Focus: debug location helpers
- Pitfall: invalid scope/inlined-at chain
- Validation: line/column/scope accessors
D04Debug Metadata Inspection- Focus: helper getters (
get_di_node_tag, etc.) - Pitfall: wrong metadata kind usage
- Validation: tag/name/line checks
- Focus: helper getters (
Capstones
C01Dead Branch Simplifier- Task: fold constant branch conditions and clean CFG
- Validation: CFG property checks + verifier
C02Instrument Function Entries- Task: inject profiling call at first non-PHI
- Validation: instruction placement correctness
C03Add Bounds Checks- Task: guard memory accesses with conditional trap
- Validation: expected control-flow skeleton
C04IR Linter Challenge- Task: detect and report high-risk constructs
- Validation: expected diagnostics list