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