@@ -394,16 +394,31 @@ subroutine pointer()
394394! CHECK: %[[VAL_7:.*]] = fir.box_addr %[[VAL_6]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
395395! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_7]] : (!fir.heap<!fir.array<?xi32>>) -> i64
396396! CHECK: %[[C0_I64:.*]] = arith.constant 0 : i64
397- ! CHECK: %[[VAL_9:.*]] = arith.cmpi ne, %[[VAL_8]], %c0_i64 : i64
397+ ! CHECK: %[[VAL_9:.*]] = arith.cmpi ne, %[[VAL_8]], %[[C0:.*]]_i64 : i64
398398! CHECK: fir.if %9 {
399399! CHECK: %[[VAL_10:.*]] = fir.load %[[VAL_3]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
400400! CHECK: hlfir.assign %[[VAL_10]] to %[[VAL_5]]#0 realloc : !fir.box<!fir.heap<!fir.array<?xi32>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
401- ! CHECK: }
401+ ! CHECK: } else {
402+ ! CHECK: %[[VAL_10:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
403+ ! CHECK: %[[VAL_11:.*]] = fir.box_addr %[[VAL_10]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
404+ ! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_11]] : (!fir.heap<!fir.array<?xi32>>) -> i64
405+ ! CHECK: %[[C0_I64_0:.*]] = arith.constant 0 : i64
406+ ! CHECK: %[[VAL_13:.*]] = arith.cmpi ne, %[[VAL_12]], %[[C0_I64_0]] : i64
407+ ! CHECK: fir.if %[[VAL_13]] {
408+ ! CHECK: %[[VAL_14:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
409+ ! CHECK: %[[VAL_15:.*]] = fir.box_addr %[[VAL_14]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
410+ ! CHECK: fir.freemem %[[VAL_15]] : !fir.heap<!fir.array<?xi32>>
411+ ! CHECK: %[[VAL_16:.*]] = fir.zero_bits !fir.heap<!fir.array<?xi32>>
412+ ! CHECK: %[[C0:.*]] = arith.constant 0 : index
413+ ! CHECK: %[[VAL_17:.*]] = fir.shape %[[C0]] : (index) -> !fir.shape<1>
414+ ! CHECK: %[[VAL_18:.*]] = fir.embox %[[VAL_16]](%[[VAL_17]]) : (!fir.heap<!fir.array<?xi32>>, !fir.shape<1>) -> !fir.box<!fir.heap<!fir.array<?xi32>>>
415+ ! CHECK: fir.store %[[VAL_18]] to %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
416+ ! CHECK: }
402417! CHECK: omp.barrier
403- ! CHECK: %[[VAL_11 :.*]] = fir.load %[[VAL_5]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
404- ! CHECK: %[[VAL_12 :.*]] = fir.box_addr %[[VAL_11 ]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
405- ! CHECK: %[[VAL_13 :.*]] = fir.convert %[[VAL_12 ]] : (!fir.heap<!fir.array<?xi32>>) -> !fir.ref<!fir.array<?xi32>>
406- ! CHECK: fir.call @_QPsub8(%[[VAL_13 ]]) fastmath<contract> : (!fir.ref<!fir.array<?xi32>>) -> ()
418+ ! CHECK: %[[VAL_19 :.*]] = fir.load %[[VAL_5]]#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
419+ ! CHECK: %[[VAL_20 :.*]] = fir.box_addr %[[VAL_19 ]] : (!fir.box<!fir.heap<!fir.array<?xi32>>>) -> !fir.heap<!fir.array<?xi32>>
420+ ! CHECK: %[[VAL_21 :.*]] = fir.convert %[[VAL_20 ]] : (!fir.heap<!fir.array<?xi32>>) -> !fir.ref<!fir.array<?xi32>>
421+ ! CHECK: fir.call @_QPsub8(%[[VAL_21 ]]) fastmath<contract> : (!fir.ref<!fir.array<?xi32>>) -> ()
407422! CHECK: omp.terminator
408423! CHECK: }
409424! CHECK: return
@@ -435,10 +450,23 @@ subroutine allocatable()
435450! CHECK: %[[VAL_12:.*]] = fir.box_addr %[[VAL_11]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
436451! CHECK: %[[VAL_13:.*]] = fir.load %[[VAL_12]] : !fir.heap<i32>
437452! CHECK: hlfir.assign %[[VAL_13]] to %[[VAL_5]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
438- ! CHECK: }
453+ ! CHECK: } else {
454+ ! CHECK: %[[VAL_11:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<i32>>>
455+ ! CHECK: %[[VAL_15:.*]] = fir.box_addr %[[VAL_11]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
456+ ! CHECK: %[[VAL_16:.*]] = fir.convert %[[VAL_15]] : (!fir.heap<i32>) -> i64
457+ ! CHECK: %[[C0_I64_0:.*]] = arith.constant 0 : i64
458+ ! CHECK: %[[VAL_17:.*]] = arith.cmpi ne, %[[VAL_16]], %[[C0_I64_0]] : i64
459+ ! CHECK: fir.if %[[VAL_17]] {
460+ ! CHECK: %[[VAL_18:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<i32>>>
461+ ! CHECK: %[[VAL_19:.*]] = fir.box_addr %[[VAL_18]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
462+ ! CHECK: fir.freemem %[[VAL_19]] : !fir.heap<i32>
463+ ! CHECK: %[[VAL_20:.*]] = fir.zero_bits !fir.heap<i32>
464+ ! CHECK: %[[VAL_21:.*]] = fir.embox %[[VAL_20]] : (!fir.heap<i32>) -> !fir.box<!fir.heap<i32>>
465+ ! CHECK: fir.store %[[VAL_21]] to %[[VAL_5]]#1 : !fir.ref<!fir.box<!fir.heap<i32>>>
466+ ! CHECK: }
439467! CHECK: omp.barrier
440- ! CHECK: %[[VAL_14 :.*]] = arith.constant 1 : i32
441- ! CHECK: hlfir.assign %[[VAL_14 ]] to %[[VAL_5]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
468+ ! CHECK: %[[VAL_22 :.*]] = arith.constant 1 : i32
469+ ! CHECK: hlfir.assign %[[VAL_22 ]] to %[[VAL_5]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
442470! CHECK: omp.terminator
443471! CHECK: }
444472! CHECK: return
@@ -471,18 +499,32 @@ subroutine allocatable2()
471499! CHECK: %[[C10_I64:.*]] = arith.constant 0 : i64
472500! CHECK: %[[VAL_11:.*]] = arith.cmpi ne, %[[VAL_10]], %[[C10_I64]] : i64
473501! CHECK: fir.if %[[VAL_11]] {
474- ! CHECK: %[[VAL_16:.*]] = fir.load %[[VAL_3]]#0 : !fir.ref<!fir.box<!fir.heap<i32>>>
475- ! CHECK: %[[VAL_17:.*]] = fir.box_addr %[[VAL_16]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
476- ! CHECK: %[[VAL_18:.*]] = fir.load %[[VAL_17]] : !fir.heap<i32>
477- ! CHECK: hlfir.assign %[[VAL_18]] to %[[VAL_7]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
478- ! CHECK: }
502+ ! CHECK: %[[VAL_12:.*]] = fir.load %[[VAL_3]]#0 : !fir.ref<!fir.box<!fir.heap<i32>>>
503+ ! CHECK: %[[VAL_13:.*]] = fir.box_addr %[[VAL_12]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
504+ ! CHECK: %[[VAL_14:.*]] = fir.load %[[VAL_13]] : !fir.heap<i32>
505+ ! CHECK: hlfir.assign %[[VAL_14]] to %[[VAL_7]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
506+ ! CHECK: } else {
507+ ! CHECK: %[[VAL_12:.*]] = fir.load %[[VAL_7]]#1 : !fir.ref<!fir.box<!fir.heap<i32>>>
508+ ! CHECK: %[[VAL_15:.*]] = fir.box_addr %[[VAL_12]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
509+ ! CHECK: %[[VAL_16:.*]] = fir.convert %[[VAL_15]] : (!fir.heap<i32>) -> i64
510+ ! CHECK: %[[C0_I64_0:.*]] = arith.constant 0 : i64
511+ ! CHECK: %[[VAL_17:.*]] = arith.cmpi ne, %[[VAL_16]], %[[C0_I64_0]] : i64
512+ ! CHECK: fir.if %[[VAL_17]] {
513+ ! CHECK: %[[VAL_18:.*]] = fir.load %[[VAL_7]]#1 : !fir.ref<!fir.box<!fir.heap<i32>>>
514+ ! CHECK: %[[VAL_19:.*]] = fir.box_addr %[[VAL_18]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
515+ ! CHECK: fir.freemem %[[VAL_19]] : !fir.heap<i32>
516+ ! CHECK: %[[VAL_20:.*]] = fir.zero_bits !fir.heap<i32>
517+ ! CHECK: %[[VAL_21:.*]] = fir.embox %[[VAL_20]] : (!fir.heap<i32>) -> !fir.box<!fir.heap<i32>>
518+ ! CHECK: fir.store %[[VAL_21]] to %[[VAL_7]]#1 : !fir.ref<!fir.box<!fir.heap<i32>>>
519+ ! CHECK: }
520+ ! CHECK: }
479521! CHECK: omp.barrier
480- ! CHECK: %[[VAL_12 :.*]] = fir.load %7#0 : !fir.ref<!fir.box<!fir.heap<i32>>>
481- ! CHECK: %[[VAL_13 :.*]] = fir.box_addr %[[VAL_12 ]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
482- ! CHECK: %[[VAL_14 :.*]] = fir.load %[[VAL_13 ]] : !fir.heap<i32>
522+ ! CHECK: %[[VAL_22 :.*]] = fir.load %7#0 : !fir.ref<!fir.box<!fir.heap<i32>>>
523+ ! CHECK: %[[VAL_23 :.*]] = fir.box_addr %[[VAL_22 ]] : (!fir.box<!fir.heap<i32>>) -> !fir.heap<i32>
524+ ! CHECK: %[[VAL_24 :.*]] = fir.load %[[VAL_23 ]] : !fir.heap<i32>
483525! CHECK: %[[C1_I32:.*]] = arith.constant 1 : i32
484- ! CHECK: %[[VAL_15 :.*]]= arith.addi %[[VAL_14 ]], %[[C1_I32]] : i32
485- ! CHECK: hlfir.assign %[[VAL_15 ]]to %[[VAL_7]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
526+ ! CHECK: %[[VAL_25 :.*]]= arith.addi %[[VAL_24 ]], %[[C1_I32]] : i32
527+ ! CHECK: hlfir.assign %[[VAL_25 ]]to %[[VAL_7]]#0 realloc : i32, !fir.ref<!fir.box<!fir.heap<i32>>>
486528! CHECK: omp.terminator
487529! CHECK: }
488530! CHECK: return
0 commit comments