[all-commits] [llvm/llvm-project] 2a26a4: [Attributes] Make intrinsic attribute generation m...

Nikita Popov via All-commits all-commits at lists.llvm.org
Wed Oct 12 01:56:22 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 2a26a445b342b0fa6090e8e99bf1fd0f18f6f7df
      https://github.com/llvm/llvm-project/commit/2a26a445b342b0fa6090e8e99bf1fd0f18f6f7df
  Author: Nikita Popov <npopov at redhat.com>
  Date:   2022-10-12 (Wed, 12 Oct 2022)

  Changed paths:
    R llvm/test/TableGen/intrin-properties.td
    M llvm/test/TableGen/intrin-side-effects.td
    M llvm/utils/TableGen/CodeGenIntrinsics.h
    M llvm/utils/TableGen/IntrinsicEmitter.cpp

  Log Message:
  -----------
  [Attributes] Make intrinsic attribute generation more flexible (NFC)

Currently attributes for intrinsics are emitted using the
ArrayRef<AttrKind> based constructor for AttributeLists. This works
out fine for simple enum attributes, but doesn't really generalize
to attributes that accept values. We're already doing something
awkward for alignment attributes, and I'd like to have a cleaner
solution to this with
https://discourse.llvm.org/t/rfc-unify-memory-effect-attributes/65579 in mind.

The new generation approach is to instead directly construct
Attributes, giving us access to the full generality of that
interface. To avoid significantly increasing the size of the
generated code, we now also deduplicate the attribute sets. The
code generated per unique AttributeList looks like this:

  case 204: {
    AS[0] = {1, getIntrinsicArgAttributeSet(C, 5)};
    AS[1] = {AttributeList::FunctionIndex, getIntrinsicFnAttributeSet(C, 10)};
    NumAttrs = 2;
    break;
  }

and then the helper functions contain something like

  case 5:
    return AttributeSet::get(C, {
      Attribute::get(C, Attribute::NoCapture),
    });

and

  case 10:
    return AttributeSet::get(C, {
      Attribute::get(C, Attribute::NoUnwind),
      Attribute::get(C, Attribute::ArgMemOnly),
    });

A casualty of this change is the intrin-properties.td test, as I
don't think that FileCheck allows matching this kind of output.

Differential Revision: https://reviews.llvm.org/D135679




More information about the All-commits mailing list