[llvm-dev] TableGen processing of target-specific intrinsics

Paul C. Anagnostopoulos via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 30 14:59:43 PDT 2020


Another question: Is there a reason why all the TableGen intrinsic files have to be included in every run of TableGen, one per backend per target? Couldn't those files be included only when running backends pertinent to the intrinsics?


At 9/30/2020 04:31 PM, Reid Kleckner wrote:
>On Wed, Sep 30, 2020 at 6:20 AM Nicolai Hähnle via llvm-dev <<mailto:llvm-dev at lists.llvm.org>llvm-dev at lists.llvm.org> wrote:
>Hi Paul,
>
>the intrinsics of all backends together with the target-agnostic
>intrinsics are all part of a single large enum, and there are some
>subtle assumptions made e.g. about how the values in this enum are
>sorted (in order to emit tables that are suitable for binary search).
>So this is an area in which to tread carefully.
>
>
>Strictly speaking, they are no longer part of the same enum:
><http://github.com/llvm/llvm-project/commit/5d986953c8b917bacfaa1f800fc1e242559f76be>http://github.com/llvm/llvm-project/commit/5d986953c8b917bacfaa1f800fc1e242559f76be
>But yes, they use the same enumerator space, and tablgen processes them all at once.
>
>Processing intrinsics separately by target requires dividing the 32-bit intrinsic opcode space up front. For example, we could use 8 bits for target, 24 for intrinsics. This would make intrinsic ids no longer dense, and no longer suitable as array indices, but perhaps having distinct arrays per target is better anyway.



More information about the llvm-dev mailing list