package optimizer // Optimize applies all enabled peephole passes to the generated ASM lines. // Each pass runs sequentially on a parsed representation of the lines. // @@OPT markers are stripped from output. func Optimize(lines []string, cfg *Config) []string { if cfg == nil || !cfg.Any() { return lines } parsed := parseLines(lines) original := parsed if cfg.EnableStoreLoad { parsed = passStoreReload(parsed, cfg) } if cfg.EnableLoad { parsed = passLoadElimination(parsed, cfg) } if cfg.EnableImm { parsed = passImmElimination(parsed) } if cfg.EnableJmp { parsed = passJmpNext(parsed) } if cfg.EnableSelf { parsed = passSelfAssignment(parsed) } parsed = stripOptMarkers(parsed) if cfg.Debug { original = stripOptMarkers(original) parsed = debugDiff(original, parsed) } return linesToString(parsed) }