Started 5 mo 8 days ago
Took 14 min

Success Build clang-r362868-t57346-b57346.tar.gz (Jun 8, 2019 12:39:43 AM)

Issues

No known issues detected

Build Log

Revision: 362564
Changes
  1. [SystemZ, RegAlloc]  Favor 3-address instructions during instruction selection.

    This patch aims to reduce spilling and register moves by using the 3-address
    versions of instructions per default instead of the 2-address equivalent
    ones. It seems that both spilling and register moves are improved noticeably
    generally.

    Regalloc hints are passed to increase conversions to 2-address instructions
    which are done in SystemZShortenInst.cpp (after regalloc).

    Since the SystemZ reg/mem instructions are 2-address (dst and lhs regs are
    the same), foldMemoryOperandImpl() can no longer trivially fold a spilled
    source register since the reg/reg instruction is now 3-address. In order to
    remedy this, new 3-address pseudo memory instructions are used to perform the
    folding only when the dst and lhs virtual registers are known to be allocated
    to the same physreg. In order to not let MachineCopyPropagation run and
    change registers on these transformed instructions (making it 3-address), a
    new target pass called SystemZPostRewrite.cpp is run just after
    VirtRegRewriter, that immediately lowers the pseudo to a target instruction.

    If it would have been possibe to insert a COPY instruction and change a
    register operand (convert to 2-address) in foldMemoryOperandImpl() while
    trusting that the caller (e.g. InlineSpiller) would update/repair the
    involved LiveIntervals, the solution involving pseudo instructions would not
    have been needed. This is perhaps a potential improvement (see Phabricator
    post).

    Common code changes:

    * A new hook TargetPassConfig::addPostRewrite() is utilized to be able to run a
    target pass immediately before MachineCopyPropagation.

    * VirtRegMap is passed as an argument to foldMemoryOperand().

    Review: Ulrich Weigand, Quentin Colombet
    https://reviews.llvm.org/D60888 (detail)
    by jonpa
Revision: 362564
Changes
  1. update debugging docs to be less out of date (detail)
    by ericwf
  2. Substantially reduce instantiations and debug size of std::function

    std::function uses a standard allocator to manage its memory, however
    standard allocators are templates and using them correctly requires
    a stupid amount of instantiations. This leads to a substantial increase
    in debug info and object sizes.

    This patch addresses the issue by dropping the allocator when possible
    and using raw new and delete to get memory.

    This change decreases the object file size for the test func.wrap.func.con/F.pass.cpp by 33% and the final binary by 29% (when compiled with -g -ggnu-pubnames -gpubnames).

    It also roughly halfs the number of entries in the pubnames and pubtype
    sections. (detail)
    by ericwf

Started by upstream project relay-lnt-ctmark build number 8528
originally caused by:

This run spent:

  • 9 min 31 sec waiting;
  • 14 min build duration;
  • 14 min total from scheduled to completion.