[flang-commits] [flang] [FLANG] Solving issue with adjustr intrinsic in where construct (PR #146851)
via flang-commits
flang-commits at lists.llvm.org
Wed Jul 9 23:47:08 PDT 2025
https://github.com/EbinJose2002 updated https://github.com/llvm/llvm-project/pull/146851
>From 6476107702e746e1fcd6a95a0e88fb8df6c4b97f Mon Sep 17 00:00:00 2001
From: EbinJose2002 <ebin.jose at multicorewareinc.com>
Date: Tue, 1 Jul 2025 18:11:05 +0530
Subject: [PATCH 1/4] Removed unnecessary handling of reference to boxchar
conversion in BufferizeHLFIR.cpp
---
flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp b/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
index 58f2b57712974..240b79138b0e1 100644
--- a/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
+++ b/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
@@ -446,7 +446,8 @@ struct AssociateOpConversion
((mlir::isa<fir::BoxCharType>(sourceVar.getType()) &&
!mlir::isa<fir::BoxCharType>(assocType)))) {
sourceVar = builder.create<fir::BoxAddrOp>(loc, assocType, sourceVar);
- } else {
+ } else if (!mlir::isa<fir::ReferenceType>(sourceVar.getType()) ||
+ !mlir::isa<fir::BoxCharType>(assocType)) {
sourceVar = builder.createConvert(loc, assocType, sourceVar);
}
return sourceVar;
>From ee425fb1685f8d783d0e50e76b15df59c921e3b2 Mon Sep 17 00:00:00 2001
From: EbinJose2002 <ebin.jose at multicorewareinc.com>
Date: Thu, 3 Jul 2025 15:58:59 +0530
Subject: [PATCH 2/4] Added test file for the issue
---
flang/test/Lower/adjustr.f90 | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 flang/test/Lower/adjustr.f90
diff --git a/flang/test/Lower/adjustr.f90 b/flang/test/Lower/adjustr.f90
new file mode 100644
index 0000000000000..6add2f5456bbc
--- /dev/null
+++ b/flang/test/Lower/adjustr.f90
@@ -0,0 +1,14 @@
+! RUN: bbc -emit-fir -o - %s | FileCheck %s
+
+! Checking no reference to boxchar conversion is in the emitted fir.
+! CHECK-NOT: (!fir.ref<!fir.char<1,4>>) -> !fir.boxchar<1>
+
+program main
+ logical ,dimension(1):: mask = .true.
+ character(len=2),dimension(1):: d1 = "a "
+ character(len=4),dimension(1):: d4
+ where (mask)
+ d4 = adjustr(d1 // d1)
+ end where
+ write(6,*) "d4 =", d4
+end
\ No newline at end of file
>From 3928151da22c344c403585c6b4420a3097991ad0 Mon Sep 17 00:00:00 2001
From: Ebin-McW <ebin.jose at multicorewareinc.com>
Date: Thu, 3 Jul 2025 16:04:36 +0530
Subject: [PATCH 3/4] Update adjustr.f90
---
flang/test/Lower/adjustr.f90 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/flang/test/Lower/adjustr.f90 b/flang/test/Lower/adjustr.f90
index 6add2f5456bbc..4813834614bd6 100644
--- a/flang/test/Lower/adjustr.f90
+++ b/flang/test/Lower/adjustr.f90
@@ -11,4 +11,4 @@ program main
d4 = adjustr(d1 // d1)
end where
write(6,*) "d4 =", d4
-end
\ No newline at end of file
+end
>From c1b32bfe401bd2cd718f742e4909a2ed67262f5f Mon Sep 17 00:00:00 2001
From: EbinJose2002 <ebin.jose at multicorewareinc.com>
Date: Thu, 10 Jul 2025 12:08:54 +0530
Subject: [PATCH 4/4] Create emboxchar
---
.../Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp b/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
index 240b79138b0e1..9f8f652397a1b 100644
--- a/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
+++ b/flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp
@@ -446,8 +446,17 @@ struct AssociateOpConversion
((mlir::isa<fir::BoxCharType>(sourceVar.getType()) &&
!mlir::isa<fir::BoxCharType>(assocType)))) {
sourceVar = builder.create<fir::BoxAddrOp>(loc, assocType, sourceVar);
- } else if (!mlir::isa<fir::ReferenceType>(sourceVar.getType()) ||
- !mlir::isa<fir::BoxCharType>(assocType)) {
+ } else if (mlir::isa<fir::ReferenceType>(sourceVar.getType()) &&
+ mlir::isa<fir::BoxCharType>(assocType)) {
+ auto refTy = mlir::cast<fir::ReferenceType>(sourceVar.getType());
+ auto charTy = mlir::dyn_cast<fir::CharacterType>(refTy.getEleTy());
+ mlir::Value lenVal = builder.createIntegerConstant(
+ loc, builder.getCharacterLengthType(), charTy.getLen());
+ auto boxCharType =
+ fir::BoxCharType::get(builder.getContext(), charTy.getFKind());
+ sourceVar =
+ builder.create<fir::EmboxCharOp>(loc, boxCharType, sourceVar, lenVal);
+ } else {
sourceVar = builder.createConvert(loc, assocType, sourceVar);
}
return sourceVar;
More information about the flang-commits
mailing list