llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clangir

Author: None (Andres-Salamanca)

<details>
<summary>Changes</summary>

This PR adds a test for parsing the bitfield_info attribute. Additionally, it 
updates the `storage_type` and `is_signed` fields to match the style used in 
the incubator ASM format guide.

---
Full diff: https://github.com/llvm/llvm-project/pull/147628.diff


4 Files Affected:

- (modified) clang/include/clang/CIR/Dialect/IR/CIRAttrs.td (+8-8) 
- (modified) clang/test/CIR/CodeGen/bitfields.c (+2-2) 
- (modified) clang/test/CIR/CodeGen/bitfields.cpp (+1-1) 
- (added) clang/test/CIR/IR/bitfield_info.cir (+20) 


``````````diff
diff --git a/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td 
b/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
index 75650beec0c6d..785478abb0778 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
@@ -489,28 +489,28 @@ def BitfieldInfoAttr : CIR_Attr<"BitfieldInfo", 
"bitfield_info"> {
       is 4 bits wide, starts at offset 0, and is signed.
   }];
   let parameters = (ins "mlir::StringAttr":$name,
-                        "mlir::Type":$storageType,
+                        "mlir::Type":$storage_type,
                         "uint64_t":$size,
                         "uint64_t":$offset,
-                        "bool":$isSigned);
+                        "bool":$is_signed);
 
   let assemblyFormat = [{`<` struct($name,
-                                    $storageType,
+                                    $storage_type,
                                     $size,
                                     $offset,
-                                    $isSigned)
+                                    $is_signed)
                          `>`
                         }];
 
   let builders = [
     AttrBuilder<(ins "llvm::StringRef":$name,
-                     "mlir::Type":$storageType,
+                     "mlir::Type":$storage_type,
                      "uint64_t":$size,
                      "uint64_t":$offset,
-                     "bool":$isSigned
+                     "bool":$is_signed
                      ), [{
-      return $_get($_ctxt, mlir::StringAttr::get($_ctxt, name), storageType,
-                   size, offset, isSigned);
+      return $_get($_ctxt, mlir::StringAttr::get($_ctxt, name), storage_type,
+                   size, offset, is_signed);
     }]>
   ];
 }
diff --git a/clang/test/CIR/CodeGen/bitfields.c 
b/clang/test/CIR/CodeGen/bitfields.c
index 6eb753c5cc3d2..ee69db22b4a20 100644
--- a/clang/test/CIR/CodeGen/bitfields.c
+++ b/clang/test/CIR/CodeGen/bitfields.c
@@ -13,7 +13,7 @@ typedef struct {
 } A;
 
 // CIR-DAG:  !rec_A = !cir.record<struct "A" packed padded {!s8i, !s8i, !s8i, 
!u16i, !cir.array<!u8i x 3>}>
-// CIR-DAG:  #bfi_more_bits = #cir.bitfield_info<name = "more_bits", 
storageType = !u16i, size = 4, offset = 3, isSigned = false>
+// CIR-DAG:  #bfi_more_bits = #cir.bitfield_info<name = "more_bits", 
storage_type = !u16i, size = 4, offset = 3, is_signed = false>
 // LLVM-DAG: %struct.A = type <{ i8, i8, i8, i16, [3 x i8] }>
 // OGCG-DAG: %struct.A = type <{ i8, i8, i8, i16, [3 x i8] }>
 
@@ -35,7 +35,7 @@ typedef struct {
   int e : 15;
   unsigned f; // type other than int above, not a bitfield
 } S;
-// CIR-DAG:  #bfi_c = #cir.bitfield_info<name = "c", storageType = !u64i, size 
= 17, offset = 32, isSigned = true>
+// CIR-DAG:  #bfi_c = #cir.bitfield_info<name = "c", storage_type = !u64i, 
size = 17, offset = 32, is_signed = true>
 // CIR-DAG:  !rec_S = !cir.record<struct "S" {!u64i, !u16i, !u32i}>
 // LLVM-DAG: %struct.S = type { i64, i16, i32 }
 // OGCG-DAG: %struct.S = type { i64, i16, i32 }
diff --git a/clang/test/CIR/CodeGen/bitfields.cpp 
b/clang/test/CIR/CodeGen/bitfields.cpp
index a4d58b5cadcec..7372acaeb9e06 100644
--- a/clang/test/CIR/CodeGen/bitfields.cpp
+++ b/clang/test/CIR/CodeGen/bitfields.cpp
@@ -14,7 +14,7 @@ typedef struct {
   unsigned f; // type other than int above, not a bitfield
 } S;
 // CIR-DAG:  !rec_S = !cir.record<struct "S" {!u64i, !u16i, !u32i}>
-// CIR-DAG:  #bfi_c = #cir.bitfield_info<name = "c", storageType = !u64i, size 
= 17, offset = 32, isSigned = true>
+// CIR-DAG:  #bfi_c = #cir.bitfield_info<name = "c", storage_type = !u64i, 
size = 17, offset = 32, is_signed = true>
 // LLVM-DAG: %struct.S = type { i64, i16, i32 }
 // OGCG-DAG: %struct.S = type { i64, i16, i32 }
 
diff --git a/clang/test/CIR/IR/bitfield_info.cir 
b/clang/test/CIR/IR/bitfield_info.cir
new file mode 100644
index 0000000000000..682e0903fd552
--- /dev/null
+++ b/clang/test/CIR/IR/bitfield_info.cir
@@ -0,0 +1,20 @@
+// RUN: cir-opt %s | FileCheck %s
+
+!s32i = !cir.int<s, 32>
+!u32i = !cir.int<u, 32>
+
+
+!rec_S = !cir.record<struct "S" {!u32i}>
+#bfi_c = #cir.bitfield_info<name = "c", storage_type = !u32i, size = 17, 
offset = 15, is_signed = true>
+
+// CHECK: #bfi_c = #cir.bitfield_info<name = "c", storage_type = !u32i, size = 
17, offset = 15, is_signed = true>
+
+// Use bitfield to enforce printing the attribute
+cir.func dso_local @init(%arg0: !cir.ptr<!rec_S> ){
+  %0 = cir.alloca !cir.ptr<!rec_S>, !cir.ptr<!cir.ptr<!rec_S>>, ["s", init] 
{alignment = 8 : i64}
+  cir.store %arg0, %0 : !cir.ptr<!rec_S>, !cir.ptr<!cir.ptr<!rec_S>>
+  %1 = cir.load align(8) %0 : !cir.ptr<!cir.ptr<!rec_S>>, !cir.ptr<!rec_S>
+  %2 = cir.get_member %1[0] {name = "c"} : !cir.ptr<!rec_S> -> !cir.ptr<!u32i>
+  %3 = cir.get_bitfield(#bfi_c, %2 : !cir.ptr<!u32i>) -> !s32i
+  cir.return
+}

``````````

</details>


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

Reply via email to