@@ -2937,12 +2937,21 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
29372937 &getTarget().getLongDoubleFormat() == &llvm::APFloat::IEEEquad())
29382938 BuiltinID = mutateLongDoubleBuiltin(BuiltinID);
29392939
2940- // If the builtin has been declared explicitly with an assembler label,
2941- // disable the specialized emitting below. Ideally we should communicate the
2942- // rename in IR, or at least avoid generating the intrinsic calls that are
2943- // likely to get lowered to the renamed library functions.
2944- const unsigned BuiltinIDIfNoAsmLabel =
2945- FD->hasAttr<AsmLabelAttr>() ? 0 : BuiltinID;
2940+ const unsigned BuiltinIDIfEmitIntrinsics = [&] {
2941+ // If the builtin has been declared explicitly with an assembler label,
2942+ // disable the specialized emitting below. Ideally we should communicate the
2943+ // rename in IR, or at least avoid generating the intrinsic calls that are
2944+ // likely to get lowered to the renamed library functions.
2945+ if (FD->hasAttr<AsmLabelAttr>())
2946+ return 0U;
2947+
2948+ // If the target requests not to use intrinsics for a builtin, disable the
2949+ // specialized emitting below.
2950+ if (!getTargetHooks().shouldUseIntrinsicsForBuiltin(BuiltinID))
2951+ return 0U;
2952+
2953+ return BuiltinID;
2954+ }();
29462955
29472956 std::optional<bool> ErrnoOverriden;
29482957 // ErrnoOverriden is true if math-errno is overriden via the
@@ -3035,7 +3044,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
30353044 ConstWithoutErrnoOrExceptions && ErrnoOverridenToFalseWithOpt;
30363045 }
30373046 if (GenerateIntrinsics) {
3038- switch (BuiltinIDIfNoAsmLabel ) {
3047+ switch (BuiltinIDIfEmitIntrinsics ) {
30393048 case Builtin::BIacos:
30403049 case Builtin::BIacosf:
30413050 case Builtin::BIacosl:
@@ -3515,7 +3524,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
35153524 }
35163525 };
35173526
3518- switch (BuiltinIDIfNoAsmLabel ) {
3527+ switch (BuiltinIDIfEmitIntrinsics ) {
35193528 default: break;
35203529 case Builtin::BI__builtin___CFStringMakeConstantString:
35213530 case Builtin::BI__builtin___NSStringMakeConstantString:
@@ -3645,7 +3654,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
36453654 case Builtin::BI__builtin_ctzl:
36463655 case Builtin::BI__builtin_ctzll:
36473656 case Builtin::BI__builtin_ctzg: {
3648- bool HasFallback = BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_ctzg &&
3657+ bool HasFallback = BuiltinIDIfEmitIntrinsics == Builtin::BI__builtin_ctzg &&
36493658 E->getNumArgs() > 1;
36503659
36513660 Value *ArgValue =
@@ -3677,7 +3686,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
36773686 case Builtin::BI__builtin_clzl:
36783687 case Builtin::BI__builtin_clzll:
36793688 case Builtin::BI__builtin_clzg: {
3680- bool HasFallback = BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_clzg &&
3689+ bool HasFallback = BuiltinIDIfEmitIntrinsics == Builtin::BI__builtin_clzg &&
36813690 E->getNumArgs() > 1;
36823691
36833692 Value *ArgValue =
@@ -4347,7 +4356,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
43474356 Ty = VecTy->getElementType();
43484357 bool IsSigned = Ty->isSignedIntegerType();
43494358 unsigned Opc;
4350- if (BuiltinIDIfNoAsmLabel == Builtin::BI__builtin_elementwise_add_sat)
4359+ if (BuiltinIDIfEmitIntrinsics == Builtin::BI__builtin_elementwise_add_sat)
43514360 Opc = IsSigned ? llvm::Intrinsic::sadd_sat : llvm::Intrinsic::uadd_sat;
43524361 else
43534362 Opc = IsSigned ? llvm::Intrinsic::ssub_sat : llvm::Intrinsic::usub_sat;
0 commit comments