// Test hlfir.elsewhere operation parse, verify (no errors), and unparse. // RUN: fir-opt %s | fir-opt | FileCheck %s func.func @test_elsewhere(%mask: !fir.ref>>, %x: !fir.ref>, %y: !fir.box>) { hlfir.where { hlfir.yield %mask : !fir.ref>> } do { hlfir.elsewhere do { hlfir.region_assign { hlfir.yield %y : !fir.box> } to { hlfir.yield %x : !fir.ref> } } } return } // CHECK-LABEL: func.func @test_elsewhere( // CHECK-SAME: %[[VAL_0:.*]]: !fir.ref>>, // CHECK-SAME: %[[VAL_1:.*]]: !fir.ref>, // CHECK-SAME: %[[VAL_2:.*]]: !fir.box>) { // CHECK: hlfir.where { // CHECK: hlfir.yield %[[VAL_0]] : !fir.ref>> // CHECK: } do { // CHECK: hlfir.elsewhere do { // CHECK: hlfir.region_assign { // CHECK: hlfir.yield %[[VAL_2]] : !fir.box> // CHECK: } to { // CHECK: hlfir.yield %[[VAL_1]] : !fir.ref> // CHECK: } // CHECK: } // CHECK: } func.func @test_masked_elsewhere(%mask: !fir.ref>>, %x: !fir.ref>, %y: !fir.box>) { hlfir.where { hlfir.yield %mask : !fir.ref>> } do { hlfir.elsewhere mask { %other_mask = fir.call @get_mask() : () -> !fir.ptr>> hlfir.yield %other_mask : !fir.ptr>> } do { hlfir.region_assign { hlfir.yield %y : !fir.box> } to { hlfir.yield %x : !fir.ref> } hlfir.elsewhere do { hlfir.region_assign { hlfir.yield %x : !fir.ref> } to { hlfir.yield %y : !fir.box> } } } } return } // CHECK-LABEL: func.func @test_masked_elsewhere( // CHECK-SAME: %[[VAL_0:.*]]: !fir.ref>>, // CHECK-SAME: %[[VAL_1:.*]]: !fir.ref>, // CHECK-SAME: %[[VAL_2:.*]]: !fir.box>) { // CHECK: hlfir.where { // CHECK: hlfir.yield %[[VAL_0]] : !fir.ref>> // CHECK: } do { // CHECK: hlfir.elsewhere mask { // CHECK: %[[VAL_3:.*]] = fir.call @get_mask() : () -> !fir.ptr>> // CHECK: hlfir.yield %[[VAL_3]] : !fir.ptr>> // CHECK: } do { // CHECK: hlfir.region_assign { // CHECK: hlfir.yield %[[VAL_2]] : !fir.box> // CHECK: } to { // CHECK: hlfir.yield %[[VAL_1]] : !fir.ref> // CHECK: } // CHECK: hlfir.elsewhere do { // CHECK: hlfir.region_assign { // CHECK: hlfir.yield %[[VAL_1]] : !fir.ref> // CHECK: } to { // CHECK: hlfir.yield %[[VAL_2]] : !fir.box> // CHECK: } // CHECK: } // CHECK: } // CHECK: }