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

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


This has me curious, so I'm going to learn how it works.

Would it be possible to allow each target to generate its own intrinsic tables, and then write a program to merge them into one contiguous space?


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