Skip to content

Commit

Permalink
[RISCV] Use ClangBuiltin in IntrinsicsRISCV.td to map some scalar cry…
Browse files Browse the repository at this point in the history
…pto builtins to IR intrinsic.

This is the way most targets do it for a simple mapping.

We can't do this for all builtins due to type overloading of the IR intrinsics.

Reviewed By: asb

Differential Revision: https://reviews.llvm.org/D154567
  • Loading branch information
topperc committed Jul 6, 2023
1 parent f3d0613 commit 1db5b49
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 91 deletions.
69 changes: 0 additions & 69 deletions clang/lib/CodeGen/CGBuiltin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20230,45 +20230,6 @@ Value *CodeGenFunction::EmitRISCVBuiltinExpr(unsigned BuiltinID,

// Zk builtins

// Zknd
case RISCV::BI__builtin_riscv_aes32dsi_32:
ID = Intrinsic::riscv_aes32dsi;
break;
case RISCV::BI__builtin_riscv_aes32dsmi_32:
ID = Intrinsic::riscv_aes32dsmi;
break;
case RISCV::BI__builtin_riscv_aes64ds_64:
ID = Intrinsic::riscv_aes64ds;
break;
case RISCV::BI__builtin_riscv_aes64dsm_64:
ID = Intrinsic::riscv_aes64dsm;
break;
case RISCV::BI__builtin_riscv_aes64im_64:
ID = Intrinsic::riscv_aes64im;
break;

// Zkne
case RISCV::BI__builtin_riscv_aes32esi_32:
ID = Intrinsic::riscv_aes32esi;
break;
case RISCV::BI__builtin_riscv_aes32esmi_32:
ID = Intrinsic::riscv_aes32esmi;
break;
case RISCV::BI__builtin_riscv_aes64es_64:
ID = Intrinsic::riscv_aes64es;
break;
case RISCV::BI__builtin_riscv_aes64esm_64:
ID = Intrinsic::riscv_aes64esm;
break;

// Zknd & Zkne
case RISCV::BI__builtin_riscv_aes64ks1i_64:
ID = Intrinsic::riscv_aes64ks1i;
break;
case RISCV::BI__builtin_riscv_aes64ks2_64:
ID = Intrinsic::riscv_aes64ks2;
break;

// Zknh
case RISCV::BI__builtin_riscv_sha256sig0:
ID = Intrinsic::riscv_sha256sig0;
Expand All @@ -20286,36 +20247,6 @@ Value *CodeGenFunction::EmitRISCVBuiltinExpr(unsigned BuiltinID,
ID = Intrinsic::riscv_sha256sum1;
IntrinsicTypes = {ResultType};
break;
case RISCV::BI__builtin_riscv_sha512sig0_64:
ID = Intrinsic::riscv_sha512sig0;
break;
case RISCV::BI__builtin_riscv_sha512sig0h_32:
ID = Intrinsic::riscv_sha512sig0h;
break;
case RISCV::BI__builtin_riscv_sha512sig0l_32:
ID = Intrinsic::riscv_sha512sig0l;
break;
case RISCV::BI__builtin_riscv_sha512sig1_64:
ID = Intrinsic::riscv_sha512sig1;
break;
case RISCV::BI__builtin_riscv_sha512sig1h_32:
ID = Intrinsic::riscv_sha512sig1h;
break;
case RISCV::BI__builtin_riscv_sha512sig1l_32:
ID = Intrinsic::riscv_sha512sig1l;
break;
case RISCV::BI__builtin_riscv_sha512sum0_64:
ID = Intrinsic::riscv_sha512sum0;
break;
case RISCV::BI__builtin_riscv_sha512sum0r_32:
ID = Intrinsic::riscv_sha512sum0r;
break;
case RISCV::BI__builtin_riscv_sha512sum1_64:
ID = Intrinsic::riscv_sha512sum1;
break;
case RISCV::BI__builtin_riscv_sha512sum1r_32:
ID = Intrinsic::riscv_sha512sum1r;
break;

// Zksed
case RISCV::BI__builtin_riscv_sm4ks:
Expand Down
65 changes: 43 additions & 22 deletions llvm/include/llvm/IR/IntrinsicsRISCV.td
Original file line number Diff line number Diff line change
Expand Up @@ -1613,45 +1613,66 @@ class ScalarCryptoByteSelectAny
[IntrNoMem, IntrSpeculatable, ImmArg<ArgIndex<2>>]>;

// Zknd
def int_riscv_aes32dsi : ScalarCryptoByteSelect32;
def int_riscv_aes32dsmi : ScalarCryptoByteSelect32;
def int_riscv_aes32dsi : ScalarCryptoByteSelect32,
ClangBuiltin<"__builtin_riscv_aes32dsi_32">;
def int_riscv_aes32dsmi : ScalarCryptoByteSelect32,
ClangBuiltin<"__builtin_riscv_aes32dsmi_32">;

def int_riscv_aes64ds : ScalarCryptoGprGprIntrinsic64;
def int_riscv_aes64dsm : ScalarCryptoGprGprIntrinsic64;
def int_riscv_aes64ds : ScalarCryptoGprGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_aes64ds_64">;
def int_riscv_aes64dsm : ScalarCryptoGprGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_aes64dsm_64">;

def int_riscv_aes64im : ScalarCryptoGprIntrinsic64;
def int_riscv_aes64im : ScalarCryptoGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_aes64im_64">;

// Zkne
def int_riscv_aes32esi : ScalarCryptoByteSelect32;
def int_riscv_aes32esmi : ScalarCryptoByteSelect32;
def int_riscv_aes32esi : ScalarCryptoByteSelect32,
ClangBuiltin<"__builtin_riscv_aes32esi_32">;
def int_riscv_aes32esmi : ScalarCryptoByteSelect32,
ClangBuiltin<"__builtin_riscv_aes32esmi_32">;

def int_riscv_aes64es : ScalarCryptoGprGprIntrinsic64;
def int_riscv_aes64esm : ScalarCryptoGprGprIntrinsic64;
def int_riscv_aes64es : ScalarCryptoGprGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_aes64es_64">;
def int_riscv_aes64esm : ScalarCryptoGprGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_aes64esm_64">;

// Zknd & Zkne
def int_riscv_aes64ks2 : ScalarCryptoGprGprIntrinsic64;
def int_riscv_aes64ks2 : ScalarCryptoGprGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_aes64ks2_64">;
def int_riscv_aes64ks1i : DefaultAttrsIntrinsic<[llvm_i64_ty],
[llvm_i64_ty, llvm_i32_ty],
[IntrNoMem, IntrSpeculatable,
ImmArg<ArgIndex<1>>]>;
ImmArg<ArgIndex<1>>]>,
ClangBuiltin<"__builtin_riscv_aes64ks1i_64">;

// Zknh
def int_riscv_sha256sig0 : ScalarCryptoGprIntrinsicAny;
def int_riscv_sha256sig1 : ScalarCryptoGprIntrinsicAny;
def int_riscv_sha256sum0 : ScalarCryptoGprIntrinsicAny;
def int_riscv_sha256sum1 : ScalarCryptoGprIntrinsicAny;

def int_riscv_sha512sig0l : ScalarCryptoGprGprIntrinsic32;
def int_riscv_sha512sig0h : ScalarCryptoGprGprIntrinsic32;
def int_riscv_sha512sig1l : ScalarCryptoGprGprIntrinsic32;
def int_riscv_sha512sig1h : ScalarCryptoGprGprIntrinsic32;
def int_riscv_sha512sum0r : ScalarCryptoGprGprIntrinsic32;
def int_riscv_sha512sum1r : ScalarCryptoGprGprIntrinsic32;

def int_riscv_sha512sig0 : ScalarCryptoGprIntrinsic64;
def int_riscv_sha512sig1 : ScalarCryptoGprIntrinsic64;
def int_riscv_sha512sum0 : ScalarCryptoGprIntrinsic64;
def int_riscv_sha512sum1 : ScalarCryptoGprIntrinsic64;
def int_riscv_sha512sig0l : ScalarCryptoGprGprIntrinsic32,
ClangBuiltin<"__builtin_riscv_sha512sig0l_32">;
def int_riscv_sha512sig0h : ScalarCryptoGprGprIntrinsic32,
ClangBuiltin<"__builtin_riscv_sha512sig0h_32">;
def int_riscv_sha512sig1l : ScalarCryptoGprGprIntrinsic32,
ClangBuiltin<"__builtin_riscv_sha512sig1l_32">;
def int_riscv_sha512sig1h : ScalarCryptoGprGprIntrinsic32,
ClangBuiltin<"__builtin_riscv_sha512sig1h_32">;
def int_riscv_sha512sum0r : ScalarCryptoGprGprIntrinsic32,
ClangBuiltin<"__builtin_riscv_sha512sum0r_32">;
def int_riscv_sha512sum1r : ScalarCryptoGprGprIntrinsic32,
ClangBuiltin<"__builtin_riscv_sha512sum1r_32">;

def int_riscv_sha512sig0 : ScalarCryptoGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_sha512sig0_64">;
def int_riscv_sha512sig1 : ScalarCryptoGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_sha512sig1_64">;
def int_riscv_sha512sum0 : ScalarCryptoGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_sha512sum0_64">;
def int_riscv_sha512sum1 : ScalarCryptoGprIntrinsic64,
ClangBuiltin<"__builtin_riscv_sha512sum1_64">;

// Zksed
def int_riscv_sm4ks : ScalarCryptoByteSelectAny;
Expand Down

0 comments on commit 1db5b49

Please sign in to comment.