[LangRef] Require elementtype attribute for gc.statepoint intrinsic
authorNikita Popov <npopov@redhat.com>
Fri, 21 Jan 2022 14:46:00 +0000 (15:46 +0100)
committerNikita Popov <npopov@redhat.com>
Fri, 4 Feb 2022 08:47:31 +0000 (09:47 +0100)
commite990e591c97653e50a77097c0cb2cd26f2ce5413
tree94ca13134c0bfe4445210b37f695fdb4aca10511
parent3db39e74792d774c9d413710d690daf31b1d0d0c
[LangRef] Require elementtype attribute for gc.statepoint intrinsic

The gc.statepoint intrinsic currently determines the target function
type based on the pointer element type of the argument. In order to
support opaque pointers, require that the argument is annotated with
an elementtype attribute.

Here's an example of the change:

    ; Before:
      %safepoint_token = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0)

    ; After:
      %safepoint_token = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0)

    ; After with opaque pointers:
      %safepoint_token = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0)

Differential Revision: https://reviews.llvm.org/D117890
llvm/docs/LangRef.rst