[clang] [CIR] Lowering __builtin_stdc_* calls (PR #214931)
Kunal Dubey via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 11 12:56:56 PDT 2026
================
@@ -1247,6 +1286,91 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID,
getTarget().isCLZForZeroUndef());
case Builtin::BI__builtin_ctzg:
return emitBuiltinBitOpWithFallback<cir::BitCtzOp>(*this, e);
+ case Builtin::BIstdc_trailing_zeros_uc:
+ case Builtin::BIstdc_trailing_zeros_us:
+ case Builtin::BIstdc_trailing_zeros_ui:
+ case Builtin::BIstdc_trailing_zeros_ul:
+ case Builtin::BIstdc_trailing_zeros_ull:
+ case Builtin::BI__builtin_stdc_trailing_zeros:
+ return emitStdcCountOp<cir::BitCtzOp>(*this, e, /*invertArg=*/false,
+ /*poisonZero=*/false);
+
+ case Builtin::BIstdc_leading_zeros_uc:
+ case Builtin::BIstdc_leading_zeros_us:
+ case Builtin::BIstdc_leading_zeros_ui:
+ case Builtin::BIstdc_leading_zeros_ul:
+ case Builtin::BIstdc_leading_zeros_ull:
+ case Builtin::BI__builtin_stdc_leading_zeros:
+ return emitStdcCountOp<cir::BitClzOp>(*this, e, /*invertArg=*/false,
+ /*poisonZero=*/false);
+
+ case Builtin::BIstdc_trailing_ones_uc:
+ case Builtin::BIstdc_trailing_ones_us:
+ case Builtin::BIstdc_trailing_ones_ui:
+ case Builtin::BIstdc_trailing_ones_ul:
+ case Builtin::BIstdc_trailing_ones_ull:
+ case Builtin::BI__builtin_stdc_trailing_ones:
+ return emitStdcCountOp<cir::BitCtzOp>(*this, e, /*invertArg=*/true,
+ /*poisonZero=*/false);
+
+ case Builtin::BIstdc_leading_ones_uc:
+ case Builtin::BIstdc_leading_ones_us:
+ case Builtin::BIstdc_leading_ones_ui:
+ case Builtin::BIstdc_leading_ones_ul:
+ case Builtin::BIstdc_leading_ones_ull:
+ case Builtin::BI__builtin_stdc_leading_ones:
+ return emitStdcCountOp<cir::BitClzOp>(*this, e, /*invertArg=*/true,
+ /*poisonZero=*/false);
+
+ case Builtin::BIstdc_bit_width_uc:
+ case Builtin::BIstdc_bit_width_us:
+ case Builtin::BIstdc_bit_width_ui:
+ case Builtin::BIstdc_bit_width_ul:
+ case Builtin::BIstdc_bit_width_ull:
+ case Builtin::BI__builtin_stdc_bit_width:
+ return emitStdcBitWidthMinus<cir::BitClzOp>(*this, e,
+ /*poisonZero=*/false);
+
+ case Builtin::BIstdc_count_zeros_uc:
+ case Builtin::BIstdc_count_zeros_us:
+ case Builtin::BIstdc_count_zeros_ui:
+ case Builtin::BIstdc_count_zeros_ul:
+ case Builtin::BIstdc_count_zeros_ull:
+ case Builtin::BI__builtin_stdc_count_zeros:
+ return emitStdcBitWidthMinus<cir::BitPopcountOp>(*this, e);
+
+ case Builtin::BIstdc_count_ones_uc:
+ case Builtin::BIstdc_count_ones_us:
+ case Builtin::BIstdc_count_ones_ui:
+ case Builtin::BIstdc_count_ones_ul:
+ case Builtin::BIstdc_count_ones_ull:
+ case Builtin::BI__builtin_stdc_count_ones:
+ return emitStdcCountOp<cir::BitPopcountOp>(*this, e,
+ /*invertArg=*/false);
+
+ case Builtin::BIstdc_has_single_bit_uc:
----------------
xakep8 wrote:
added a helper for calling cgm.errorNYI rather than directly adding to the switch case body.
https://github.com/llvm/llvm-project/pull/214931
More information about the cfe-commits
mailing list