mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
transform: use thinlto-pre-link passes
This improves compilation performance by about 5% in my quick test, while increasing binary size on average by 0.13% when comparing the smoke tests in the drivers repo (and about two thirds of that 0.13% is actually caused by a single smoke test). I think this is a good idea because it aligns the TinyGo optimization sequence with what ThinLTO expects.
This commit is contained in:
@@ -142,11 +142,13 @@ func Optimize(mod llvm.Module, config *compileopts.Config) []error {
|
||||
fn.SetLinkage(llvm.InternalLinkage)
|
||||
}
|
||||
|
||||
// Run the default pass pipeline.
|
||||
// TODO: set the PrepareForThinLTO flag somehow.
|
||||
// Run the ThinLTO pre-link passes, meant to be run on each individual
|
||||
// module. This saves compilation time compared to "default<#>" and is meant
|
||||
// to better match the optimization passes that are happening during
|
||||
// ThinLTO.
|
||||
po := llvm.NewPassBuilderOptions()
|
||||
defer po.Dispose()
|
||||
passes := fmt.Sprintf("default<%s>", optLevel)
|
||||
passes := fmt.Sprintf("thinlto-pre-link<%s>", optLevel)
|
||||
err := mod.RunPasses(passes, llvm.TargetMachine{}, po)
|
||||
if err != nil {
|
||||
return []error{fmt.Errorf("could not build pass pipeline: %w", err)}
|
||||
|
||||
Reference in New Issue
Block a user