================
@@ -2661,6 +2661,45 @@ def BitPopcountOp : CIR_BitOpBase<"bit.popcnt",
   }];
 }
 
+def BitReverseOp : CIR_BitOpBase<"bit.reverse",
+                                 CIR_UIntOfWidths<[8, 16, 32, 64]>> {
+  let summary = "Reverse the bit pattern of the operand integer";
+  let description = [{
+    The `cir.bit.reverse` operation reverses the bits of the operand integer.
+    Its only argument must be of unsigned integer types of width 8, 16, 32, or
+    64.
+
+    This operation covers the C/C++ builtin function `__builtin_bitreverse`.
+
+    Example:
+
+    ```mlir
+    %1 = cir.bit.reverse(%0 : !u32i): !u32i
+    ```
+  }];
+}
+
+def ByteSwapOp : CIR_BitOpBase<"bit.bswap", CIR_UIntOfWidths<[16, 32, 64]>> {
----------------
xlauko wrote:

Same here — I’d also prefer to keep the names as close as possible to Clang 
builtins. Using similar names reduces cognitive load and makes it easier to 
trace things through the entire pipeline.

For the same reason, I’d like to eliminate the `bit.` prefix entirely and use 
the builtin names directly, like `bitreverse` (This can be, and probably should 
be done as separate PR). I tend to interpret dot-separated names as namespaces, 
so using them just for readability feels a bit off. Grouping things like 
`complex.` or `libc.` makes sense, as they are in a way subdialects, but when 
the goal is simply improved readability, I’d lean toward using underscores 
instead in general.

https://github.com/llvm/llvm-project/pull/147200
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to