brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · b0033a6 Raw
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