================ @@ -10779,6 +10779,70 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, return Load; } + if (BuiltinID == AArch64::BI_CopyDoubleFromInt64 || + BuiltinID == AArch64::BI_CopyFloatFromInt32 || + BuiltinID == AArch64::BI_CopyInt32FromFloat || + BuiltinID == AArch64::BI_CopyInt64FromDouble) { + Value *Arg = EmitScalarExpr(E->getArg(0)); + llvm::Type *RetTy = ConvertType(E->getType()); + return Builder.CreateBitCast(Arg, RetTy); + } + + if (BuiltinID == AArch64::BI_CountLeadingOnes || + BuiltinID == AArch64::BI_CountLeadingOnes64 || + BuiltinID == AArch64::BI_CountLeadingZeros || + BuiltinID == AArch64::BI_CountLeadingZeros64) { + Value *Arg = EmitScalarExpr(E->getArg(0)); + llvm::Type *ArgType = Arg->getType(); + + if (BuiltinID == AArch64::BI_CountLeadingOnes || + BuiltinID == AArch64::BI_CountLeadingOnes64) + Arg = Builder.CreateXor(Arg, Constant::getAllOnesValue(ArgType)); + + Function *F = CGM.getIntrinsic(Intrinsic::ctlz, ArgType); + Value *Result = Builder.CreateCall(F, {Arg, Builder.getInt1(false)}); + + if (BuiltinID == AArch64::BI_CountLeadingOnes64 || + BuiltinID == AArch64::BI_CountLeadingZeros64) + Result = Builder.CreateTrunc(Result, Builder.getInt32Ty()); + return Result; + } + + if (BuiltinID == AArch64::BI_CountLeadingSigns || + BuiltinID == AArch64::BI_CountLeadingSigns64) { + Value *Arg = EmitScalarExpr(E->getArg(0)); + llvm::Type *ArgType = Arg->getType(); + + Function *F; + if (BuiltinID == AArch64::BI_CountLeadingSigns) { + F = CGM.getIntrinsic(Intrinsic::aarch64_cls); + if (ArgType != Builder.getInt32Ty()) ---------------- amykhuang wrote:
Yep, thanks. https://github.com/llvm/llvm-project/pull/66554 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits