[clang] [CIR] Add bit reverse and byte reverse operations (PR #147200)
Sirui Mu via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 11 07:21:04 PDT 2025
================
@@ -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.byte_swap", CIR_UIntOfWidths<[16, 32, 64]>> {
+ let summary = "Reverse the bytes in the object representation of the operand";
+ let description = [{
+ The `cir.bswap` operation takes an integer as operand, reverse the bytes in
+ the object representation of the operand integer, and returns the result.
+
+ The operand integer must be an unsigned integer. Its widths must be either
+ 16, 32, or 64.
+
+ Example:
+
+ ```mlir
+ // %0 = 0x12345678
+ %0 = cir.const #cir.int<305419896> : !u32i
+
+ // %1 should be 0x78563412
+ %1 = cir.bit.bswap(%0 : !u32i) : !u32i
----------------
Lancern wrote:
Changed its name to `cir.byte_swap`.
https://github.com/llvm/llvm-project/pull/147200
More information about the cfe-commits
mailing list