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