27 case WebAssembly::BI__builtin_wasm_memory_size: {
31 CGM.getIntrinsic(Intrinsic::wasm_memory_size, ResultType);
32 return Builder.CreateCall(Callee, I);
34 case WebAssembly::BI__builtin_wasm_memory_grow: {
39 CGM.getIntrinsic(Intrinsic::wasm_memory_grow, ResultType);
40 return Builder.CreateCall(Callee, Args);
42 case WebAssembly::BI__builtin_wasm_memory_copy: {
49 CGM.getIntrinsic(Intrinsic::wasm_memory_copy, Size->getType());
50 return Builder.CreateCall(Callee, {DstMem, SrcMem, Dst, Src, Size});
52 case WebAssembly::BI__builtin_wasm_memory_fill: {
58 CGM.getIntrinsic(Intrinsic::wasm_memory_fill, Size->getType());
59 return Builder.CreateCall(Callee, {Mem, Dst, Val, Size});
61 case WebAssembly::BI__builtin_wasm_tls_size: {
63 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_tls_size, ResultType);
64 return Builder.CreateCall(Callee);
66 case WebAssembly::BI__builtin_wasm_tls_align: {
68 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_tls_align, ResultType);
69 return Builder.CreateCall(Callee);
71 case WebAssembly::BI__builtin_wasm_tls_base: {
72 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_tls_base);
73 return Builder.CreateCall(Callee);
75 case WebAssembly::BI__builtin_wasm_throw: {
78 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_throw);
81 case WebAssembly::BI__builtin_wasm_rethrow: {
82 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_rethrow);
85 case WebAssembly::BI__builtin_wasm_memory_atomic_wait32: {
89 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_memory_atomic_wait32);
92 case WebAssembly::BI__builtin_wasm_memory_atomic_wait64: {
96 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_memory_atomic_wait64);
99 case WebAssembly::BI__builtin_wasm_memory_atomic_notify: {
102 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_memory_atomic_notify);
105 case WebAssembly::BI__builtin_wasm_trunc_s_i32_f32:
106 case WebAssembly::BI__builtin_wasm_trunc_s_i32_f64:
107 case WebAssembly::BI__builtin_wasm_trunc_s_i64_f32:
108 case WebAssembly::BI__builtin_wasm_trunc_s_i64_f64: {
112 CGM.getIntrinsic(Intrinsic::wasm_trunc_signed, {ResT, Src->
getType()});
113 return Builder.CreateCall(Callee, {Src});
115 case WebAssembly::BI__builtin_wasm_trunc_u_i32_f32:
116 case WebAssembly::BI__builtin_wasm_trunc_u_i32_f64:
117 case WebAssembly::BI__builtin_wasm_trunc_u_i64_f32:
118 case WebAssembly::BI__builtin_wasm_trunc_u_i64_f64: {
121 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_trunc_unsigned,
123 return Builder.CreateCall(Callee, {Src});
125 case WebAssembly::BI__builtin_wasm_trunc_saturate_s_i32_f32:
126 case WebAssembly::BI__builtin_wasm_trunc_saturate_s_i32_f64:
127 case WebAssembly::BI__builtin_wasm_trunc_saturate_s_i64_f32:
128 case WebAssembly::BI__builtin_wasm_trunc_saturate_s_i64_f64:
129 case WebAssembly::BI__builtin_wasm_trunc_saturate_s_i16x8_f16x8:
130 case WebAssembly::BI__builtin_wasm_trunc_saturate_s_i32x4_f32x4: {
134 CGM.getIntrinsic(Intrinsic::fptosi_sat, {ResT, Src->
getType()});
135 return Builder.CreateCall(Callee, {Src});
137 case WebAssembly::BI__builtin_wasm_trunc_saturate_u_i32_f32:
138 case WebAssembly::BI__builtin_wasm_trunc_saturate_u_i32_f64:
139 case WebAssembly::BI__builtin_wasm_trunc_saturate_u_i64_f32:
140 case WebAssembly::BI__builtin_wasm_trunc_saturate_u_i64_f64:
141 case WebAssembly::BI__builtin_wasm_trunc_saturate_u_i16x8_f16x8:
142 case WebAssembly::BI__builtin_wasm_trunc_saturate_u_i32x4_f32x4: {
146 CGM.getIntrinsic(Intrinsic::fptoui_sat, {ResT, Src->
getType()});
147 return Builder.CreateCall(Callee, {Src});
149 case WebAssembly::BI__builtin_wasm_min_f32:
150 case WebAssembly::BI__builtin_wasm_min_f64:
151 case WebAssembly::BI__builtin_wasm_min_f16x8:
152 case WebAssembly::BI__builtin_wasm_min_f32x4:
153 case WebAssembly::BI__builtin_wasm_min_f64x2: {
158 return Builder.CreateCall(Callee, {LHS, RHS});
160 case WebAssembly::BI__builtin_wasm_max_f32:
161 case WebAssembly::BI__builtin_wasm_max_f64:
162 case WebAssembly::BI__builtin_wasm_max_f16x8:
163 case WebAssembly::BI__builtin_wasm_max_f32x4:
164 case WebAssembly::BI__builtin_wasm_max_f64x2: {
169 return Builder.CreateCall(Callee, {LHS, RHS});
171 case WebAssembly::BI__builtin_wasm_pmin_f16x8:
172 case WebAssembly::BI__builtin_wasm_pmin_f32x4:
173 case WebAssembly::BI__builtin_wasm_pmin_f64x2: {
178 return Builder.CreateCall(Callee, {LHS, RHS});
180 case WebAssembly::BI__builtin_wasm_pmax_f16x8:
181 case WebAssembly::BI__builtin_wasm_pmax_f32x4:
182 case WebAssembly::BI__builtin_wasm_pmax_f64x2: {
187 return Builder.CreateCall(Callee, {LHS, RHS});
189 case WebAssembly::BI__builtin_wasm_ceil_f16x8:
190 case WebAssembly::BI__builtin_wasm_floor_f16x8:
191 case WebAssembly::BI__builtin_wasm_trunc_f16x8:
192 case WebAssembly::BI__builtin_wasm_nearest_f16x8:
193 case WebAssembly::BI__builtin_wasm_ceil_f32x4:
194 case WebAssembly::BI__builtin_wasm_floor_f32x4:
195 case WebAssembly::BI__builtin_wasm_trunc_f32x4:
196 case WebAssembly::BI__builtin_wasm_nearest_f32x4:
197 case WebAssembly::BI__builtin_wasm_ceil_f64x2:
198 case WebAssembly::BI__builtin_wasm_floor_f64x2:
199 case WebAssembly::BI__builtin_wasm_trunc_f64x2:
200 case WebAssembly::BI__builtin_wasm_nearest_f64x2: {
203 case WebAssembly::BI__builtin_wasm_ceil_f16x8:
204 case WebAssembly::BI__builtin_wasm_ceil_f32x4:
205 case WebAssembly::BI__builtin_wasm_ceil_f64x2:
206 IntNo = Intrinsic::ceil;
208 case WebAssembly::BI__builtin_wasm_floor_f16x8:
209 case WebAssembly::BI__builtin_wasm_floor_f32x4:
210 case WebAssembly::BI__builtin_wasm_floor_f64x2:
211 IntNo = Intrinsic::floor;
213 case WebAssembly::BI__builtin_wasm_trunc_f16x8:
214 case WebAssembly::BI__builtin_wasm_trunc_f32x4:
215 case WebAssembly::BI__builtin_wasm_trunc_f64x2:
216 IntNo = Intrinsic::trunc;
218 case WebAssembly::BI__builtin_wasm_nearest_f16x8:
219 case WebAssembly::BI__builtin_wasm_nearest_f32x4:
220 case WebAssembly::BI__builtin_wasm_nearest_f64x2:
221 IntNo = Intrinsic::nearbyint;
224 llvm_unreachable(
"unexpected builtin ID");
230 case WebAssembly::BI__builtin_wasm_ref_null_extern: {
231 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_ref_null_extern);
232 return Builder.CreateCall(Callee);
234 case WebAssembly::BI__builtin_wasm_ref_is_null_extern: {
236 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_ref_is_null_extern);
237 return Builder.CreateCall(Callee, {Src});
239 case WebAssembly::BI__builtin_wasm_ref_null_func: {
240 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_ref_null_func);
241 return Builder.CreateCall(Callee);
243 case WebAssembly::BI__builtin_wasm_test_function_pointer_signature: {
249 assert(PtrTy &&
"Sema should have ensured this is a function pointer");
252 assert(FuncTy &&
"Sema should have ensured this is a function pointer");
265 llvm::FunctionType *LLVMFuncTy =
268 bool VarArg = LLVMFuncTy->isVarArg();
269 unsigned NParams = LLVMFuncTy->getNumParams();
270 std::vector<Value *> Args;
271 Args.reserve(NParams + 3 + VarArg);
273 Args.push_back(FuncRef);
276 llvm::Type *RetType = LLVMFuncTy->getReturnType();
277 if (!RetType->isVoidTy()) {
278 Args.push_back(PoisonValue::get(RetType));
282 Args.push_back(PoisonValue::get(llvm::Type::getTokenTy(
getLLVMContext())));
283 for (
unsigned i = 0; i < NParams; i++) {
284 Args.push_back(PoisonValue::get(LLVMFuncTy->getParamType(i)));
287 Args.push_back(PoisonValue::get(
Builder.getPtrTy()));
289 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_ref_test_func);
290 return Builder.CreateCall(Callee, Args);
292 case WebAssembly::BI__builtin_wasm_swizzle_i8x16: {
295 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_swizzle);
296 return Builder.CreateCall(Callee, {Src, Indices});
298 case WebAssembly::BI__builtin_wasm_abs_i8x16:
299 case WebAssembly::BI__builtin_wasm_abs_i16x8:
300 case WebAssembly::BI__builtin_wasm_abs_i32x4:
301 case WebAssembly::BI__builtin_wasm_abs_i64x2: {
306 return Builder.CreateSelect(ICmp, Neg, Vec,
"abs");
308 case WebAssembly::BI__builtin_wasm_avgr_u_i8x16:
309 case WebAssembly::BI__builtin_wasm_avgr_u_i16x8: {
312 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_avgr_unsigned,
314 return Builder.CreateCall(Callee, {LHS, RHS});
316 case WebAssembly::BI__builtin_wasm_q15mulr_sat_s_i16x8: {
319 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_q15mulr_sat_signed);
320 return Builder.CreateCall(Callee, {LHS, RHS});
322 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i8x16_s_i16x8:
323 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i8x16_u_i16x8:
324 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i16x8_s_i32x4:
325 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i16x8_u_i32x4: {
329 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i8x16_s_i16x8:
330 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i16x8_s_i32x4:
331 IntNo = Intrinsic::wasm_extadd_pairwise_signed;
333 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i8x16_u_i16x8:
334 case WebAssembly::BI__builtin_wasm_extadd_pairwise_i16x8_u_i32x4:
335 IntNo = Intrinsic::wasm_extadd_pairwise_unsigned;
338 llvm_unreachable(
"unexpected builtin ID");
342 return Builder.CreateCall(Callee, Vec);
344 case WebAssembly::BI__builtin_wasm_bitselect: {
350 return Builder.CreateCall(Callee, {V1, V2,
C});
352 case WebAssembly::BI__builtin_wasm_dot_s_i32x4_i16x8: {
355 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_dot);
356 return Builder.CreateCall(Callee, {LHS, RHS});
358 case WebAssembly::BI__builtin_wasm_any_true_v128:
359 case WebAssembly::BI__builtin_wasm_all_true_i8x16:
360 case WebAssembly::BI__builtin_wasm_all_true_i16x8:
361 case WebAssembly::BI__builtin_wasm_all_true_i32x4:
362 case WebAssembly::BI__builtin_wasm_all_true_i64x2: {
365 case WebAssembly::BI__builtin_wasm_any_true_v128:
366 IntNo = Intrinsic::wasm_anytrue;
368 case WebAssembly::BI__builtin_wasm_all_true_i8x16:
369 case WebAssembly::BI__builtin_wasm_all_true_i16x8:
370 case WebAssembly::BI__builtin_wasm_all_true_i32x4:
371 case WebAssembly::BI__builtin_wasm_all_true_i64x2:
372 IntNo = Intrinsic::wasm_alltrue;
375 llvm_unreachable(
"unexpected builtin ID");
379 return Builder.CreateCall(Callee, {Vec});
381 case WebAssembly::BI__builtin_wasm_bitmask_i8x16:
382 case WebAssembly::BI__builtin_wasm_bitmask_i16x8:
383 case WebAssembly::BI__builtin_wasm_bitmask_i32x4:
384 case WebAssembly::BI__builtin_wasm_bitmask_i64x2: {
387 CGM.getIntrinsic(Intrinsic::wasm_bitmask, Vec->
getType());
388 return Builder.CreateCall(Callee, {Vec});
390 case WebAssembly::BI__builtin_wasm_abs_f16x8:
391 case WebAssembly::BI__builtin_wasm_abs_f32x4:
392 case WebAssembly::BI__builtin_wasm_abs_f64x2: {
394 return Builder.CreateFAbs(Vec);
396 case WebAssembly::BI__builtin_wasm_sqrt_f16x8:
397 case WebAssembly::BI__builtin_wasm_sqrt_f32x4:
398 case WebAssembly::BI__builtin_wasm_sqrt_f64x2: {
401 return Builder.CreateCall(Callee, {Vec});
403 case WebAssembly::BI__builtin_wasm_narrow_s_i8x16_i16x8:
404 case WebAssembly::BI__builtin_wasm_narrow_u_i8x16_i16x8:
405 case WebAssembly::BI__builtin_wasm_narrow_s_i16x8_i32x4:
406 case WebAssembly::BI__builtin_wasm_narrow_u_i16x8_i32x4: {
411 case WebAssembly::BI__builtin_wasm_narrow_s_i8x16_i16x8:
412 case WebAssembly::BI__builtin_wasm_narrow_s_i16x8_i32x4:
413 IntNo = Intrinsic::wasm_narrow_signed;
415 case WebAssembly::BI__builtin_wasm_narrow_u_i8x16_i16x8:
416 case WebAssembly::BI__builtin_wasm_narrow_u_i16x8_i32x4:
417 IntNo = Intrinsic::wasm_narrow_unsigned;
420 llvm_unreachable(
"unexpected builtin ID");
424 return Builder.CreateCall(Callee, {Low, High});
426 case WebAssembly::BI__builtin_wasm_trunc_sat_s_zero_f64x2_i32x4:
427 case WebAssembly::BI__builtin_wasm_trunc_sat_u_zero_f64x2_i32x4: {
431 case WebAssembly::BI__builtin_wasm_trunc_sat_s_zero_f64x2_i32x4:
432 IntNo = Intrinsic::fptosi_sat;
434 case WebAssembly::BI__builtin_wasm_trunc_sat_u_zero_f64x2_i32x4:
435 IntNo = Intrinsic::fptoui_sat;
438 llvm_unreachable(
"unexpected builtin ID");
440 llvm::Type *SrcT = Vec->
getType();
441 llvm::Type *TruncT = SrcT->getWithNewType(
Builder.getInt32Ty());
442 Function *Callee =
CGM.getIntrinsic(IntNo, {TruncT, SrcT});
444 Value *Splat = Constant::getNullValue(TruncT);
445 return Builder.CreateShuffleVector(Trunc, Splat, {0, 1, 2, 3});
447 case WebAssembly::BI__builtin_wasm_shuffle_i8x16: {
453 std::optional<llvm::APSInt> LaneConst =
455 assert(LaneConst &&
"Constant arg isn't actually constant?");
456 Ops[OpIdx++] = llvm::ConstantInt::get(
getLLVMContext(), *LaneConst);
458 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_shuffle);
459 return Builder.CreateCall(Callee, Ops);
461 case WebAssembly::BI__builtin_wasm_relaxed_madd_f16x8:
462 case WebAssembly::BI__builtin_wasm_relaxed_nmadd_f16x8:
463 case WebAssembly::BI__builtin_wasm_relaxed_madd_f32x4:
464 case WebAssembly::BI__builtin_wasm_relaxed_nmadd_f32x4:
465 case WebAssembly::BI__builtin_wasm_relaxed_madd_f64x2:
466 case WebAssembly::BI__builtin_wasm_relaxed_nmadd_f64x2: {
472 case WebAssembly::BI__builtin_wasm_relaxed_madd_f16x8:
473 case WebAssembly::BI__builtin_wasm_relaxed_madd_f32x4:
474 case WebAssembly::BI__builtin_wasm_relaxed_madd_f64x2:
475 IntNo = Intrinsic::wasm_relaxed_madd;
477 case WebAssembly::BI__builtin_wasm_relaxed_nmadd_f16x8:
478 case WebAssembly::BI__builtin_wasm_relaxed_nmadd_f32x4:
479 case WebAssembly::BI__builtin_wasm_relaxed_nmadd_f64x2:
480 IntNo = Intrinsic::wasm_relaxed_nmadd;
483 llvm_unreachable(
"unexpected builtin ID");
486 return Builder.CreateCall(Callee, {A, B,
C});
488 case WebAssembly::BI__builtin_wasm_relaxed_laneselect_i8x16:
489 case WebAssembly::BI__builtin_wasm_relaxed_laneselect_i16x8:
490 case WebAssembly::BI__builtin_wasm_relaxed_laneselect_i32x4:
491 case WebAssembly::BI__builtin_wasm_relaxed_laneselect_i64x2: {
496 CGM.getIntrinsic(Intrinsic::wasm_relaxed_laneselect, A->
getType());
497 return Builder.CreateCall(Callee, {A, B,
C});
499 case WebAssembly::BI__builtin_wasm_relaxed_swizzle_i8x16: {
502 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_relaxed_swizzle);
503 return Builder.CreateCall(Callee, {Src, Indices});
505 case WebAssembly::BI__builtin_wasm_relaxed_min_f32x4:
506 case WebAssembly::BI__builtin_wasm_relaxed_max_f32x4:
507 case WebAssembly::BI__builtin_wasm_relaxed_min_f64x2:
508 case WebAssembly::BI__builtin_wasm_relaxed_max_f64x2: {
513 case WebAssembly::BI__builtin_wasm_relaxed_min_f32x4:
514 case WebAssembly::BI__builtin_wasm_relaxed_min_f64x2:
515 IntNo = Intrinsic::wasm_relaxed_min;
517 case WebAssembly::BI__builtin_wasm_relaxed_max_f32x4:
518 case WebAssembly::BI__builtin_wasm_relaxed_max_f64x2:
519 IntNo = Intrinsic::wasm_relaxed_max;
522 llvm_unreachable(
"unexpected builtin ID");
525 return Builder.CreateCall(Callee, {LHS, RHS});
527 case WebAssembly::BI__builtin_wasm_relaxed_trunc_s_i32x4_f32x4:
528 case WebAssembly::BI__builtin_wasm_relaxed_trunc_u_i32x4_f32x4:
529 case WebAssembly::BI__builtin_wasm_relaxed_trunc_s_zero_i32x4_f64x2:
530 case WebAssembly::BI__builtin_wasm_relaxed_trunc_u_zero_i32x4_f64x2: {
534 case WebAssembly::BI__builtin_wasm_relaxed_trunc_s_i32x4_f32x4:
535 IntNo = Intrinsic::wasm_relaxed_trunc_signed;
537 case WebAssembly::BI__builtin_wasm_relaxed_trunc_u_i32x4_f32x4:
538 IntNo = Intrinsic::wasm_relaxed_trunc_unsigned;
540 case WebAssembly::BI__builtin_wasm_relaxed_trunc_s_zero_i32x4_f64x2:
541 IntNo = Intrinsic::wasm_relaxed_trunc_signed_zero;
543 case WebAssembly::BI__builtin_wasm_relaxed_trunc_u_zero_i32x4_f64x2:
544 IntNo = Intrinsic::wasm_relaxed_trunc_unsigned_zero;
547 llvm_unreachable(
"unexpected builtin ID");
550 return Builder.CreateCall(Callee, {Vec});
552 case WebAssembly::BI__builtin_wasm_relaxed_q15mulr_s_i16x8: {
555 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_relaxed_q15mulr_signed);
556 return Builder.CreateCall(Callee, {LHS, RHS});
558 case WebAssembly::BI__builtin_wasm_relaxed_dot_i8x16_i7x16_s_i16x8: {
562 CGM.getIntrinsic(Intrinsic::wasm_relaxed_dot_i8x16_i7x16_signed);
563 return Builder.CreateCall(Callee, {LHS, RHS});
565 case WebAssembly::BI__builtin_wasm_relaxed_dot_i8x16_i7x16_add_s_i32x4: {
570 CGM.getIntrinsic(Intrinsic::wasm_relaxed_dot_i8x16_i7x16_add_signed);
571 return Builder.CreateCall(Callee, {LHS, RHS, Acc});
573 case WebAssembly::BI__builtin_wasm_relaxed_dot_bf16x8_add_f32_f32x4: {
578 CGM.getIntrinsic(Intrinsic::wasm_relaxed_dot_bf16x8_add_f32);
579 return Builder.CreateCall(Callee, {LHS, RHS, Acc});
581 case WebAssembly::BI__builtin_wasm_loadf16_f32: {
583 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_loadf16_f32);
586 case WebAssembly::BI__builtin_wasm_storef16_f32: {
589 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_storef16_f32);
592 case WebAssembly::BI__builtin_wasm_splat_f16x8: {
594 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_splat_f16x8);
595 return Builder.CreateCall(Callee, {Val});
597 case WebAssembly::BI__builtin_wasm_extract_lane_f16x8: {
600 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_extract_lane_f16x8);
603 case WebAssembly::BI__builtin_wasm_replace_lane_f16x8: {
607 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_replace_lane_f16x8);
610 case WebAssembly::BI__builtin_wasm_table_get: {
616 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_get_externref);
618 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_get_funcref);
621 "Unexpected reference type for __builtin_wasm_table_get");
622 return Builder.CreateCall(Callee, {Table, Index});
624 case WebAssembly::BI__builtin_wasm_table_set: {
631 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_set_externref);
633 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_set_funcref);
636 "Unexpected reference type for __builtin_wasm_table_set");
637 return Builder.CreateCall(Callee, {Table, Index, Val});
639 case WebAssembly::BI__builtin_wasm_table_size: {
642 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_size);
645 case WebAssembly::BI__builtin_wasm_table_grow: {
653 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_grow_externref);
655 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_grow_funcref);
658 "Unexpected reference type for __builtin_wasm_table_grow");
660 return Builder.CreateCall(Callee, {Table, Val, NElems});
662 case WebAssembly::BI__builtin_wasm_table_fill: {
671 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_fill_externref);
673 Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_fill_funcref);
676 "Unexpected reference type for __builtin_wasm_table_fill");
678 return Builder.CreateCall(Callee, {Table, Index, Val, NElems});
680 case WebAssembly::BI__builtin_wasm_table_copy: {
688 Function *Callee =
CGM.getIntrinsic(Intrinsic::wasm_table_copy);
690 return Builder.CreateCall(Callee, {TableX, TableY, SrcIdx, DstIdx, NElems});