craig.topper added a comment. The "B extension" terminology no longer exists.
================ Comment at: clang/include/clang/Basic/BuiltinsRISCV.def:29 +TARGET_BUILTIN(__builtin_riscv_cpopw_64, "WiWi", "nc", "zbb,64bit") +TARGET_BUILTIN(__builtin_riscv_ctz_32, "ZiZi", "nc", "zbb") +TARGET_BUILTIN(__builtin_riscv_ctz_64, "WiWi", "nc", "zbb,64bit") ---------------- The only ones of these we need is ctz_32 and ctz_64 and they should be implemented the same as clz_32/clz_64. I guess we might also need max_32/max_64/maxu_32/maxu_64/min_32/min_64/minu_32/minu_64 for -O0. For -O1 and above `(x > y) ? x : y` already works. They can use the existing llvm.smax/smin/umax/umin intrinsics. andn can be represented directly in C with X & ~Y orn is X | ~Y cpop_32 is __builtin_popcount cpop_64 is __builtin_popcountll clzw_32 is __builtin_riscv_clz_32 sign extended to 64 bits. Similar for ctzw_64. ================ Comment at: llvm/include/llvm/IR/IntrinsicsRISCV.td:90 def int_riscv_orc_b : BitManipGPRIntrinsics; + def int_riscv_andn : BitManipGPRGPRGRIntrinsics; + def int_riscv_clzw : BitManipGPRIntrinsics; ---------------- We don't need any of these intrinsics. Max already has llvm.smax and llvm.umax. clzw is (signext (llvm.cltz)) cpop is llvm.ctpop cpopw is (signext (llvm.ctpop)) andn is (and X, (not Y)) orn is (or X, (not Y)) ctz is llvm.ctlz Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D124348/new/ https://reviews.llvm.org/D124348 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits