runtime: persistentalloc and cache itabs
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 1 May 2019 20:27:36 +0000 (20:27 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 1 May 2019 20:27:36 +0000 (20:27 +0000)
commit1da37f43b21e0c35e57b627edfa99ec80d2976ee
tree26483152e3287f06aa81c6a9d5905447f1ac0474
parent9f3a481e08cbcce98793b3c7a78045e4e9621493
runtime: persistentalloc and cache itabs

    Previously, each time we do an interface conversion for which the
    method table is not known at compile time, we allocate a new
    method table.

    This CL ports the mechanism of itab caching from the gc runtime,
    adapted to our itab representation and method finding mechanism.
    With the cache, we reuse the same itab for the same (interface,
    concrete) type pair. This reduces allocations in interface
    conversions.

    Unlike the gc runtime, we don't prepopulate the cache with
    statically allocated itabs, as currently we don't have a way to
    find them. This means we don't deduplicate run-time allocated
    itabs with compile-time allocated ones. But that is not too bad
    -- it is just a cache anyway.

    As now itabs are never freed, it is also possible to drop the
    write barrier for writing the first word of an interface header.
    I'll leave this optimization for the future.

    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/171617

From-SVN: r270778
gcc/go/gofrontend/MERGE
libgo/go/runtime/iface.go