1// Test hlfir.elsewhere operation parse, verify (no errors), and unparse. 2// RUN: fir-opt %s | fir-opt | FileCheck %s 3 4func.func @test_elsewhere(%mask: !fir.ref<!fir.array<10x!fir.logical<4>>>, %x: !fir.ref<!fir.array<10xf32>>, %y: !fir.box<!fir.array<?xf32>>) { 5 hlfir.where { 6 hlfir.yield %mask : !fir.ref<!fir.array<10x!fir.logical<4>>> 7 } do { 8 hlfir.elsewhere do { 9 hlfir.region_assign { 10 hlfir.yield %y : !fir.box<!fir.array<?xf32>> 11 } to { 12 hlfir.yield %x : !fir.ref<!fir.array<10xf32>> 13 } 14 } 15 } 16 return 17} 18// CHECK-LABEL: func.func @test_elsewhere( 19// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10x!fir.logical<4>>>, 20// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<!fir.array<10xf32>>, 21// CHECK-SAME: %[[VAL_2:.*]]: !fir.box<!fir.array<?xf32>>) { 22// CHECK: hlfir.where { 23// CHECK: hlfir.yield %[[VAL_0]] : !fir.ref<!fir.array<10x!fir.logical<4>>> 24// CHECK: } do { 25// CHECK: hlfir.elsewhere do { 26// CHECK: hlfir.region_assign { 27// CHECK: hlfir.yield %[[VAL_2]] : !fir.box<!fir.array<?xf32>> 28// CHECK: } to { 29// CHECK: hlfir.yield %[[VAL_1]] : !fir.ref<!fir.array<10xf32>> 30// CHECK: } 31// CHECK: } 32// CHECK: } 33 34func.func @test_masked_elsewhere(%mask: !fir.ref<!fir.array<10x!fir.logical<4>>>, %x: !fir.ref<!fir.array<10xf32>>, %y: !fir.box<!fir.array<?xf32>>) { 35 hlfir.where { 36 hlfir.yield %mask : !fir.ref<!fir.array<10x!fir.logical<4>>> 37 } do { 38 hlfir.elsewhere mask { 39 %other_mask = fir.call @get_mask() : () -> !fir.ptr<!fir.array<10x!fir.logical<4>>> 40 hlfir.yield %other_mask : !fir.ptr<!fir.array<10x!fir.logical<4>>> 41 } do { 42 hlfir.region_assign { 43 hlfir.yield %y : !fir.box<!fir.array<?xf32>> 44 } to { 45 hlfir.yield %x : !fir.ref<!fir.array<10xf32>> 46 } 47 hlfir.elsewhere do { 48 hlfir.region_assign { 49 hlfir.yield %x : !fir.ref<!fir.array<10xf32>> 50 } to { 51 hlfir.yield %y : !fir.box<!fir.array<?xf32>> 52 } 53 } 54 } 55 } 56 return 57} 58// CHECK-LABEL: func.func @test_masked_elsewhere( 59// CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10x!fir.logical<4>>>, 60// CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<!fir.array<10xf32>>, 61// CHECK-SAME: %[[VAL_2:.*]]: !fir.box<!fir.array<?xf32>>) { 62// CHECK: hlfir.where { 63// CHECK: hlfir.yield %[[VAL_0]] : !fir.ref<!fir.array<10x!fir.logical<4>>> 64// CHECK: } do { 65// CHECK: hlfir.elsewhere mask { 66// CHECK: %[[VAL_3:.*]] = fir.call @get_mask() : () -> !fir.ptr<!fir.array<10x!fir.logical<4>>> 67// CHECK: hlfir.yield %[[VAL_3]] : !fir.ptr<!fir.array<10x!fir.logical<4>>> 68// CHECK: } do { 69// CHECK: hlfir.region_assign { 70// CHECK: hlfir.yield %[[VAL_2]] : !fir.box<!fir.array<?xf32>> 71// CHECK: } to { 72// CHECK: hlfir.yield %[[VAL_1]] : !fir.ref<!fir.array<10xf32>> 73// CHECK: } 74// CHECK: hlfir.elsewhere do { 75// CHECK: hlfir.region_assign { 76// CHECK: hlfir.yield %[[VAL_1]] : !fir.ref<!fir.array<10xf32>> 77// CHECK: } to { 78// CHECK: hlfir.yield %[[VAL_2]] : !fir.box<!fir.array<?xf32>> 79// CHECK: } 80// CHECK: } 81// CHECK: } 82// CHECK: } 83