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

Reply via email to