================
@@ -3732,6 +3732,170 @@ RValue CodeGenFunction::EmitBuiltinExpr(const
GlobalDecl GD, unsigned BuiltinID,
case Builtin::BI_rotr64:
return emitRotate(E, true);
+ case Builtin::BI__builtin_stdc_leading_zeros:
+ case Builtin::BI__builtin_stdc_leading_ones:
+ case Builtin::BI__builtin_stdc_trailing_zeros:
+ case Builtin::BI__builtin_stdc_trailing_ones:
+ case Builtin::BI__builtin_stdc_first_leading_zero:
+ case Builtin::BI__builtin_stdc_first_leading_one:
+ case Builtin::BI__builtin_stdc_first_trailing_zero:
+ case Builtin::BI__builtin_stdc_first_trailing_one:
+ case Builtin::BI__builtin_stdc_count_zeros:
+ case Builtin::BI__builtin_stdc_count_ones:
+ case Builtin::BI__builtin_stdc_has_single_bit:
+ case Builtin::BI__builtin_stdc_bit_width:
+ case Builtin::BI__builtin_stdc_bit_floor:
+ case Builtin::BI__builtin_stdc_bit_ceil: {
+ Value *ArgValue = EmitScalarExpr(E->getArg(0));
+ llvm::Type *ArgType = ArgValue->getType();
+ llvm::Type *ResultType = ConvertType(E->getType());
+ unsigned BitWidth = ArgType->getIntegerBitWidth();
+ Value *Zero = ConstantInt::get(ArgType, 0);
+ Value *One = ConstantInt::get(ArgType, 1);
+ Value *Result;
+
+ switch (BuiltinIDIfNoAsmLabel) {
----------------
erichkeane wrote:
Switching on the SAME types again is awful, we should be figuring out a way to
do this better. One such way would be to do an implementation inside each of
the above 'case' statements, and turn the `get arg value` stuff above, and the
cleanup below into their own functions.
https://github.com/llvm/llvm-project/pull/185978
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits