Skip to content

Commit

Permalink
[AArch64] Update SME load/store intrinsics to work on opaque pointers.
Browse files Browse the repository at this point in the history
These intrinsics should be able to use opaque pointers, because the
load/store type is already encoded in their names and return/operand type.

Reviewed By: c-rhodes

Differential Revision: https://reviews.llvm.org/D128505
  • Loading branch information
sdesmalen-arm committed Jun 28, 2022
1 parent f916ee0 commit 180cc74
Show file tree
Hide file tree
Showing 3 changed files with 240 additions and 252 deletions.
56 changes: 22 additions & 34 deletions llvm/include/llvm/IR/IntrinsicsAArch64.td
Expand Up @@ -2586,45 +2586,33 @@ def int_aarch64_sve_whilewr_d : SVE2_CONFLICT_DETECT_Intrinsic;

// Scalable Matrix Extension (SME) Intrinsics
let TargetPrefix = "aarch64" in {
class SME_Load_Store_B_Intrinsic
class SME_Load_Store_Intrinsic<LLVMType pred_ty>
: DefaultAttrsIntrinsic<[],
[llvm_nxv16i1_ty, llvm_ptr_ty, llvm_i64_ty, llvm_i32_ty], []>;
class SME_Load_Store_H_Intrinsic
: DefaultAttrsIntrinsic<[],
[llvm_nxv16i1_ty, LLVMPointerType<llvm_i16_ty>, llvm_i64_ty, llvm_i32_ty], []>;
class SME_Load_Store_S_Intrinsic
: DefaultAttrsIntrinsic<[],
[llvm_nxv16i1_ty, LLVMPointerType<llvm_i32_ty>, llvm_i64_ty, llvm_i32_ty], []>;
class SME_Load_Store_D_Intrinsic
: DefaultAttrsIntrinsic<[],
[llvm_nxv16i1_ty, LLVMPointerType<llvm_i64_ty>, llvm_i64_ty, llvm_i32_ty], []>;
class SME_Load_Store_Q_Intrinsic
: DefaultAttrsIntrinsic<[],
[llvm_nxv16i1_ty, LLVMPointerType<llvm_i128_ty>, llvm_i64_ty, llvm_i32_ty], []>;
[pred_ty, llvm_ptr_ty, llvm_i64_ty, llvm_i32_ty], []>;

// Loads
def int_aarch64_sme_ld1b_horiz : SME_Load_Store_B_Intrinsic;
def int_aarch64_sme_ld1h_horiz : SME_Load_Store_H_Intrinsic;
def int_aarch64_sme_ld1w_horiz : SME_Load_Store_S_Intrinsic;
def int_aarch64_sme_ld1d_horiz : SME_Load_Store_D_Intrinsic;
def int_aarch64_sme_ld1q_horiz : SME_Load_Store_Q_Intrinsic;
def int_aarch64_sme_ld1b_vert : SME_Load_Store_B_Intrinsic;
def int_aarch64_sme_ld1h_vert : SME_Load_Store_H_Intrinsic;
def int_aarch64_sme_ld1w_vert : SME_Load_Store_S_Intrinsic;
def int_aarch64_sme_ld1d_vert : SME_Load_Store_D_Intrinsic;
def int_aarch64_sme_ld1q_vert : SME_Load_Store_Q_Intrinsic;
def int_aarch64_sme_ld1b_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1h_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1w_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1d_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1q_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1b_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1h_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1w_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1d_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_ld1q_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;

// Stores
def int_aarch64_sme_st1b_horiz : SME_Load_Store_B_Intrinsic;
def int_aarch64_sme_st1h_horiz : SME_Load_Store_H_Intrinsic;
def int_aarch64_sme_st1w_horiz : SME_Load_Store_S_Intrinsic;
def int_aarch64_sme_st1d_horiz : SME_Load_Store_D_Intrinsic;
def int_aarch64_sme_st1q_horiz : SME_Load_Store_Q_Intrinsic;
def int_aarch64_sme_st1b_vert : SME_Load_Store_B_Intrinsic;
def int_aarch64_sme_st1h_vert : SME_Load_Store_H_Intrinsic;
def int_aarch64_sme_st1w_vert : SME_Load_Store_S_Intrinsic;
def int_aarch64_sme_st1d_vert : SME_Load_Store_D_Intrinsic;
def int_aarch64_sme_st1q_vert : SME_Load_Store_Q_Intrinsic;
def int_aarch64_sme_st1b_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1h_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1w_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1d_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1q_horiz : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1b_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1h_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1w_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1d_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;
def int_aarch64_sme_st1q_vert : SME_Load_Store_Intrinsic<llvm_nxv16i1_ty>;

// Spill + fill
def int_aarch64_sme_ldr : DefaultAttrsIntrinsic<
Expand Down

0 comments on commit 180cc74

Please sign in to comment.