[flang-commits] [flang] [flang][NFC] use hlfir.declare first result when both results are raw pointers (PR #132261)

via flang-commits flang-commits at lists.llvm.org
Thu Mar 20 10:41:27 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-openmp

Author: None (jeanPerier)

<details>
<summary>Changes</summary>

Currently, the helpers to get fir::ExtendedValue out of hlfir::Entity use hlfir.declare second result (`#<!-- -->1`) in most cases. This is because this result is the same as the input and matches what FIR was getting before lowering to HLFIR.

But this creates odd situations when both hlfir.declare are raw pointers and either result ends-up being used in the IR depending on whether the code was generated by a helper using fir::ExtendedValue, or via "pure HLFIR" helpers using the first result.

This will typically prevent simple CSE and easy identification that two operation (e.g load/store) are touching the exact same memory location without using alias analysis or "manual detection" (looking for common hlfir.declare defining op).

Hence, when both hlfir.declare are both raw pointers, use `#<!-- -->0` when producing `fir::ExtendedValue`.
When `#<!-- -->0` is a fir.box, keep using `#<!-- -->1` because these are not the same. 
The only code change is in HLFIRTools.cpp and is pretty small, but there is a big test fallout of `#<!-- -->1` to `#<!-- -->0`.

I am considering going towards a simplification where there is a single result for hlfir.declare, but this will be a bit more intrusive since extra box_addr will have to be generated (that will be optimized at the FIR level when the fir.embox generated for hlfir.declare is visible).

---

Patch is 757.94 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/132261.diff


214 Files Affected:

- (modified) flang/lib/Optimizer/Builder/HLFIRTools.cpp (+12-2) 
- (modified) flang/test/HLFIR/all-lowering.fir (+1-1) 
- (modified) flang/test/HLFIR/any-lowering.fir (+1-1) 
- (modified) flang/test/HLFIR/associate-codegen.fir (+6-6) 
- (modified) flang/test/HLFIR/assumed-type-actual-args.f90 (+1-1) 
- (modified) flang/test/HLFIR/boxchar_emboxing.f90 (+2-2) 
- (modified) flang/test/HLFIR/count-lowering.fir (+1-1) 
- (modified) flang/test/HLFIR/cshift-lowering.fir (+1-1) 
- (modified) flang/test/HLFIR/dot_product-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/elemental-codegen-nested.fir (+1-1) 
- (modified) flang/test/HLFIR/maxloc-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/maxval-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/minloc-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/minval-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/mul_transpose.f90 (+8-7) 
- (modified) flang/test/HLFIR/opt-bufferization-eval_in_mem.fir (+1-1) 
- (modified) flang/test/HLFIR/order_assignments/user-defined-assignment.fir (+1-1) 
- (modified) flang/test/HLFIR/product-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/reshape-lowering.fir (+8-8) 
- (modified) flang/test/HLFIR/sum-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/transpose-lowering.fir (+1-1) 
- (modified) flang/test/Lower/CUDA/cuda-allocatable.cuf (+37-37) 
- (modified) flang/test/Lower/CUDA/cuda-data-attribute.cuf (+2-2) 
- (modified) flang/test/Lower/CUDA/cuda-data-transfer.cuf (+5-5) 
- (modified) flang/test/Lower/CUDA/cuda-device-proc.cuf (+4-4) 
- (modified) flang/test/Lower/CUDA/cuda-kernel-calls.cuf (+6-6) 
- (modified) flang/test/Lower/CUDA/cuda-kernel-loop-directive.cuf (+3-3) 
- (modified) flang/test/Lower/CUDA/cuda-return01.cuf (+1-1) 
- (modified) flang/test/Lower/CUDA/cuda-return02.cuf (+1-1) 
- (modified) flang/test/Lower/HLFIR/actual_target_for_dummy_pointer.f90 (+16-16) 
- (modified) flang/test/Lower/HLFIR/allocatable-and-pointer-status-change.f90 (+7-7) 
- (modified) flang/test/Lower/HLFIR/allocatable-end-of-scope-dealloc.f90 (+5-5) 
- (modified) flang/test/Lower/HLFIR/allocatable-return.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/allocatables-and-pointers.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/array-ctor-as-elemental.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/array-ctor-derived.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/array-ctor-index.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/associate-construct.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/assumed-rank-iface.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/assumed-rank-inquiries-2.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/assumed-rank-inquiries.f90 (+18-18) 
- (modified) flang/test/Lower/HLFIR/bindc-entry-stmt.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/bindc-value-derived.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/call-issue-124043.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/call-sequence-associated-descriptors.f90 (+12-12) 
- (modified) flang/test/Lower/HLFIR/calls-array-results.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/calls-assumed-shape.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/calls-constant-expr-arg.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/calls-f77.f90 (+9-9) 
- (modified) flang/test/Lower/HLFIR/calls-optional.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/calls-percent-val-ref.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/cray-pointers.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/custom-intrinsic.f90 (+29-29) 
- (modified) flang/test/Lower/HLFIR/elemental-array-ops.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/elemental-call-vector-subscripts.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/elemental-user-procedure-ref.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/entry_return.f90 (+10-10) 
- (modified) flang/test/Lower/HLFIR/expr-addr.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/expr-as-inquired.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/function-return-as-expr.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/function-return.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/goto-do-body.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/ignore-rank-unlimited-polymorphic.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/implicit-call-mismatch.f90 (+7-7) 
- (modified) flang/test/Lower/HLFIR/intentout-allocatable-components.f90 (+3-3) 
- (modified) flang/test/Lower/HLFIR/internal-procedures.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/intrinsic-dynamically-optional.f90 (+10-10) 
- (modified) flang/test/Lower/HLFIR/intrinsic-module-procedures.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/intrinsic-subroutines.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/issue80884.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/maxloc.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/maxval.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/minloc.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/minval.f90 (+5-5) 
- (modified) flang/test/Lower/HLFIR/proc-pointer-comp-nopass.f90 (+8-8) 
- (modified) flang/test/Lower/HLFIR/proc-pointer-comp-pass.f90 (+7-7) 
- (modified) flang/test/Lower/HLFIR/procedure-designators.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/procedure-pointer.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/product.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/reshape.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/select-rank.f90 (+7-7) 
- (modified) flang/test/Lower/HLFIR/select-type-selector.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/structure-constructor.f90 (+12-12) 
- (modified) flang/test/Lower/HLFIR/sum.f90 (+4-4) 
- (modified) flang/test/Lower/HLFIR/transformational.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/user-defined-assignment.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/vector-subscript-as-value.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/associated-proc-pointers.f90 (+6-6) 
- (modified) flang/test/Lower/Intrinsics/c_f_procpointer.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/c_ptr_eq_ne.f90 (+6-6) 
- (modified) flang/test/Lower/Intrinsics/chdir.f90 (+7-7) 
- (modified) flang/test/Lower/Intrinsics/ieee_rint_int.f90 (+7-7) 
- (modified) flang/test/Lower/Intrinsics/ieee_rounding.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/loc.f90 (+11-11) 
- (modified) flang/test/Lower/Intrinsics/min.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/reduce.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/rename.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/second.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/selected_logical_kind.f90 (+5-5) 
- (modified) flang/test/Lower/Intrinsics/shape.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/signal.f90 (+6-6) 
- (modified) flang/test/Lower/Intrinsics/system-optional.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/system.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-atomic-capture.f90 (+18-18) 
- (modified) flang/test/Lower/OpenACC/acc-atomic-read.f90 (+2-2) 
- (modified) flang/test/Lower/OpenACC/acc-atomic-update-array.f90 (+3-3) 
- (modified) flang/test/Lower/OpenACC/acc-atomic-update-hlfir.f90 (+3-3) 
- (modified) flang/test/Lower/OpenACC/acc-atomic-update.f90 (+3-3) 
- (modified) flang/test/Lower/OpenACC/acc-atomic-write.f90 (+2-2) 
- (modified) flang/test/Lower/OpenACC/acc-data-operands-unwrap-defaultbounds.f90 (+6-6) 
- (modified) flang/test/Lower/OpenACC/acc-data-operands.f90 (+6-6) 
- (modified) flang/test/Lower/OpenACC/acc-declare-unwrap-defaultbounds.f90 (+2-2) 
- (modified) flang/test/Lower/OpenACC/acc-declare.f90 (+2-2) 
- (modified) flang/test/Lower/OpenACC/acc-enter-data-unwrap-defaultbounds.f90 (+9-9) 
- (modified) flang/test/Lower/OpenACC/acc-enter-data.f90 (+8-8) 
- (modified) flang/test/Lower/OpenACC/acc-kernels-loop.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-kernels.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-parallel-loop.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-parallel.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-private-unwrap-defaultbounds.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-private.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-serial-loop.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/acc-serial.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/DelayedPrivatization/distribute-standalone-private.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/DelayedPrivatization/wsloop.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/allocatable-array-bounds.f90 (+7-7) 
- (modified) flang/test/Lower/OpenMP/common-atomic-lowering.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/copyin-order.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/copyin.f90 (+41-41) 
- (modified) flang/test/Lower/OpenMP/default-clause.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/flush.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/generic-loop-rewriting.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/hlfir-seqloop-parallel.f90 (+8-8) 
- (modified) flang/test/Lower/OpenMP/lastprivate-allocatable.f90 (+2-1) 
- (modified) flang/test/Lower/OpenMP/lastprivate-iv.f90 (+6-6) 
- (modified) flang/test/Lower/OpenMP/lastprivate-simd.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/loop-pointer-variable.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/parallel-lastprivate-clause-scalar.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/parallel-private-clause-fixes.f90 (+4-4) 
- (modified) flang/test/Lower/OpenMP/parallel-private-clause.f90 (+8-8) 
- (modified) flang/test/Lower/OpenMP/parallel-reduction-allocatable-array.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/parallel-reduction-pointer-array.f90 (+4-4) 
- (modified) flang/test/Lower/OpenMP/parallel-reduction3.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/parallel-wsloop-firstpriv.f90 (+6-6) 
- (modified) flang/test/Lower/OpenMP/parallel-wsloop-lastpriv.f90 (+22-22) 
- (modified) flang/test/Lower/OpenMP/parallel-wsloop.f90 (+12-12) 
- (modified) flang/test/Lower/OpenMP/private-commonblock.f90 (+11-11) 
- (modified) flang/test/Lower/OpenMP/private-derived-type.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/scan.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/shared-loop.f90 (+9-9) 
- (modified) flang/test/Lower/OpenMP/simd.f90 (+12-12) 
- (modified) flang/test/Lower/OpenMP/simd_x86_64.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/stop-stmt-in-region.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/target.f90 (+9-9) 
- (modified) flang/test/Lower/OpenMP/threadprivate-char-array-chararray.f90 (+15-15) 
- (modified) flang/test/Lower/OpenMP/threadprivate-commonblock.f90 (+12-12) 
- (modified) flang/test/Lower/OpenMP/threadprivate-hlfir.f90 (+5-5) 
- (modified) flang/test/Lower/OpenMP/threadprivate-host-association.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/threadprivate-integer-different-kinds.f90 (+12-12) 
- (modified) flang/test/Lower/OpenMP/threadprivate-pointer-allocatable.f90 (+14-14) 
- (modified) flang/test/Lower/OpenMP/threadprivate-real-logical-complex-derivedtype.f90 (+8-8) 
- (modified) flang/test/Lower/OpenMP/threadprivate-use-association-2-hlfir.f90 (+4-4) 
- (modified) flang/test/Lower/OpenMP/threadprivate-use-association.f90 (+6-6) 
- (modified) flang/test/Lower/OpenMP/unstructured.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-chunks.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-collapse.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-monotonic.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-nonmonotonic.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-add-byref.f90 (+7-7) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-add.f90 (+7-7) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-allocatable-array-minmax.f90 (+8-8) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-allocatable.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-array-assumed-shape.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-array.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-array2.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-iand-byref.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-iand.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-ieor-byref.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-ieor.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-ior-byref.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-ior.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-and-byref.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-and.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-eqv-byref.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-eqv.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-neqv-byref.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-neqv.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-or-byref.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-logical-or.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-max-byref.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-max.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-min-byref.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-min.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-min2.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-mul-byref.f90 (+7-7) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-mul.f90 (+7-7) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-multiple-clauses.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-reduction-pointer.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/wsloop-schedule.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/wsloop-variable.f90 (+9-9) 
- (modified) flang/test/Lower/OpenMP/wsloop.f90 (+3-3) 
- (modified) flang/test/Lower/allocatable-polymorphic.f90 (+60-60) 
- (modified) flang/test/Lower/allocate-source-allocatables-2.f90 (+5-5) 
- (modified) flang/test/Lower/array-character.f90 (+7-7) 
- (modified) flang/test/Lower/array-elemental-calls-char-byval.f90 (+3-3) 
- (modified) flang/test/Lower/array-elemental-calls-char.f90 (+3-3) 
- (modified) flang/test/Lower/call-by-value-attr.f90 (+5-5) 
- (modified) flang/test/Lower/components.f90 (+1-1) 
- (modified) flang/test/Lower/derived-type-temp.f90 (+1-1) 
- (modified) flang/test/Lower/entry-statement.f90 (+9-9) 
- (modified) flang/test/Lower/intentout-deallocate.f90 (+29-29) 
- (modified) flang/test/Lower/io-asynchronous.f90 (+4-4) 
- (modified) flang/test/Lower/nullify-polymorphic.f90 (+1-1) 
- (modified) flang/test/Lower/structure-constructors-alloc-comp.f90 (+4-4) 


``````````diff
diff --git a/flang/lib/Optimizer/Builder/HLFIRTools.cpp b/flang/lib/Optimizer/Builder/HLFIRTools.cpp
index 1a31ca33e9465..85fd742db6beb 100644
--- a/flang/lib/Optimizer/Builder/HLFIRTools.cpp
+++ b/flang/lib/Optimizer/Builder/HLFIRTools.cpp
@@ -186,14 +186,24 @@ static fir::CharBoxValue genUnboxChar(mlir::Location loc,
   return {addr, len};
 }
 
+// To maximize chances of identifying usage of a same variables in the IR,
+// always return the hlfirBase result of declare/associate if it is a raw
+// pointer.
+static mlir::Value getFirBaseHelper(mlir::Value hlfirBase,
+                                    mlir::Value firBase) {
+  if (fir::isa_ref_type(hlfirBase.getType()))
+    return hlfirBase;
+  return firBase;
+}
+
 mlir::Value hlfir::Entity::getFirBase() const {
   if (fir::FortranVariableOpInterface variable = getIfVariableInterface()) {
     if (auto declareOp =
             mlir::dyn_cast<hlfir::DeclareOp>(variable.getOperation()))
-      return declareOp.getOriginalBase();
+      return getFirBaseHelper(declareOp.getBase(), declareOp.getOriginalBase());
     if (auto associateOp =
             mlir::dyn_cast<hlfir::AssociateOp>(variable.getOperation()))
-      return associateOp.getFirBase();
+      return getFirBaseHelper(associateOp.getBase(), associateOp.getFirBase());
   }
   return getBase();
 }
diff --git a/flang/test/HLFIR/all-lowering.fir b/flang/test/HLFIR/all-lowering.fir
index df6771e565efc..b20d5e759177f 100644
--- a/flang/test/HLFIR/all-lowering.fir
+++ b/flang/test/HLFIR/all-lowering.fir
@@ -90,7 +90,7 @@ func.func @_QPall3(%arg0: !fir.ref<!fir.array<2x!fir.logical<4>>> {fir.bindc_nam
 
 // CHECK-DAG:     %[[MASK_ADDR:.*]] = fir.address_of
 // CHECK-DAG:     %[[MASK_VAR:.*]]:2 = hlfir.declare %[[MASK_ADDR]](%[[MASK_SHAPE:.*]])
-// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK_VAR]]#1(%[[MASK_SHAPE:.*]])
+// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK_VAR]]#0(%[[MASK_SHAPE:.*]])
 
 // CHECK-DAG:     %[[DIM:.*]] = arith.constant 1 : i32
 
diff --git a/flang/test/HLFIR/any-lowering.fir b/flang/test/HLFIR/any-lowering.fir
index 72fcdd37b6193..71889b01aaf29 100644
--- a/flang/test/HLFIR/any-lowering.fir
+++ b/flang/test/HLFIR/any-lowering.fir
@@ -93,7 +93,7 @@ func.func @_QPany3(%arg0: !fir.ref<!fir.array<2x!fir.logical<4>>> {fir.bindc_nam
 
 // CHECK-DAG:     %[[MASK_ADDR:.*]] = fir.address_of
 // CHECK-DAG:     %[[MASK_VAR:.*]]:2 = hlfir.declare %[[MASK_ADDR]](%[[MASK_SHAPE:.*]])
-// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK_VAR]]#1(%[[MASK_SHAPE:.*]])
+// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK_VAR]]#0(%[[MASK_SHAPE:.*]])
 
 // CHECK-DAG:     %[[DIM:.*]] = arith.constant 1 : i32
 
diff --git a/flang/test/HLFIR/associate-codegen.fir b/flang/test/HLFIR/associate-codegen.fir
index ad64959984a14..d2ab142744072 100644
--- a/flang/test/HLFIR/associate-codegen.fir
+++ b/flang/test/HLFIR/associate-codegen.fir
@@ -88,7 +88,7 @@ func.func @associate_char(%arg0: !fir.boxchar<1> ) {
 // CHECK:           %[[VAL_16:.*]] = arith.subi %[[VAL_7]], %[[VAL_15]] : index
 // CHECK:           fir.do_loop %[[VAL_17:.*]] = %[[VAL_2]]#1 to %[[VAL_16]] step %[[VAL_15]] {
 // CHECK:             %[[VAL_18:.*]] = arith.subi %[[VAL_17]], %[[VAL_2]]#1 : index
-// CHECK:             %[[VAL_19:.*]] = fir.convert %[[VAL_6]]#1 : (!fir.ref<!fir.char<1>>) -> !fir.ref<!fir.array<1x!fir.char<1>>>
+// CHECK:             %[[VAL_19:.*]] = fir.convert %[[VAL_6]]#0 : (!fir.ref<!fir.char<1>>) -> !fir.ref<!fir.array<1x!fir.char<1>>>
 // CHECK:             %[[VAL_20:.*]] = fir.coordinate_of %[[VAL_19]], %[[VAL_18]] : (!fir.ref<!fir.array<1x!fir.char<1>>>, index) -> !fir.ref<!fir.char<1>>
 // CHECK:             %[[VAL_21:.*]] = fir.load %[[VAL_20]] : !fir.ref<!fir.char<1>>
 // CHECK:             %[[VAL_22:.*]] = fir.convert %[[VAL_8]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<!fir.array<?x!fir.char<1>>>
@@ -233,7 +233,7 @@ func.func @test_shape_of(%arg0: !fir.ref<!fir.array<4x3xi32>>) {
 // CHECK:           %[[VAL_14:.*]] = fir.insert_value %[[VAL_13]], %[[VAL_6]], [1 : index] : (tuple<!fir.heap<!fir.array<3x4xi32>>, i1>, i1) -> tuple<!fir.heap<!fir.array<3x4xi32>>, i1>
 // CHECK:           %[[VAL_15:.*]] = fir.insert_value %[[VAL_14]], %[[VAL_5]]#0, [0 : index] : (tuple<!fir.heap<!fir.array<3x4xi32>>, i1>, !fir.heap<!fir.array<3x4xi32>>) -> tuple<!fir.heap<!fir.array<3x4xi32>>, i1>
 // CHECK:           %[[VAL_16:.*]] = fir.convert %[[VAL_5]]#0 : (!fir.heap<!fir.array<3x4xi32>>) -> !fir.ref<!fir.array<3x4xi32>>
-// CHECK:           %[[VAL_17:.*]] = fir.convert %[[VAL_5]]#1 : (!fir.heap<!fir.array<3x4xi32>>) -> !fir.ref<!fir.array<3x4xi32>>
+// CHECK:           %[[VAL_17:.*]] = fir.convert %[[VAL_5]]#0 : (!fir.heap<!fir.array<3x4xi32>>) -> !fir.ref<!fir.array<3x4xi32>>
 // CHECK:           %[[VAL_18:.*]] = fir.convert %[[VAL_17]] : (!fir.ref<!fir.array<3x4xi32>>) -> !fir.heap<!fir.array<3x4xi32>>
 // CHECK:           fir.freemem %[[VAL_18]] : !fir.heap<!fir.array<3x4xi32>>
 // CHECK:           return
@@ -266,7 +266,7 @@ func.func @test_multiple_associations(%arg0: !hlfir.expr<1x2xi32>) {
 // CHECK:           %[[VAL_11:.*]] = fir.insert_value %[[VAL_10]], %[[VAL_8]], [1 : index] : (tuple<!fir.heap<!fir.array<1x2xi32>>, i1>, i1) -> tuple<!fir.heap<!fir.array<1x2xi32>>, i1>
 // CHECK:           %[[VAL_12:.*]] = fir.insert_value %[[VAL_11]], %[[VAL_9]]#0, [0 : index] : (tuple<!fir.heap<!fir.array<1x2xi32>>, i1>, !fir.heap<!fir.array<1x2xi32>>) -> tuple<!fir.heap<!fir.array<1x2xi32>>, i1>
 // CHECK:           %[[VAL_13:.*]] = fir.convert %[[VAL_9]]#0 : (!fir.heap<!fir.array<1x2xi32>>) -> !fir.ref<!fir.array<1x2xi32>>
-// CHECK:           %[[VAL_14:.*]] = fir.convert %[[VAL_9]]#1 : (!fir.heap<!fir.array<1x2xi32>>) -> !fir.ref<!fir.array<1x2xi32>>
+// CHECK:           %[[VAL_14:.*]] = fir.convert %[[VAL_9]]#0 : (!fir.heap<!fir.array<1x2xi32>>) -> !fir.ref<!fir.array<1x2xi32>>
 // associate 1:
 // CHECK:           %[[VAL_15:.*]] = hlfir.shape_of %[[VAL_0]] : (!hlfir.expr<1x2xi32>) -> !fir.shape<2>
 // CHECK:           %[[VAL_16:.*]] = arith.constant 1 : index
@@ -279,7 +279,7 @@ func.func @test_multiple_associations(%arg0: !hlfir.expr<1x2xi32>) {
 // CHECK:           %[[VAL_22:.*]] = fir.insert_value %[[VAL_21]], %[[VAL_19]], [1 : index] : (tuple<!fir.heap<!fir.array<1x2xi32>>, i1>, i1) -> tuple<!fir.heap<!fir.array<1x2xi32>>, i1>
 // CHECK:           %[[VAL_23:.*]] = fir.insert_value %[[VAL_22]], %[[VAL_20]]#0, [0 : index] : (tuple<!fir.heap<!fir.array<1x2xi32>>, i1>, !fir.heap<!fir.array<1x2xi32>>) -> tuple<!fir.heap<!fir.array<1x2xi32>>, i1>
 // CHECK:           %[[VAL_24:.*]] = fir.convert %[[VAL_20]]#0 : (!fir.heap<!fir.array<1x2xi32>>) -> !fir.ref<!fir.array<1x2xi32>>
-// CHECK:           %[[VAL_25:.*]] = fir.convert %[[VAL_20]]#1 : (!fir.heap<!fir.array<1x2xi32>>) -> !fir.ref<!fir.array<1x2xi32>>
+// CHECK:           %[[VAL_25:.*]] = fir.convert %[[VAL_20]]#0 : (!fir.heap<!fir.array<1x2xi32>>) -> !fir.ref<!fir.array<1x2xi32>>
 // end associate 0:
 // CHECK:           %[[VAL_26:.*]] = fir.convert %[[VAL_14]] : (!fir.ref<!fir.array<1x2xi32>>) -> !fir.heap<!fir.array<1x2xi32>>
 // CHECK:           fir.freemem %[[VAL_26]] : !fir.heap<!fir.array<1x2xi32>>
@@ -414,7 +414,7 @@ func.func @_QPtest_multitple_associates_for_same_expr() {
 // CHECK:           %[[VAL_17:.*]] = fir.insert_value %[[VAL_16]], %[[VAL_14]], [1 : index] : (tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>, i1) -> tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>
 // CHECK:           %[[VAL_18:.*]] = fir.insert_value %[[VAL_17]], %[[VAL_15]]#0, [0 : index] : (tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>, !fir.heap<!fir.array<10x!fir.char<1>>>) -> tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>
 // CHECK:           %[[VAL_19:.*]] = fir.convert %[[VAL_15]]#0 : (!fir.heap<!fir.array<10x!fir.char<1>>>) -> !fir.ref<!fir.array<10x!fir.char<1>>>
-// CHECK:           %[[VAL_20:.*]] = fir.convert %[[VAL_15]]#1 : (!fir.heap<!fir.array<10x!fir.char<1>>>) -> !fir.ref<!fir.array<10x!fir.char<1>>>
+// CHECK:           %[[VAL_20:.*]] = fir.convert %[[VAL_15]]#0 : (!fir.heap<!fir.array<10x!fir.char<1>>>) -> !fir.ref<!fir.array<10x!fir.char<1>>>
 // CHECK:           %[[VAL_21:.*]] = fir.convert %[[VAL_20]] : (!fir.ref<!fir.array<10x!fir.char<1>>>) -> !fir.heap<!fir.array<10x!fir.char<1>>>
 // CHECK:           fir.freemem %[[VAL_21]] : !fir.heap<!fir.array<10x!fir.char<1>>>
 // CHECK:           %[[VAL_22:.*]] = fir.allocmem !fir.array<10x!fir.char<1>> {bindc_name = ".tmp", uniq_name = ""}
@@ -425,7 +425,7 @@ func.func @_QPtest_multitple_associates_for_same_expr() {
 // CHECK:           %[[VAL_26:.*]] = fir.insert_value %[[VAL_25]], %[[VAL_23]], [1 : index] : (tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>, i1) -> tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>
 // CHECK:           %[[VAL_27:.*]] = fir.insert_value %[[VAL_26]], %[[VAL_24]]#0, [0 : index] : (tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>, !fir.heap<!fir.array<10x!fir.char<1>>>) -> tuple<!fir.heap<!fir.array<10x!fir.char<1>>>, i1>
 // CHECK:           %[[VAL_28:.*]] = fir.convert %[[VAL_24]]#0 : (!fir.heap<!fir.array<10x!fir.char<1>>>) -> !fir.ref<!fir.array<10x!fir.char<1>>>
-// CHECK:           %[[VAL_29:.*]] = fir.convert %[[VAL_24]]#1 : (!fir.heap<!fir.array<10x!fir.char<1>>>) -> !fir.ref<!fir.array<10x!fir.char<1>>>
+// CHECK:           %[[VAL_29:.*]] = fir.convert %[[VAL_24]]#0 : (!fir.heap<!fir.array<10x!fir.char<1>>>) -> !fir.ref<!fir.array<10x!fir.char<1>>>
 // CHECK:           %[[VAL_30:.*]] = fir.convert %[[VAL_29]] : (!fir.ref<!fir.array<10x!fir.char<1>>>) -> !fir.heap<!fir.array<10x!fir.char<1>>>
 // CHECK:           fir.freemem %[[VAL_30]] : !fir.heap<!fir.array<10x!fir.char<1>>>
 // CHECK:           fir.freemem %[[VAL_4]]#0 : !fir.heap<!fir.array<10x!fir.char<1>>>
diff --git a/flang/test/HLFIR/assumed-type-actual-args.f90 b/flang/test/HLFIR/assumed-type-actual-args.f90
index 855542709f622..42e9ed27340e7 100644
--- a/flang/test/HLFIR/assumed-type-actual-args.f90
+++ b/flang/test/HLFIR/assumed-type-actual-args.f90
@@ -106,7 +106,7 @@ subroutine s5b(x)
 ! CHECK-SAME:                        %[[VAL_0:.*]]: !fir.ref<none> {fir.bindc_name = "x"}) {
 ! CHECK:           %[[DSCOPE:.*]] = fir.dummy_scope : !fir.dscope
 ! CHECK:           %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %[[DSCOPE]] {uniq_name = "_QFtest1Ex"} : (!fir.ref<none>, !fir.dscope) -> (!fir.ref<none>, !fir.ref<none>)
-! CHECK:           fir.call @_QPs1(%[[VAL_1]]#1) fastmath<contract> : (!fir.ref<none>) -> ()
+! CHECK:           fir.call @_QPs1(%[[VAL_1]]#0) fastmath<contract> : (!fir.ref<none>) -> ()
 ! CHECK:           return
 ! CHECK:         }
 
diff --git a/flang/test/HLFIR/boxchar_emboxing.f90 b/flang/test/HLFIR/boxchar_emboxing.f90
index 787aa8325a8c8..b80ff9858da34 100644
--- a/flang/test/HLFIR/boxchar_emboxing.f90
+++ b/flang/test/HLFIR/boxchar_emboxing.f90
@@ -18,7 +18,7 @@
 ! CHECK:           %[[VAL_9:.*]] = fir.address_of(@_QQclX4641494C) : !fir.ref<!fir.char<1,4>>
 ! CHECK:           %[[VAL_10:.*]] = arith.constant 4 : index
 ! CHECK:           %[[VAL_11:.*]]:2 = hlfir.declare %[[VAL_9]] typeparams %[[VAL_10]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX4641494C"} : (!fir.ref<!fir.char<1,4>>, index) -> (!fir.ref<!fir.char<1,4>>, !fir.ref<!fir.char<1,4>>)
-! CHECK:           %[[VAL_12:.*]] = fir.convert %[[VAL_11]]#1 : (!fir.ref<!fir.char<1,4>>) -> !fir.ref<i8>
+! CHECK:           %[[VAL_12:.*]] = fir.convert %[[VAL_11]]#0 : (!fir.ref<!fir.char<1,4>>) -> !fir.ref<i8>
 ! CHECK:           %[[VAL_13:.*]] = fir.convert %[[VAL_10]] : (index) -> i64
 ! CHECK:           %[[VAL_14:.*]] = arith.constant false
 ! CHECK:           %[[VAL_15:.*]] = arith.constant false
@@ -62,7 +62,7 @@ end subroutine test1
 ! CHECK:           %[[VAL_11:.*]] = fir.address_of(@_QQclX4641494C) : !fir.ref<!fir.char<1,4>>
 ! CHECK:           %[[VAL_12:.*]] = arith.constant 4 : index
 ! CHECK:           %[[VAL_13:.*]]:2 = hlfir.declare %[[VAL_11]] typeparams %[[VAL_12]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX4641494C"} : (!fir.ref<!fir.char<1,4>>, index) -> (!fir.ref<!fir.char<1,4>>, !fir.ref<!fir.char<1,4>>)
-! CHECK:           %[[VAL_14:.*]] = fir.convert %[[VAL_13]]#1 : (!fir.ref<!fir.char<1,4>>) -> !fir.ref<i8>
+! CHECK:           %[[VAL_14:.*]] = fir.convert %[[VAL_13]]#0 : (!fir.ref<!fir.char<1,4>>) -> !fir.ref<i8>
 ! CHECK:           %[[VAL_15:.*]] = fir.convert %[[VAL_12]] : (index) -> i64
 ! CHECK:           %[[VAL_16:.*]] = arith.constant false
 ! CHECK:           %[[VAL_17:.*]] = arith.constant false
diff --git a/flang/test/HLFIR/count-lowering.fir b/flang/test/HLFIR/count-lowering.fir
index a314b507d048c..394a34b526795 100644
--- a/flang/test/HLFIR/count-lowering.fir
+++ b/flang/test/HLFIR/count-lowering.fir
@@ -92,7 +92,7 @@ func.func @_QPcount3(%arg0: !fir.ref<!fir.array<2xi32>> {fir.bindc_name = "s"})
 
 // CHECK-DAG:     %[[MASK_ADDR:.*]] = fir.address_of
 // CHECK-DAG:     %[[MASK_VAR:.*]]:2 = hlfir.declare %[[MASK_ADDR]](%[[MASK_SHAPE:.*]])
-// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK_VAR]]#1(%[[MASK_SHAPE:.*]])
+// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK_VAR]]#0(%[[MASK_SHAPE:.*]])
 
 // CHECK-DAG:     %[[DIM:.*]] = arith.constant 1 : i32
 
diff --git a/flang/test/HLFIR/cshift-lowering.fir b/flang/test/HLFIR/cshift-lowering.fir
index 44408d785f682..316fc439f531c 100644
--- a/flang/test/HLFIR/cshift-lowering.fir
+++ b/flang/test/HLFIR/cshift-lowering.fir
@@ -21,7 +21,7 @@ func.func @cshift1(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}, %a
 // CHECK:           %[[VAL_9:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>
 // CHECK:           %[[VAL_10:.*]] = fir.embox %[[VAL_8]](%[[VAL_9]]) : (!fir.heap<!fir.array<?xi32>>, !fir.shape<1>) -> !fir.box<!fir.heap<!fir.array<?xi32>>>
 // CHECK:           fir.store %[[VAL_10]] to %[[VAL_5]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
-// CHECK:           %[[VAL_11:.*]] = fir.load %[[VAL_7]]#1 : !fir.ref<i32>
+// CHECK:           %[[VAL_11:.*]] = fir.load %[[VAL_7]]#0 : !fir.ref<i32>
 // CHECK:           %[[VAL_13:.*]] = fir.convert %[[VAL_5]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> !fir.ref<!fir.box<none>>
 // CHECK:           %[[VAL_14:.*]] = fir.convert %[[VAL_6]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
 // CHECK:           %[[VAL_15:.*]] = fir.convert %[[VAL_11]] : (i32) -> i64
diff --git a/flang/test/HLFIR/dot_product-lowering.fir b/flang/test/HLFIR/dot_product-lowering.fir
index 64d65665433f1..3960b1d644fa5 100644
--- a/flang/test/HLFIR/dot_product-lowering.fir
+++ b/flang/test/HLFIR/dot_product-lowering.fir
@@ -70,8 +70,8 @@ func.func @_QPdot_product2(%arg0: !fir.box<!fir.array<?x!fir.logical<4>>> {fir.b
 // CHECK-DAG:     %[[RHS_VAR:.*]]:2 = hlfir.declare %[[ARG1]]
 // CHECK-DAG:     %[[RES_VAR:.*]]:2 = hlfir.declare %[[ARG2]]
 
-// CHECK-DAG:     %[[LHS_BOX:.*]] = fir.embox %[[LHS_VAR]]#1
-// CHECK-DAG:     %[[RHS_BOX:.*]] = fir.embox %[[RHS_VAR]]#1
+// CHECK-DAG:     %[[LHS_BOX:.*]] = fir.embox %[[LHS_VAR]]#0
+// CHECK-DAG:     %[[RHS_BOX:.*]] = fir.embox %[[RHS_VAR]]#0
 // CHECK-DAG:     %[[LHS_ARG:.*]] = fir.convert %[[LHS_BOX]] : (!fir.box<!fir.array<5xi32>>) -> !fir.box<none>
 // CHECK-DAG:     %[[RHS_ARG:.*]] = fir.convert %[[RHS_BOX]] : (!fir.box<!fir.array<5xi32>>) -> !fir.box<none>
 
diff --git a/flang/test/HLFIR/elemental-codegen-nested.fir b/flang/test/HLFIR/elemental-codegen-nested.fir
index 3ef296249c7d6..74fee6e5e2192 100644
--- a/flang/test/HLFIR/elemental-codegen-nested.fir
+++ b/flang/test/HLFIR/elemental-codegen-nested.fir
@@ -34,7 +34,7 @@
 // CHECK:             %[[VAL_27:.*]] = fir.insert_value %[[VAL_26]], %[[VAL_21]], [1 : index] : (tuple<!fir.heap<!fir.array<2xf32>>, i1>, i1) -> tuple<!fir.heap<!fir.array<2xf32>>, i1>
 // CHECK:             %[[VAL_28:.*]] = fir.insert_value %[[VAL_27]], %[[VAL_20]]#0, [0 : index] : (tuple<!fir.heap<!fir.array<2xf32>>, i1>, !fir.heap<!fir.array<2xf32>>) -> tuple<!fir.heap<!fir.array<2xf32>>, i1>
 // CHECK:             %[[VAL_29:.*]] = fir.convert %[[VAL_20]]#0 : (!fir.heap<!fir.array<2xf32>>) -> !fir.ref<!fir.array<2xf32>>
-// CHECK:             %[[VAL_30:.*]] = fir.convert %[[VAL_20]]#1 : (!fir.heap<!fir.array<2xf32>>) -> !fir.ref<!fir.array<2xf32>>
+// CHECK:             %[[VAL_30:.*]] = fir.convert %[[VAL_20]]#0 : (!fir.heap<!fir.array<2xf32>>) -> !fir.ref<!fir.array<2xf32>>
 // CHECK:             %[[VAL_31:.*]] = fir.embox %[[VAL_29]](%[[VAL_18]]) : (!fir.ref<!fir.array<2xf32>>, !fir.shape<1>) -> !fir.box<!fir.array<2xf32>>
 // CHECK:             %[[VAL_32:.*]] = fir.convert %[[VAL_31]] : (!fir.box<!fir.array<2xf32>>) -> !fir.box<!fir.array<?xf32>>
 // CHECK:             %[[VAL_33:.*]] = fir.call @_QPfoo(%[[VAL_32]]) fastmath<contract> : (!fir.box<!fir.array<?xf32>>) -> f32
diff --git a/flang/test/HLFIR/maxloc-lowering.fir b/flang/test/HLFIR/maxloc-lowering.fir
index be52627564c49..0872088a25a44 100644
--- a/flang/test/HLFIR/maxloc-lowering.fir
+++ b/flang/test/HLFIR/maxloc-lowering.fir
@@ -106,7 +106,7 @@ func.func @_QPmaxloc3(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"},
 // CHECK-NEXT:    %[[V1:.*]]:2 = hlfir.declare %[[ARG0]] {uniq_name = "_QFmaxloc3Ea"} : (!fir.box<!fir.array<?xi32>>) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)
 // CHECK-NEXT:    %[[V2:.*]]:2 = hlfir.declare %[[ARG2]] {uniq_name = "_QFmaxloc3Em"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
 // CHECK-NEXT:    %[[V3:.*]]:2 = hlfir.declare %[[ARG1]] {uniq_name = "_QFmaxloc3Es"} : (!fir.box<!fir.array<?xi32>>) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)
-// CHECK-NEXT:    %[[V4:.*]] = fir.embox %[[V2]]#1 : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
+// CHECK-NEXT:    %[[V4:.*]] = fir.embox %[[V2]]#0 : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
 // CHECK-NEXT:    %[[V5:.*]] = fir.zero_bits !fir.heap<!fir.array<?xi32>>
 // CHECK-NEXT:    %[[V6:.*]] = fir.shape %[[C0]] : (index) -> !fir.shape<1>
 // CHECK-NEXT:    %[[V7:.*]] = fir.embox %[[V5]](%[[V6]]) : (!fir.heap<!fir.array<?xi32>>, !fir.shape<1>) -> !fir.box<!fir.heap<!fir.array<?xi32>>>
@@ -215,7 +215,7 @@ func.func @_QPmaxloc5(%arg0: !fir.ref<!fir.array<2xi32>> {fir.bindc_name = "s"})
 // CHECK-NEXT:    %[[V5:.*]] = fir.shape %[[C2]] : (index) -> !fir.shape<1>
 // CHECK-NEXT:    %[[V6:.*]]:2 = hlfir.declare %[[ARG0]](%[[V5]]) {uniq_name = "_QFmaxloc5Es"} : (!fir.ref<!fir.array<2xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<2xi32>>, !fir.ref<!fir.array<2xi32>>)
 // CHECK-NEXT:    %[[V7:.*]] = fir.shape %[[C2]], %[[C2]] : (index, index) -> !fir.shape<2>
-// CHECK-NEXT:    %[[V8:.*]] = fir.embox %[[V4]]#1(%[[V7]]) : (!fir.ref<!fir.array<2x2xi32>>, !fir.shape<2>) -> !fir.box<!fir.array<2x2xi32>>
+// CHECK-NEXT:    %[[V8:.*]] = fir.embox %[[V4]]#0(%[[V7]]) : (!fir.ref<!fir.array<2x2xi32>>, !fir.shape<2>) -> !fir.box<!fir.array<2x2xi32>>
 // CHECK-NEXT:    %[[V9:.*]] = fir.convert %[[TRUE]] : (i1) -> !fir.logical<4>
 // CHECK-NEXT:    fir.store %[[V9]] to %[[V1]] : !fir.ref<!fir.logical<4>>
 // CHECK-NEXT:    %[[V10:.*]] = fir.embox %[[V1]] : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
diff --git a/flang/test/HLFIR/maxval-lowering.fir b/flang/test/HLFIR/maxval-lowering.fir
index fbf75d9050544..208877c31be70 100644
--- a/flang/test/HLFIR/maxval-lowering.fir
+++ b/flang/test/HLFIR/maxval-lowering.fir
@@ -86,7 +86,7 @@ func.func @_QPmaxval3(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"},
 // CHECK-DAG:     %[[ARRAY:.*]]:2 = hlfir.declare %[[ARG0]]
 // CHECK-DAG:     %[[RES:.*]]:2 = hlfir.declare %[[ARG1]]
 // CHECK-DAG:     %[[MASK:.*]]:2 = hlfir.declare %[[ARG2]]
-// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK]]#1 : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
+// CHECK-DAG:     %[[MASK_BOX:.*]] = fir.embox %[[MASK]]#0 : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
 // CHECK-DAG:     %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
 // CHECK-DAG:     %[[MASK_ARG:.*]] = fir.convert %[[MASK_BOX]] : (!fir.box<!fir.logical<4>>) -> !fir.box<none>
 // CHECK:         %[[RET:.*]] = fir.call @_FortranAMaxvalInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
@@ -168,7 +168,7 @@ func.func @_QPmaxval5(%arg0: !fir.r...
[truncated]

``````````

</details>


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


More information about the flang-commits mailing list