https://github.com/Andres-Salamanca closed
https://github.com/llvm/llvm-project/pull/142041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
https://github.com/Andres-Salamanca updated
https://github.com/llvm/llvm-project/pull/142041
>From d6e0ab92adad4110280ac86a2e5f33f5a690b65f Mon Sep 17 00:00:00 2001
From: Andres Salamanca
Date: Thu, 29 May 2025 16:17:09 -0500
Subject: [PATCH 1/6] Add initial support for bitfields in structs and
@@ -14,6 +14,105 @@
namespace clang::CIRGen {
+/// Record with information about how a bitfield should be accessed. This is
+/// very similar to what LLVM codegen does, once CIR evolves it's possible we
+/// can use a more higher level representation.
+///
+/// Often we lay o
https://github.com/bcardosolopes approved this pull request.
LGTM once all existing comments are addressed.
https://github.com/llvm/llvm-project/pull/142041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/
https://github.com/Andres-Salamanca updated
https://github.com/llvm/llvm-project/pull/142041
>From 8f154d2c1fd9c646966aa07c9a292d253f9e59cc Mon Sep 17 00:00:00 2001
From: Andres Salamanca
Date: Thu, 29 May 2025 16:17:09 -0500
Subject: [PATCH 1/6] Add initial support for bitfields in structs and
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
bcardosolopes wrote:
> To be clear, this is a matter of idealism. There's no doubt that I can write
> code to handle both types, and all the information I want is available. A
> program processing CIR probably won't have a problem with this. It's more of
> an issue for a person reading the CIR
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
andykaylor wrote:
Sorry for the delay in getting back to this. The summary of what I am about to
say is that I'm in agreement with the plan of moving forward with the current
implementation, but I have some lingering thoughts about it that I want to
explore.
> As you noticed, we went higher l
Andres-Salamanca wrote:
@andykaylor
https://github.com/llvm/llvm-project/pull/142041
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
https://github.com/Andres-Salamanca updated
https://github.com/llvm/llvm-project/pull/142041
>From 8f154d2c1fd9c646966aa07c9a292d253f9e59cc Mon Sep 17 00:00:00 2001
From: Andres Salamanca
Date: Thu, 29 May 2025 16:17:09 -0500
Subject: [PATCH 1/4] Add initial support for bitfields in structs and
bcardosolopes wrote:
> Why are we representing each member of a union individually but packing
> bitfields away in integer fields?
As you noticed, we went higher level for unions (kept the other types around)
but didn't for bitfields. I don't see it as inconsistent because in my point of
view
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
https://github.com/Andres-Salamanca updated
https://github.com/llvm/llvm-project/pull/142041
>From 8fd6f99f59d1bbde98696559141bcfe15920d175 Mon Sep 17 00:00:00 2001
From: Andres Salamanca
Date: Thu, 29 May 2025 16:17:09 -0500
Subject: [PATCH 1/4] Add initial support for bitfields in structs and
@@ -14,6 +14,105 @@
namespace clang::CIRGen {
+/// Record with information about how a bitfield should be accessed. This is
+/// very similar to what LLVM codegen does, once CIR evolves it's possible we
+/// can use a more higher level representation.
+///
+/// Often we lay o
@@ -14,6 +14,105 @@
namespace clang::CIRGen {
+/// Record with information about how a bitfield should be accessed. This is
+/// very similar to what LLVM codegen does, once CIR evolves it's possible we
+/// can use a more higher level representation.
+///
+/// Often we lay o
andykaylor wrote:
@bcardosolopes, I have some general concerns about the way that we're
representing bitfields and bitfield accesses. It seems fundamentally
inconsistent with the way we represent unions. For example:
```
union U {
char a;
int b;
long c;
};
```
becomes
`!cir.record ->
!c
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -172,6 +195,32 @@ CIRRecordLowering::CIRRecordLowering(CIRGenTypes
&cirGenTypes,
zeroInitializable(true), zeroInitializableAsBase(true), packed(packed),
padded(false) {}
+void CIRRecordLowering::setBitFieldInfo(const FieldDecl *fd,
+
@@ -14,6 +14,105 @@
namespace clang::CIRGen {
+/// Record with information about how a bitfield should be accessed. This is
+/// very similar to what LLVM codegen does, once CIR evolves it's possible we
+/// can use a more higher level representation.
+///
+/// Often we lay o
@@ -0,0 +1,79 @@
+// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-linux-gnu -fclangir
-emit-cir %s -o %t.cir
+// RUN: FileCheck --input-file=%t.cir %s --check-prefix=CIR
+// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-linux-gnu -fclangir
-emit-llvm %s -o %t-cir.ll
+//
@@ -14,6 +14,105 @@
namespace clang::CIRGen {
+/// Record with information about how a bitfield should be accessed. This is
+/// very similar to what LLVM codegen does, once CIR evolves it's possible we
+/// can use a more higher level representation.
+///
+/// Often we lay o
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
@@ -223,21 +272,114 @@ void CIRRecordLowering::fillOutputFields() {
fieldTypes.size() - 1;
// A field without storage must be a bitfield.
assert(!cir::MissingFeatures::bitfields());
+ if (!member.data)
+setBitFieldInfo(member.fieldDecl, memb
32 matches
Mail list logo