@@ -3770,14 +3770,22 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
3770
3770
Ops[0 ], cir::VectorType::get (&getMLIRContext (), DoubleTy, 2 ));
3771
3771
return builder.create <cir::VecExtractOp>(getLoc (E->getExprLoc ()), Ops[0 ],
3772
3772
emitScalarExpr (E->getArg (1 )));
3773
- case NEON::BI__builtin_neon_vaddh_f16:
3774
- llvm_unreachable (" NEON::BI__builtin_neon_vaddh_f16 NYI" );
3775
- case NEON::BI__builtin_neon_vsubh_f16:
3776
- llvm_unreachable (" NEON::BI__builtin_neon_vsubh_f16 NYI" );
3777
- case NEON::BI__builtin_neon_vmulh_f16:
3778
- llvm_unreachable (" NEON::BI__builtin_neon_vmulh_f16 NYI" );
3779
- case NEON::BI__builtin_neon_vdivh_f16:
3780
- llvm_unreachable (" NEON::BI__builtin_neon_vdivh_f16 NYI" );
3773
+ case NEON::BI__builtin_neon_vaddh_f16: {
3774
+ Ops.push_back (emitScalarExpr (E->getArg (1 )));
3775
+ return builder.createFAdd (Ops[0 ], Ops[1 ]);
3776
+ }
3777
+ case NEON::BI__builtin_neon_vsubh_f16: {
3778
+ Ops.push_back (emitScalarExpr (E->getArg (1 )));
3779
+ return builder.createFSub (Ops[0 ], Ops[1 ]);
3780
+ }
3781
+ case NEON::BI__builtin_neon_vmulh_f16: {
3782
+ Ops.push_back (emitScalarExpr (E->getArg (1 )));
3783
+ return builder.createFMul (Ops[0 ], Ops[1 ]);
3784
+ }
3785
+ case NEON::BI__builtin_neon_vdivh_f16: {
3786
+ Ops.push_back (emitScalarExpr (E->getArg (1 )));
3787
+ return builder.createFDiv (Ops[0 ], Ops[1 ]);
3788
+ }
3781
3789
case NEON::BI__builtin_neon_vfmah_f16:
3782
3790
// NEON intrinsic puts accumulator first, unlike the LLVM fma.
3783
3791
llvm_unreachable (" NEON::BI__builtin_neon_vfmah_f16 NYI" );
0 commit comments