[clang] [llvm] [HLSL] implement elementwise firstbithigh hlsl builtin (PR #111082)

Justin Bogner via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 4 11:19:05 PDT 2024


================
@@ -564,6 +564,30 @@ def CBits :  DXILOp<31, unary> {
   let attributes = [Attributes<DXIL1_0, [ReadNone]>];
 }
 
+def FBH :  DXILOp<33, unary> {
+  let Doc = "Returns the location of the first set bit starting from "
+            "the highest order bit and working downward.";
+  let LLVMIntrinsic = int_dx_firstbituhigh;
+  let arguments = [OverloadTy];
+  let result = OverloadTy;
+  let overloads =
+      [Overloads<DXIL1_0, [Int16Ty, Int32Ty, Int64Ty]>];
+  let stages = [Stages<DXIL1_0, [all_stages]>];
+  let attributes = [Attributes<DXIL1_0, [ReadNone]>];
+}
+
+def FBSH :  DXILOp<34, unary> {
+  let Doc = "Returns the location of the first set bit from "
+            "the highest order bit based on the sign.";
+  let LLVMIntrinsic = int_dx_firstbitshigh;
+  let arguments = [OverloadTy];
+  let result = OverloadTy;
+  let overloads =
+      [Overloads<DXIL1_0, [Int16Ty, Int32Ty, Int64Ty]>];
+  let stages = [Stages<DXIL1_0, [all_stages]>];
+  let attributes = [Attributes<DXIL1_0, [ReadNone]>];
+}
----------------
bogner wrote:

A few things here:
1. Please name these with the full names of the dxil ops, `FirstbitHi` and `FirstbitSHi`
2. These need to use `unaryBits` for the `OpClass`, not `unary`
3. [The result type should be i32](https://github.com/microsoft/DirectXShaderCompiler/blob/release-1.8.2407/utils/hct/hctdb.py#L1410), not `OverloadTy`

I'll also that this overload set does match dxc, as indicated by ["wil"](https://github.com/microsoft/DirectXShaderCompiler/blob/release-1.8.2407/utils/hct/hctdb.py#L1407) in hctdb.py, but I'm not entirely convinced that dxc does the right thing for i16 or i64. For instance, in https://hlsl.godbolt.org/z/cE1sahjKa there's no way that could return a meaningful result. That said, it's probably fine to allow i16 and i64 match dxc, as least for now.

https://github.com/llvm/llvm-project/pull/111082


More information about the cfe-commits mailing list