[flang-commits] [flang] [FLANG] Solving issue with adjustr intrinsic in where construct (PR #146851)

via flang-commits flang-commits at lists.llvm.org
Thu Jul 3 03:40:08 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-fir-hlfir

Author: Ebin-McW (EbinJose2002)

<details>
<summary>Changes</summary>

Solves #<!-- -->122823
An unnecessary convert instruction was generated in the case of reference to boxchar conversion. So excluded them in the condition. The output is generating correctly.

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


2 Files Affected:

- (modified) flang/lib/Optimizer/HLFIR/Transforms/BufferizeHLFIR.cpp (+2-1) 
- (added) flang/test/Lower/adjustr.f90 (+14) 


``````````diff
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;
diff --git a/flang/test/Lower/adjustr.f90 b/flang/test/Lower/adjustr.f90
new file mode 100644
index 0000000000000..4813834614bd6
--- /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

``````````

</details>


https://github.com/llvm/llvm-project/pull/146851


More information about the flang-commits mailing list