[all-commits] [llvm/llvm-project] afc055: [IR][Attribute] Add support for intersecting Attri...

goldsteinn via All-commits all-commits at lists.llvm.org
Tue Oct 1 09:45:54 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: afc0557a04e333b67b96f8fce83b949ddb40fe2a
      https://github.com/llvm/llvm-project/commit/afc0557a04e333b67b96f8fce83b949ddb40fe2a
  Author: goldsteinn <35538541+goldsteinn at users.noreply.github.com>
  Date:   2024-10-01 (Tue, 01 Oct 2024)

  Changed paths:
    M llvm/include/llvm/IR/Attributes.h
    M llvm/include/llvm/IR/Attributes.td
    M llvm/lib/IR/AttributeImpl.h
    M llvm/lib/IR/Attributes.cpp
    M llvm/unittests/IR/AttributesTest.cpp
    M llvm/utils/TableGen/Attributes.cpp

  Log Message:
  -----------
  [IR][Attribute] Add support for intersecting AttributeLists; NFC (#109719)

Add support for taking the intersection of two AttributeLists s.t the
result list contains attributes that are valid in the context of both
inputs.

i.e if we have `nonnull align(32) noundef` intersected with `nonnull
align(16) dereferenceable(10)`, the result is `nonnull align(16)`.

Further it handles attributes that are not-droppable. For example
dropping `byval` can change the nature of a callsite/function so its
impossible to correct a correct intersection if its dropped from the
result. i.e `nonnull byval(i64)` intersected with `nonnull` is
invalid.

The motivation for the infrastructure is to enable sinking/hoisting
callsites with differing attributes.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list