diff options
Diffstat (limited to 'cc/lto.go')
| -rw-r--r-- | cc/lto.go | 35 |
1 files changed, 18 insertions, 17 deletions
@@ -76,43 +76,44 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags { return flags } if lto.Properties.LtoEnabled { - var ltoCFlag string - var ltoLdFlag string - if lto.ThinLTO() { - ltoCFlag = "-flto=thin -fsplit-lto-unit" - } else { - ltoCFlag = "-flto=thin -fsplit-lto-unit" - ltoLdFlag = "-Wl,--lto-O0" + ltoCFlags := []string{"-flto=thin", "-fsplit-lto-unit"} + var ltoLdFlags []string + + // The module did not explicitly turn on LTO. Only leverage LTO's + // better dead code elinmination and CFG simplification, but do + // not perform costly optimizations for a balance between compile + // time, binary size and performance. + if !lto.ThinLTO() { + ltoLdFlags = append(ltoLdFlags, "-Wl,--lto-O0") } - flags.Local.CFlags = append(flags.Local.CFlags, ltoCFlag) - flags.Local.AsFlags = append(flags.Local.AsFlags, ltoCFlag) - flags.Local.LdFlags = append(flags.Local.LdFlags, ltoCFlag) - flags.Local.LdFlags = append(flags.Local.LdFlags, ltoLdFlag) - if Bool(lto.Properties.Whole_program_vtables) { - flags.Local.CFlags = append(flags.Local.CFlags, "-fwhole-program-vtables") + ltoCFlags = append(ltoCFlags, "-fwhole-program-vtables") } if ctx.Config().IsEnvTrue("USE_THINLTO_CACHE") { // Set appropriate ThinLTO cache policy cacheDirFormat := "-Wl,--thinlto-cache-dir=" cacheDir := android.PathForOutput(ctx, "thinlto-cache").String() - flags.Local.LdFlags = append(flags.Local.LdFlags, cacheDirFormat+cacheDir) + ltoLdFlags = append(ltoLdFlags, cacheDirFormat+cacheDir) // Limit the size of the ThinLTO cache to the lesser of 10% of available // disk space and 10GB. cachePolicyFormat := "-Wl,--thinlto-cache-policy=" policy := "cache_size=10%:cache_size_bytes=10g" - flags.Local.LdFlags = append(flags.Local.LdFlags, cachePolicyFormat+policy) + ltoLdFlags = append(ltoLdFlags, cachePolicyFormat+policy) } // If the module does not have a profile, be conservative and limit cross TU inline // limit to 5 LLVM IR instructions, to balance binary size increase and performance. if !ctx.Darwin() && !ctx.isPgoCompile() && !ctx.isAfdoCompile() { - flags.Local.LdFlags = append(flags.Local.LdFlags, - "-Wl,-plugin-opt,-import-instr-limit=5") + ltoLdFlags = append(ltoLdFlags, "-Wl,-plugin-opt,-import-instr-limit=5") } + + flags.Local.CFlags = append(flags.Local.CFlags, ltoCFlags...) + flags.Local.AsFlags = append(flags.Local.AsFlags, ltoCFlags...) + flags.Local.LdFlags = append(flags.Local.LdFlags, ltoCFlags...) + flags.Local.LdFlags = append(flags.Local.LdFlags, ltoLdFlags...) } return flags } |