• David Chase's avatar
    cmd/compile: add framework for logging optimizer (non)actions to LSP · cd53fdda
    David Chase authored
    This is intended to allow IDEs to note where the optimizer
    was not able to improve users' code.  There may be other
    applications for this, for example in studying effectiveness
    of optimizer changes more quickly than running benchmarks,
    or in verifying that code changes did not accidentally disable
    optimizations in performance-critical code.
    
    Logging of nilcheck (bad) for amd64 is implemented as
    proof-of-concept.  In general, the intent is that optimizations
    that didn't happen are what will be logged, because that is
    believed to be what IDE users want.
    
    Added flag -json=version,dest
    
    Check that version=0.  (Future compilers will support a
    few recent versions, I hope that version is always <=3.)
    
    Dest is expected to be one of:
    
    /path (or \path in Windows)
      will create directory /path and fill it w/ json files
    file://path
      will create directory path, intended either for
         I:\dont\know\enough\about\windows\paths
         trustme_I_know_what_I_am_doing_probably_testing
    
    Not passing an absolute path name usually leads to
    json splattered all over source directories,
    or failure when those directories are not writeable.
    If you want a foot-gun, you have to ask for it.
    
    The JSON output is directed to subdirectories of dest,
    where each subdirectory is net/url.PathEscape of the
    package name, and each for each foo.go in the package,
    net/url.PathEscape(foo).json is created.  The first line
    of foo.json contains version and context information,
    and subsequent lines contains LSP-conforming JSON
    describing the missing optimizations.
    
    Change-Id: Ib83176a53a8c177ee9081aefc5ae05604ccad8a0
    Reviewed-on: https://go-review.googlesource.com/c/go/+/204338
    Run-TryBot: David Chase <drchase@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    cd53fdda
escape.go 274 Bytes