1. 02 Apr, 2019 5 commits
    • Alessandro Arzilli's avatar
      compile,link: export package name in debug_info · e29f74ef
      Alessandro Arzilli authored
      Add a new custom attribute to compile units containing the package name
      of the package (i.e. the name after the 'package' keyword), so that
      debuggers can know it when it's different from the last segment
      of the package path.
      
      Change-Id: Ieadaab6f47091aabf2f4dc42c8524452eaa6715b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/163677
      Run-TryBot: Alessandro Arzilli <alessandro.arzilli@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarHeschi Kreinick <heschi@google.com>
      e29f74ef
    • Matthew Dempsky's avatar
      cmd/compile: skip escape analysis diagnostics for OADDR · abefcac1
      Matthew Dempsky authored
      For most nodes (e.g., OPTRLIT, OMAKESLICE, OCONVIFACE), escape
      analysis prints "escapes to heap" or "does not escape" to indicate
      whether that node's allocation can be heap or stack allocated.
      
      These messages are also emitted for OADDR, even though OADDR does not
      actually allocate anything itself. Moreover, it's redundant because
      escape analysis already prints "moved to heap" diagnostics when an
      OADDR node like "&x" causes x to require heap allocation.
      
      Because OADDR nodes don't allocate memory, my escape analysis rewrite
      doesn't naturally emit the "escapes to heap" / "does not escape"
      diagnostics for them. It's also non-trivial to replicate the exact
      semantics esc.go uses for OADDR.
      
      Since there are so many of these messages, I'm disabling them in this
      CL by themselves. I modified esc.go to suppress the Warnl calls
      without any other behavior changes, and then used a shell script to
      automatically remove any ERROR messages mentioned by run.go in
      "missing error" or "no match for" lines.
      
      Fixes #16300.
      Updates #23109.
      
      Change-Id: I3993e2743c3ff83ccd0893f4e73b366ff8871a57
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170319
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      abefcac1
    • Mark Ryan's avatar
      cmd/asm: Fix EVEX RIP-relative addressing · 4ebc6514
      Mark Ryan authored
      AVX-512 instructions that use RIP-relative addressing and require the
      R bit of the EVEX prefix to be zero, i.e., instructions that use Z8-Z15 or
      Z24-Z31, are incorrectly encoded by the assembler.  The reason is that
      the location of the offset at which the relative address is to be written
      is incorrectly computed when the R bit is clear.
      
      For example,
      
      VMOVUPS bInitX<>+0(SB), Z0
      
      encodes correctly to
      
      62 f1 7c 48 10 05 66 e9 02 00
      
      whereas
      
      VMOVUPS bInitX<>+0(SB), Z8
      
      encodes incorrectly to
      
      62 71 7c 48 10 05 00 56 e9 02 00
      
      Note the extra zero byte between the ModR/M byte (05) and the relative
      address starting with 56.  This error results in the first byte of the
      following instruction being overwritten and typically, a program crash.
      
      This commit fixes the issue in the same way that is fixed for VEX encoded
      instructions, by simply not incrementing the offset for EVEX instructions.
      Existing test code created for a similar VEX encoding issue (19518) has
      been modified to also test for the issue addressed by this commit.
      
      Fixes #31001
      
      Change-Id: If84719ac22ebb5fb3c42ff96cd32b611ad497414
      Reviewed-on: https://go-review.googlesource.com/c/go/+/168562
      Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIlya Tocar <ilya.tocar@intel.com>
      4ebc6514
    • Clément Chigot's avatar
      runtime, cmd/dist, misc/cgo: enable c-archive for aix/ppc64 · 3aacfce6
      Clément Chigot authored
      Change-Id: Ib9a40d5596f5735a00483e2d2db965402f05671b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169120
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      3aacfce6
    • Tobias Klauser's avatar
      internal/bytealg: fix function reference in comments · 56517216
      Tobias Klauser authored
      There's no IndexShortStr func, refer to Index instead.
      
      Change-Id: I6923e7ad3e910e4b5fb0c07d6339ddfec4111f4f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170124
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      56517216
  2. 01 Apr, 2019 5 commits
    • Brad Fitzpatrick's avatar
      runtime: skip broken TestLldbPython · 46c3e217
      Brad Fitzpatrick authored
      It's broken on our builders (once we enabled dev mode on our Macs,
      see CL 170339)
      
      Updates #31188
      
      Change-Id: Iceea65dc79576057b401a461bfe39254fed1f7ed
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170281Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      46c3e217
    • Michael Munday's avatar
      cmd/compile/internal/gc: minor cleanup of slicing · 726a9398
      Michael Munday authored
      Tidy the code up a little bit to move variable definitions closer
      to uses, prefer early return to else branches and some other minor
      tweaks.
      
      I'd like to make some more changes to this code in the near future
      and this CL should make those changes cleaner.
      
      Change-Id: Ie7d7f2e4bb1e670347941e255c9cdc1703282db5
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170120
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      726a9398
    • LE Manh Cuong's avatar
      cmd/compile: use FmtLeft to generate symbol name for unexported interface methods · 5fc55b31
      LE Manh Cuong authored
      The bug in 29612 is that there are two similar-looking anonymous interface
      types in two different packages, ./p1/ssa and ./p2/ssa:
      
      v.(interface{ foo() }).foo()
      
      These types should be treated differently because the unexported method
      makes the types different (according to the spec).
      
      But when generating the type descriptors for those two types, they
      both have the name "interface { ssa.foo() }". They thus get the same
      symbol, and the linker happily unifies them. It picks an arbitrary one
      for the runtime to use, but that breaks conversions from concrete types
      that have a foo method from the package which had its interface type
      overwritten.
      
      We need to encode the metadata symbol for unexported methods as package
      path qualified (The same as we did in CL 27791 for struct fields).
      
      So switching from FmtUnsigned to Fmtleft by default fixes the issue.
      In case of generating namedata, FmtUnsigned is used.
      
      The benchmark result ends up in no significant change of compiled binary
      compare to the immediate parent.
      
      Fixes #29612
      
      Change-Id: I775aff91ae4a1bb16eb18a48d55e3b606f3f3352
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170157Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      5fc55b31
    • Bryan C. Mills's avatar
      cmd/go/internal/modget: support the suffix '@patch' in 'go get' · a7fc7109
      Bryan C. Mills authored
      As of this change, an explicit '@patch' suffix is to '-u=patch' as
      '@latest' is to '-u'.
      
      RELNOTE='go get' in module mode now supports the version suffix '@patch'.
      
      Fixes #26812
      
      Change-Id: Ib5eee40de640440f7470d37a574b311ef8a67f67
      Reviewed-on: https://go-review.googlesource.com/c/go/+/167747
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
      a7fc7109
    • Jay Conrod's avatar
      cmd/go: refactor load.LoadPackage into other functions · d6b2b35e
      Jay Conrod authored
      LoadPackage was used to load a *load.Package for a command line
      argument, after pattern expansion. It provided two special cases on
      top of LoadImport. First, it ensured that "cmd/" packages in GOROOT
      were installed in "$GOROOT/bin" or "$GOROOT/pkg/tool". Second, it
      translated absolute paths to packages in GOROOT and GOPATH into
      regular import paths.
      
      With this change, LoadImport now ensures "cmd/" packages have the
      right Target (without the need for a special case) and
      search.ImportPaths translates absolute paths.
      
      LoadPackage no longer handles these special cases and has been renamed
      to LoadImportWithFlags, since it's still useful for loading implicit
      dependencies.
      
      Updates #29758
      
      Change-Id: I9d54036f90c3ccd9b3a0fe0eaddaa7749593cc91
      Reviewed-on: https://go-review.googlesource.com/c/go/+/167748
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      d6b2b35e
  3. 31 Mar, 2019 4 commits
    • Segev Finer's avatar
      cmd/doc: correctly indent pre-formatted blocks · 4091cf97
      Segev Finer authored
      They were previously indented at the same level as the normal text when
      printing a single symbol or the description of a field.
      
      Running "go doc text/template Must":
      Before:
          func Must(t *Template, err error) *Template
              Must is a helper that wraps a call to a function returning (*Template,
              error) and panics if the error is non-nil. It is intended for use in
              variable initializations such as
      
              var t = template.Must(template.New("name").Parse("text"))
      
      After:
          func Must(t *Template, err error) *Template
              Must is a helper that wraps a call to a function returning (*Template,
              error) and panics if the error is non-nil. It is intended for use in
              variable initializations such as
      
                  var t = template.Must(template.New("name").Parse("text"))
      
      Running "go doc http Request.Header":
      Before:
          type Request struct {
              // Header contains the request header fields either received
              // by the server or to be sent by the client.
              //
              // If a server received a request with header lines,
              //
              // Host: example.com
              // accept-encoding: gzip, deflate
              // Accept-Language: en-us
              // fOO: Bar
              // foo: two
              //
              // then
              //
              // Header = map[string][]string{
              // "Accept-Encoding": {"gzip, deflate"},
              // "Accept-Language": {"en-us"},
              // "Foo": {"Bar", "two"},
              // }
              ...
      
      After:
          type Request struct {
              // Header contains the request header fields either received by the server or
              // to be sent by the client.
              //
              // If a server received a request with header lines,
              //
              //     Host: example.com
              //     accept-encoding: gzip, deflate
              //     Accept-Language: en-us
              //     fOO: Bar
              //     foo: two
              //
              // then
              //
              //     Header = map[string][]string{
              //          "Accept-Encoding": {"gzip, deflate"},
              //          "Accept-Language": {"en-us"},
              //          "Foo": {"Bar", "two"},
              //     }
              ...
      
      Fixes #29708
      
      Change-Id: Ibe1a6a7a76d6b19c5737ba6e8210e3ad0b88ce16
      GitHub-Last-Rev: 439c0fe70a01490cbd9c3613eba3fe45a3ffd9be
      GitHub-Pull-Request: golang/go#31120
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169957
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      4091cf97
    • zdjones's avatar
      cmd/compile: update stale comment in prove · c1783896
      zdjones authored
      This is a follow-up CL to https://golang.org/cl/170118, updating a comment made
      incorrect by that CL.
      
      Change-Id: I5a29cfae331fbbbb36c96d96f9e4949393a5942d
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170123Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      c1783896
    • Michael Munday's avatar
      runtime: always mask shift amount regardless of architecture · 7b62e984
      Michael Munday authored
      Currently the shift amount is only masked on x86. Change it so it
      is masked on all architectures. In the worst case we generate a
      couple of extra instructions to perform the masking and in the best
      case we can elide overflow checks.
      
      This particular shift could also be replaced with a rotate
      instruction during optimization which would remove both the masking
      instructions and overflow checks on all architectures.
      
      Fixes #31165.
      
      Change-Id: I16b7a8800b4ba8813dc83735dfc59564e661d3b4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170122
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      7b62e984
    • Daniel Martí's avatar
      cmd/go: further reduce init work · e6ad619a
      Daniel Martí authored
      The first biggest offender was crypto/des.init at ~1%. It's
      cryptographically broken and the init function is relatively expensive,
      which is unfortunate as both crypto/tls and crypto/x509 (and by
      extension, cmd/go) import it. Hide the work behind sync.Once.
      
      The second biggest offender was flag.sortFlags at just under 1%, used by
      the Visit flagset methods. It allocated two slices, which made a
      difference as cmd/go iterates over multiple flagsets during init.
      Use a single slice with a direct sort.Interface implementation.
      
      Another big offender is initializing global maps. Reducing this work in
      cmd/go/internal/imports and net/textproto gives us close to another
      whole 1% in saved work. The former can use map literals, and the latter
      can hide the work behind sync.Once.
      
      Finally, compress/flate used newHuffmanBitWriter as part of init, which
      allocates many objects and slices. Yet it only used one of the slice
      fields. Allocating just that slice saves a surprising ~0.3%, since we
      generated a lot of unnecessary garbage.
      
      All in all, these little pieces amount to just over 3% saved CPU time.
      
      name         old time/op  new time/op  delta
      ExecGoEnv-8  3.61ms ± 1%  3.50ms ± 0%  -3.02%  (p=0.000 n=10+10)
      
      Updates #26775.
      Updates #29382.
      
      Change-Id: I915416e88a874c63235ba512617c8aef35c0ca8b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/166459
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      e6ad619a
  4. 30 Mar, 2019 3 commits
  5. 29 Mar, 2019 12 commits
    • zdjones's avatar
      cmd/compile: preempt repeated checks for the zero constant in prove · 576442b2
      zdjones authored
      Prove requires access to a zero-valued constant in multiple heavily-used
      code paths. Currently, prove is checking for the existence of the constant on
      every iteration of these paths, and creating it if not found.
      
      This CL preempts all of these checks by finding or creating the zero constant
      Value, just once, when the factsTable is initialised on entry to prove(). The
      Method used to initialise the zero constant, func.ConstInt64(), finds an
      existing constant if present, or creates one in the entry block otherwise.
      
      Fixes #31141
      
      Change-Id: Ic9a2fd9d79b67025e24d4483f6e87cf8213ead24
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170118Reviewed-by: default avatarGiovanni Bajo <rasky@develer.com>
      Run-TryBot: Giovanni Bajo <rasky@develer.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      576442b2
    • Jay Conrod's avatar
      cmd/go: clarify error when package is removed in a module · ee780d4a
      Jay Conrod authored
      If no module in the build list provides an imported package, we
      try to upgrade to the "@latest" version. If there is a requirement on
      a version of the module which is newer than the "@latest" version
      (e.g., a prerelease or pseudoversion), we cannot upgrade further.
      
      We previously reported "looping trying to add package" when we saw the
      package in "@latest" but it was removed later. The meaning of this is
      unclear for users, so with this change, we explain the package was
      removed.
      
      Fixes #30394
      
      Change-Id: I1b7fec2c37e762fb600e66ee8a4df4aeaf13e67a
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169720
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      ee780d4a
    • David Chase's avatar
      cmd/compile: enhance induction variable detection for unrolled loops · d8f60eea
      David Chase authored
      Would suggest extending capabilities (32-bit, unsigned, etc)
      in separate CLs because prove bugs are so mystifying.
      
      This implements the suggestion in this comment
      https://go-review.googlesource.com/c/go/+/104041/10/src/cmd/compile/internal/ssa/loopbce.go#164
      for inferring properly bounded iteration for loops of the form
      
      for i := K0; i < KNN-(K-1); i += K
      for i := K0; i <= KNN-K;    i += K
      
      Where KNN is "known non negative" (i.e., len or cap) and K
      is also not negative.  Because i <= KNN-K, i+K <= KNN and
      no overflow occurs.
      
      Also handles decreasing case (K1 > 0)
      for i := KNN; i >= K0; i -= K1
      which works when MININT+K1 < K0
      (i.e. MININT < K0-K1, no overflow)
      
      Signed only, also only 64 bit for now.
      
      Change-Id: I5da6015aba2f781ec76c4ad59c9c48d952325fdc
      Reviewed-on: https://go-review.googlesource.com/c/go/+/136375
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAlexandru Moșoi <alexandru@mosoi.ro>
      d8f60eea
    • Joel Sing's avatar
      cmd/link: permit duplicate weak symbols · c90f6dd4
      Joel Sing authored
      Permit weak symbols to be duplicates - most external linkers allow
      this and there are various situations where they can occur (including
      retpoline and retguard).
      
      Fixes #29563
      
      Change-Id: I355493c847fbc8f670a85a643db65a4cf8f9883d
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169658
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      c90f6dd4
    • Michael Munday's avatar
      cmd/asm: add 'insert program mask' instruction for s390x · 6966b675
      Michael Munday authored
      This CL adds the 'insert program mask' (IPM) instruction to s390x.
      IPM stores the current program mask (which contains the condition
      code) into a general purpose register.
      
      This instruction will be useful when implementing intrinsics for
      the arithmetic functions in the math/bits package. We can also
      potentially use it to convert some condition codes into bool
      values.
      
      The condition code can be saved and restored using an instruction
      sequence such as:
      
        IPM  R4          // save condition code to R4
        ...
        TMLH R4, $0x3000 // restore condition code from R4
      
      We can also use IPM to save the carry bit to a register using an
      instruction sequence such as:
      
        IPM     R4                   // save condition code to R4
        RISBLGZ $31, $31, $3, R4, R4 // isolate carry bit in R4
      
      Change-Id: I169d450b6ea1a7ff8c0286115ddc42618da8a2f4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/165997
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      6966b675
    • Elias Naur's avatar
      runtime/cgo: use free TLS slot on Android Q · 95f18757
      Elias Naur authored
      Android assumes pthread tls keys correspond to some offset from the
      TLS base. This is about to change in a future version of Android.
      Fortunately, Android Q leaves a slot open for use to use, TLS_SLOT_APP.
      
      Fixes #29674
      
      Change-Id: Id6ba19afacdfed9b262453714715435e2544185f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170117
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      95f18757
    • Elias Naur's avatar
      cmd/link/ld,cmd/internal/obj,runtime: make the Android TLS offset dynamic · 1d10b175
      Elias Naur authored
      We're going to need a different TLS offset for Android Q, so the static
      offsets used for 386 and amd64 are no longer viable on Android.
      
      Introduce runtime·tls_g and use that for indexing into TLS storage. As
      an added benefit, we can then merge the TLS setup code for all android
      GOARCHs.
      
      While we're at it, remove a bunch of android special cases no longer
      needed.
      
      Updates #29674
      Updates #29249 (perhaps fixes it)
      
      Change-Id: I77c7385aec7de8f1f6a4da7c9c79999157e39572
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169817
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      1d10b175
    • Jordan Liggitt's avatar
      net/http/httputil: make ReverseProxy flush headers on FlushInterval · 2cc34738
      Jordan Liggitt authored
      A regression was introduced in CL 137335 (5440bfc2) that caused FlushInterval
      to not be honored until the first Write() call was encountered. This change
      starts the flush timer as part of setting up the maxLatencyWriter.
      
      Fixes #31125
      Fixes #31126
      
      Change-Id: I75325bd926652922219bd1457b2b00ac6d0d41b0
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170066Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2cc34738
    • Ian Lance Taylor's avatar
      runtime: rename p racectx field to raceprocctx · 70ea70ec
      Ian Lance Taylor authored
      Both g and p had a racectx field, but they held different kinds of values.
      The g field held ThreadState values while the p field held Processor values
      (to use the names used in the C++ code in the compiler_rt support library).
      Rename the p field to raceprocctx to reduce potential confusion.
      
      Change-Id: Iefba0e259d240171e973054c452c3c15bf3f8f8f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169960Reviewed-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      70ea70ec
    • Ben Hoyt's avatar
      bytes, strings: add tests for TrimLeftFunc and TrimRightFunc · 154e5abf
      Ben Hoyt authored
      When I was working on the fix for #31038 (make TrimSpace return nil on
      all-space input) I noticed that there were no tests for TrimLeftFunc
      and TrimRightFunc, including the funky nil behavior. So add some!
      
      I've just reused the existing TrimFunc test cases for TrimLeftFunc and
      TrimRightFunc, as well as adding new tests for the empty string and
      all-trimmed cases (which test the nil-returning behavior of TrimFunc and
      TrimLeftFunc).
      
      Change-Id: Ib580d4364e9b3c91350305f9d9873080d7862904
      Reviewed-on: https://go-review.googlesource.com/c/go/+/170061
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      154e5abf
    • zdjones's avatar
      cmd/compile: make prove use poset to check non-negatives · ddef1578
      zdjones authored
      Prove currently fails to remove bounds checks of the form:
      
      if i >= 0 {              // hint that i is non-negative
          for i < len(data) {  // i becomes Phi in the loop SSA
              _ = data[i]      // data[Phi]; bounds check!!
      	i++
          }
      }
      
      addIndVarRestrictions fails to identify that the loop induction
      variable, (Phi), is non-negative. As a result, the restrictions,
      i <= Phi < len(data), are only added for the signed domain. When
      testing the bounds check, addBranchRestrictions is similarly unable
      to infer that Phi is non-negative. As a result, the restriction,
      Phi >= len(data), is only added/tested for the unsigned domain.
      
      This CL changes the isNonNegative method to utilise the factTable's
      partially ordered set (poset). It also adds field factTable.zero to
      allow isNonNegative to query the poset using the zero(0) constant
      found or created early in prove.
      
      Fixes #28956
      
      Change-Id: I792f886c652eeaa339b0d57d5faefbf5922fe44f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/161437
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarGiovanni Bajo <rasky@develer.com>
      ddef1578
    • Agniva De Sarker's avatar
      internal/bytealg: simplify memchr for wasm · 4a7cd9d9
      Agniva De Sarker authored
      Get rid of an extra register R5 which just recalculated the value of R4.
      Reuse R4 instead.
      
      We also remove the casting of c to an unsigned char because the initial
      load of R0 is done with I32Load8U anyways.
      
      Also indent the code to make it more readable.
      
      name                           old time/op  new time/op  delta
      IndexRune                       597ns ± 3%   580ns ± 3%  -2.93%  (p=0.002 n=10+10)
      IndexRuneLongString             634ns ± 4%   654ns ± 3%  +3.07%  (p=0.004 n=10+10)
      IndexRuneFastPath              57.6ns ± 3%  56.9ns ± 4%    ~     (p=0.210 n=10+10)
      Index                           104ns ± 3%   104ns ± 4%    ~     (p=0.639 n=10+10)
      LastIndex                      87.1ns ± 5%  85.7ns ± 3%    ~     (p=0.171 n=10+10)
      IndexByte                      34.4ns ± 4%  32.9ns ± 5%  -4.28%  (p=0.002 n=10+10)
      IndexHard1                     21.6ms ± 1%  21.8ms ± 3%    ~     (p=0.460 n=8+10)
      IndexHard2                     21.6ms ± 2%  21.9ms ± 5%    ~     (p=0.133 n=9+10)
      IndexHard3                     21.8ms ± 3%  21.7ms ± 1%    ~     (p=0.579 n=10+10)
      IndexHard4                     21.6ms ± 1%  21.9ms ± 4%    ~     (p=0.360 n=8+10)
      LastIndexHard1                 25.1ms ± 2%  25.4ms ± 5%    ~     (p=0.853 n=10+10)
      LastIndexHard2                 25.3ms ± 6%  25.2ms ± 5%    ~     (p=0.796 n=10+10)
      LastIndexHard3                 25.3ms ± 4%  25.2ms ± 3%    ~     (p=0.739 n=10+10)
      IndexTorture                    130µs ± 3%   133µs ± 5%    ~     (p=0.218 n=10+10)
      IndexAnyASCII/1:1              98.4ns ± 5%  96.6ns ± 5%    ~     (p=0.054 n=10+10)
      IndexAnyASCII/1:2               109ns ± 4%   110ns ± 3%    ~     (p=0.232 n=10+10)
      IndexAnyASCII/1:4               135ns ± 4%   134ns ± 3%    ~     (p=0.671 n=10+10)
      IndexAnyASCII/1:8               184ns ± 4%   184ns ± 3%    ~     (p=0.749 n=10+10)
      IndexAnyASCII/1:16              289ns ± 3%   281ns ± 3%  -2.73%  (p=0.001 n=9+10)
      IndexAnyASCII/16:1              322ns ± 3%   307ns ± 3%  -4.71%  (p=0.000 n=10+10)
      IndexAnyASCII/16:2              329ns ± 3%   320ns ± 3%  -2.89%  (p=0.008 n=10+10)
      IndexAnyASCII/16:4              353ns ± 3%   339ns ± 3%  -3.91%  (p=0.001 n=10+10)
      IndexAnyASCII/16:8              390ns ± 3%   374ns ± 3%  -4.06%  (p=0.000 n=10+10)
      IndexAnyASCII/16:16             471ns ± 4%   452ns ± 2%  -4.22%  (p=0.000 n=10+10)
      IndexAnyASCII/256:1            2.94µs ± 4%  2.91µs ± 2%    ~     (p=0.424 n=10+10)
      IndexAnyASCII/256:2            2.92µs ± 3%  2.90µs ± 2%    ~     (p=0.388 n=9+10)
      IndexAnyASCII/256:4            2.93µs ± 1%  2.90µs ± 1%  -0.98%  (p=0.036 n=8+9)
      IndexAnyASCII/256:8            3.03µs ± 5%  2.97µs ± 3%    ~     (p=0.085 n=10+10)
      IndexAnyASCII/256:16           3.07µs ± 4%  3.01µs ± 1%  -2.03%  (p=0.003 n=10+9)
      IndexAnyASCII/4096:1           45.8µs ± 3%  45.9µs ± 2%    ~     (p=0.905 n=10+9)
      IndexAnyASCII/4096:2           46.7µs ± 3%  46.2µs ± 3%    ~     (p=0.190 n=10+10)
      IndexAnyASCII/4096:4           45.7µs ± 2%  46.4µs ± 3%  +1.37%  (p=0.022 n=9+10)
      IndexAnyASCII/4096:8           46.4µs ± 3%  46.0µs ± 2%    ~     (p=0.436 n=10+10)
      IndexAnyASCII/4096:16          46.6µs ± 3%  46.7µs ± 2%    ~     (p=0.971 n=10+10)
      IndexPeriodic/IndexPeriodic2   1.40ms ± 3%  1.40ms ± 2%    ~     (p=0.853 n=10+10)
      IndexPeriodic/IndexPeriodic4   1.40ms ± 3%  1.40ms ± 3%    ~     (p=0.579 n=10+10)
      IndexPeriodic/IndexPeriodic8   1.42ms ± 3%  1.39ms ± 2%  -1.60%  (p=0.029 n=10+10)
      IndexPeriodic/IndexPeriodic16   616µs ± 5%   583µs ± 5%  -5.32%  (p=0.001 n=10+10)
      IndexPeriodic/IndexPeriodic32   313µs ± 5%   301µs ± 2%  -3.67%  (p=0.002 n=10+10)
      IndexPeriodic/IndexPeriodic64   169µs ± 5%   164µs ± 5%  -3.17%  (p=0.023 n=10+10)
      
      NodeJS version - 10.2.1
      
      Change-Id: I9a8268314b5652c4aeffc4c5c72d2fd1a384aa9e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/169777
      Run-TryBot: Agniva De Sarker <agniva.quicksilver@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      4a7cd9d9
  6. 28 Mar, 2019 11 commits