83 lines · plain
1// Test hlfir.elsewhere operation parse, verify (no errors), and unparse.2// RUN: fir-opt %s | fir-opt | FileCheck %s3 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 return17}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 return57}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