This is an archive of the discontinued LLVM Phabricator instance.

[Attributor] Inititialize "value attributes" w/ must-be-executed-context info
ClosedPublic

Authored by jdoerfert on Apr 23 2020, 8:49 AM.

Details

Summary

Attributes that only depend on the value (=bit pattern) can be
initialized from uses in the must-be-executed-context (MBEC). We did use
AAComposeTwoGenericDeduction and AAFromMustBeExecutedContext before
to do this for some positions of these attributes but not for all. This
was fairly complicated and also problematic as we did run it in every
updateImpl call even though we only use known information. The new
implementation removes AAComposeTwoGenericDeduction* and
AAFromMustBeExecutedContext in favor of a simple interface
AddInformation::fromMBEContext(...) which we call from the
initialize methods of the "value attribute" Impl classes, e.g.
AANonNullImpl:initialize.

There can be two types of test changes:

  1. Artifacts were we miss some information that was known before a global fixpoint was reached and therefore available in an update but not at the beginning.
  2. Deduction for values we did not derive via the MBEC before or which were not found as the AAFromMustBeExecutedContext::updateImpl was never invoked.
  • An improved version of AAComposeTwoGenericDeduction can be found in D78718. Once we find a new use case that implementation will be able to handle "generic" AAs better.

Single run of the Attributor module and then CGSCC pass (oldPM)
for SPASS/clause.c (~10k LLVM-IR loc):

Before:

calls to allocation functions: 425018 (318843/s)
temporary memory allocations: 77284 (57977/s)
peak heap memory consumption: 17.24MB
peak RSS (including heaptrack overhead): 102.42MB
total memory leaked: 269.07KB

After:

calls to allocation functions: 511289 (241858/s)
temporary memory allocations: 101680 (48098/s)
peak heap memory consumption: 12.98MB
peak RSS (including heaptrack overhead): 95.53MB
total memory leaked: 269.07KB

Difference:

calls to allocation functions: 86271 (110462/s)
temporary memory allocations: 24396 (31236/s)
peak heap memory consumption: -4.26MB
peak RSS (including heaptrack overhead): 0B
total memory leaked: 0B

Diff Detail

Event Timeline

jdoerfert created this revision.Apr 23 2020, 8:49 AM
Herald added a reviewer: uenoku. · View Herald Transcript
Herald added a project: Restricted Project. · View Herald Transcript
uenoku accepted this revision.Apr 23 2020, 10:51 AM

LGTM

This revision is now accepted and ready to land.Apr 23 2020, 10:51 AM
This revision was automatically updated to reflect the committed changes.