22 if (builtinID == Builtin::BI__builtin_cpu_supports ||
23 builtinID == Builtin::BI__builtin_cpu_init ||
24 builtinID == Builtin::BI__builtin_cpu_is) {
26 std::string(
"unimplemented RISC-V builtin call: ") +
31 StringRef intrinsicName;
37 unsigned iceArguments = 0;
41 for (
auto [idx, arg] : llvm::enumerate(e->
arguments()))
46 llvm_unreachable(
"unexpected builtin ID");
49 case RISCV::BI__builtin_riscv_orc_b_32:
50 case RISCV::BI__builtin_riscv_orc_b_64: {
51 intrinsicName =
"riscv.orc.b";
56 case RISCV::BI__builtin_riscv_clmul_32:
57 case RISCV::BI__builtin_riscv_clmul_64: {
58 intrinsicName =
"clmul";
61 case RISCV::BI__builtin_riscv_clmulh_32:
62 case RISCV::BI__builtin_riscv_clmulh_64: {
63 intrinsicName =
"riscv.clmulh";
66 case RISCV::BI__builtin_riscv_clmulr_32:
67 case RISCV::BI__builtin_riscv_clmulr_64: {
68 intrinsicName =
"riscv.clmulr";
73 case RISCV::BI__builtin_riscv_xperm4_32:
74 case RISCV::BI__builtin_riscv_xperm4_64: {
75 intrinsicName =
"riscv.xperm4";
78 case RISCV::BI__builtin_riscv_xperm8_32:
79 case RISCV::BI__builtin_riscv_xperm8_64: {
80 intrinsicName =
"riscv.xperm8";
84 case RISCV::BI__builtin_riscv_brev8_32:
85 case RISCV::BI__builtin_riscv_brev8_64: {
86 intrinsicName =
"riscv.brev8";
89 case RISCV::BI__builtin_riscv_zip_32: {
90 intrinsicName =
"riscv.zip";
93 case RISCV::BI__builtin_riscv_unzip_32: {
94 intrinsicName =
"riscv.unzip";
98 case RISCV::BI__builtin_riscv_sha256sig0:
99 case RISCV::BI__builtin_riscv_sha256sig1:
100 case RISCV::BI__builtin_riscv_sha256sum0:
101 case RISCV::BI__builtin_riscv_sha256sum1:
103 case RISCV::BI__builtin_riscv_sm4ks:
104 case RISCV::BI__builtin_riscv_sm4ed:
106 case RISCV::BI__builtin_riscv_sm3p0:
107 case RISCV::BI__builtin_riscv_sm3p1:
109 case RISCV::BI__builtin_riscv_clz_32:
110 case RISCV::BI__builtin_riscv_clz_64:
111 case RISCV::BI__builtin_riscv_ctz_32:
112 case RISCV::BI__builtin_riscv_ctz_64:
114 case RISCV::BI__builtin_riscv_ntl_load:
115 case RISCV::BI__builtin_riscv_ntl_store: {
117 std::string(
"unimplemented RISC-V builtin call: ") +
119 return mlir::Value{};
123 case RISCV::BI__builtin_riscv_pause: {
124 intrinsicName =
"riscv.pause";
125 returnType = builder.getVoidTy();
130 case RISCV::BI__builtin_riscv_cv_alu_addN:
131 case RISCV::BI__builtin_riscv_cv_alu_addRN:
132 case RISCV::BI__builtin_riscv_cv_alu_adduN:
133 case RISCV::BI__builtin_riscv_cv_alu_adduRN:
134 case RISCV::BI__builtin_riscv_cv_alu_clip:
135 case RISCV::BI__builtin_riscv_cv_alu_clipu:
136 case RISCV::BI__builtin_riscv_cv_alu_extbs:
137 case RISCV::BI__builtin_riscv_cv_alu_extbz:
138 case RISCV::BI__builtin_riscv_cv_alu_exths:
139 case RISCV::BI__builtin_riscv_cv_alu_exthz:
140 case RISCV::BI__builtin_riscv_cv_alu_sle:
141 case RISCV::BI__builtin_riscv_cv_alu_sleu:
142 case RISCV::BI__builtin_riscv_cv_alu_subN:
143 case RISCV::BI__builtin_riscv_cv_alu_subRN:
144 case RISCV::BI__builtin_riscv_cv_alu_subuN:
145 case RISCV::BI__builtin_riscv_cv_alu_subuRN:
147 case RISCV::BI__builtin_riscv_nds_ffb_32:
148 case RISCV::BI__builtin_riscv_nds_ffb_64:
149 case RISCV::BI__builtin_riscv_nds_ffzmism_32:
150 case RISCV::BI__builtin_riscv_nds_ffzmism_64:
151 case RISCV::BI__builtin_riscv_nds_ffmism_32:
152 case RISCV::BI__builtin_riscv_nds_ffmism_64:
153 case RISCV::BI__builtin_riscv_nds_flmism_32:
154 case RISCV::BI__builtin_riscv_nds_flmism_64:
156 case RISCV::BI__builtin_riscv_nds_fcvt_s_bf16:
157 case RISCV::BI__builtin_riscv_nds_fcvt_bf16_s: {
159 std::string(
"unimplemented RISC-V builtin call: ") +
161 return mlir::Value{};
168 return builder.emitIntrinsicCallOp(loc, intrinsicName, returnType, ops);
QualType GetBuiltinType(unsigned ID, GetBuiltinTypeError &Error, unsigned *IntegerConstantArgs=nullptr) const
Return the type for the specified builtin.