Merge "Disable inlining and loop unrolling in LTO without PGO profile" am: 06d1060041
am: db764c0315
Change-Id: Iab7ec6e91e5dd975b4312a162bc3c84810b38438
This commit is contained in:
commit
3dca508089
3 changed files with 28 additions and 2 deletions
12
cc/cc.go
12
cc/cc.go
|
@ -211,6 +211,7 @@ type ModuleContextIntf interface {
|
||||||
selectedStl() string
|
selectedStl() string
|
||||||
baseModuleName() string
|
baseModuleName() string
|
||||||
getVndkExtendsModuleName() string
|
getVndkExtendsModuleName() string
|
||||||
|
isPgoCompile() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type ModuleContext interface {
|
type ModuleContext interface {
|
||||||
|
@ -408,6 +409,13 @@ func (c *Module) isVndk() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Module) isPgoCompile() bool {
|
||||||
|
if pgo := c.pgo; pgo != nil {
|
||||||
|
return pgo.Properties.PgoCompile
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Module) isVndkSp() bool {
|
func (c *Module) isVndkSp() bool {
|
||||||
if vndkdep := c.vndkdep; vndkdep != nil {
|
if vndkdep := c.vndkdep; vndkdep != nil {
|
||||||
return vndkdep.isVndkSp()
|
return vndkdep.isVndkSp()
|
||||||
|
@ -507,6 +515,10 @@ func (ctx *moduleContextImpl) isVndk() bool {
|
||||||
return ctx.mod.isVndk()
|
return ctx.mod.isVndk()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *moduleContextImpl) isPgoCompile() bool {
|
||||||
|
return ctx.mod.isPgoCompile()
|
||||||
|
}
|
||||||
|
|
||||||
func (ctx *moduleContextImpl) isVndkSp() bool {
|
func (ctx *moduleContextImpl) isVndkSp() bool {
|
||||||
return ctx.mod.isVndkSp()
|
return ctx.mod.isVndkSp()
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,6 +87,13 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags {
|
||||||
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-emulated-tls")
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-emulated-tls")
|
||||||
}
|
}
|
||||||
flags.ArGoldPlugin = true
|
flags.ArGoldPlugin = true
|
||||||
|
|
||||||
|
// If the module does not have a profile, be conservative and do not inline
|
||||||
|
// or unroll loops during LTO, in order to prevent significant size bloat.
|
||||||
|
if !ctx.isPgoCompile() {
|
||||||
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-inline-threshold=0")
|
||||||
|
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-unroll-threshold=0")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
11
cc/pgo.go
11
cc/pgo.go
|
@ -45,7 +45,7 @@ func getPgoProfileProjects(config android.DeviceConfig) []string {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func recordMissingProfileFile(ctx ModuleContext, missing string) {
|
func recordMissingProfileFile(ctx BaseModuleContext, missing string) {
|
||||||
getNamedMapForConfig(ctx.Config(), modulesMissingProfileFile).Store(missing, true)
|
getNamedMapForConfig(ctx.Config(), modulesMissingProfileFile).Store(missing, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +63,7 @@ type PgoProperties struct {
|
||||||
|
|
||||||
PgoPresent bool `blueprint:"mutated"`
|
PgoPresent bool `blueprint:"mutated"`
|
||||||
ShouldProfileModule bool `blueprint:"mutated"`
|
ShouldProfileModule bool `blueprint:"mutated"`
|
||||||
|
PgoCompile bool `blueprint:"mutated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type pgo struct {
|
type pgo struct {
|
||||||
|
@ -98,7 +99,7 @@ func (props *PgoProperties) addProfileGatherFlags(ctx ModuleContext, flags Flags
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
func (props *PgoProperties) getPgoProfileFile(ctx ModuleContext) android.OptionalPath {
|
func (props *PgoProperties) getPgoProfileFile(ctx BaseModuleContext) android.OptionalPath {
|
||||||
// Test if the profile_file is present in any of the PGO profile projects
|
// Test if the profile_file is present in any of the PGO profile projects
|
||||||
for _, profileProject := range getPgoProfileProjects(ctx.DeviceConfig()) {
|
for _, profileProject := range getPgoProfileProjects(ctx.DeviceConfig()) {
|
||||||
path := android.ExistentPathForSource(ctx, "", profileProject, *props.Pgo.Profile_file)
|
path := android.ExistentPathForSource(ctx, "", profileProject, *props.Pgo.Profile_file)
|
||||||
|
@ -232,6 +233,12 @@ func (pgo *pgo) begin(ctx BaseModuleContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !ctx.Config().IsEnvTrue("ANDROID_PGO_NO_PROFILE_USE") {
|
||||||
|
if profileFile := pgo.Properties.getPgoProfileFile(ctx); profileFile.Valid() {
|
||||||
|
pgo.Properties.PgoCompile = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pgo *pgo) deps(ctx BaseModuleContext, deps Deps) Deps {
|
func (pgo *pgo) deps(ctx BaseModuleContext, deps Deps) Deps {
|
||||||
|
|
Loading…
Reference in a new issue