Skip to content

Preprocessing Passes

Ziyang Xu edited this page May 31, 2021 · 1 revision
  • Devirtualization

    • Statically devirtualize virtual functions
    • Driver: tests/scripts/devirtualize
    • Main passes: -devirtualize
    • Main file: lib/Devirt/Devirtualize.cpp
  • Internalization

    • Functionality: internalize global symbols
    • Driver: None
    • Main passes: -internalize -internalize-public-api-list=main -ipconstprop -ipsccp -deadargelim
    • Main file: None
  • (Optional) Aggressive Inlining

    • Functionality: Aggressively inline functions in the hot functions
    • Driver: None
    • Main passes: -lamp-inst-cnt -lamp-map-loop -lamp-load-profile -always-inline -aggr-inliner
    • Main file: lib/AggrInliner/Inliner.cpp
  • Instruction naming

    • Functionality: Name each instruction with a unique ID in Metadata
    • Driver: None
    • Main passes: -metadata-namer
    • Main file: ./lib/Metadata/Namer.cpp
  • Other transformations before parallelizations:

    • Functionality: LLVM passes that make loops more canonical or easier to parallelize
    • Passes: -mem2reg -simplifycfg -simplifycfg-sink-common=false -instcombine -tailcallelim -loop-simplify -lcssa -licm -loop-unswitch -globalopt -instcombine -ipsccp -gvn -dse -adce -loop-simplify -lcssa -indvars -loop-deletion -instcombine -indvars

Clone this wiki locally