119 lines · plain
1// RUN: mlir-opt %s -convert-openacc-to-scf -split-input-file | FileCheck %s2 3func.func @testenterdataop(%a: memref<f32>, %ifCond: i1) -> () {4 %0 = acc.create varPtr(%a : memref<f32>) -> memref<f32>5 acc.enter_data if(%ifCond) dataOperands(%0 : memref<f32>)6 return7}8 9// CHECK: func @testenterdataop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)10// CHECK: scf.if [[IFCOND]] {11// CHECK-NEXT: acc.enter_data dataOperands(%{{.*}} : memref<f32>)12// CHECK-NEXT: }13 14// -----15 16func.func @testexitdataop(%a: memref<f32>, %ifCond: i1) -> () {17 %0 = acc.getdeviceptr varPtr(%a : memref<f32>) -> memref<f32>18 acc.exit_data if(%ifCond) dataOperands(%0 : memref<f32>)19 acc.delete accPtr(%0 : memref<f32>)20 return21}22 23// CHECK: func @testexitdataop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)24// CHECK: scf.if [[IFCOND]] {25// CHECK-NEXT: acc.exit_data dataOperands(%{{.*}} : memref<f32>)26// CHECK-NEXT: }27 28// -----29 30func.func @testupdateop(%a: memref<f32>, %ifCond: i1) -> () {31 %0 = acc.update_device varPtr(%a : memref<f32>) -> memref<f32>32 acc.update if(%ifCond) dataOperands(%0 : memref<f32>)33 return34}35 36// CHECK: func @testupdateop(%{{.*}}: memref<f32>, [[IFCOND:%.*]]: i1)37// CHECK: scf.if [[IFCOND]] {38// CHECK: acc.update dataOperands(%{{.*}} : memref<f32>)39// CHECK-NEXT: }40 41// -----42 43func.func @update_true(%arg0: memref<f32>) {44 %true = arith.constant true45 %0 = acc.update_device varPtr(%arg0 : memref<f32>) -> memref<f32>46 acc.update if(%true) dataOperands(%0 : memref<f32>)47 return48}49 50// CHECK-LABEL: func.func @update_true51// CHECK-NOT: if52// CHECK: acc.update dataOperands53 54// -----55 56func.func @update_false(%arg0: memref<f32>) {57 %false = arith.constant false58 %0 = acc.update_device varPtr(%arg0 : memref<f32>) -> memref<f32>59 acc.update if(%false) dataOperands(%0 : memref<f32>)60 return61}62 63// CHECK-LABEL: func.func @update_false64// CHECK-NOT: acc.update dataOperands65 66// -----67 68func.func @enter_data_true(%d1 : memref<f32>) {69 %true = arith.constant true70 %0 = acc.create varPtr(%d1 : memref<f32>) -> memref<f32>71 acc.enter_data async if(%true) dataOperands(%0 : memref<f32>)72 return73}74 75// CHECK-LABEL: func.func @enter_data_true76// CHECK-NOT: if77// CHECK: acc.enter_data async dataOperands78 79// -----80 81func.func @enter_data_false(%d1 : memref<f32>) {82 %false = arith.constant false83 %0 = acc.create varPtr(%d1 : memref<f32>) -> memref<f32>84 acc.enter_data async if(%false) dataOperands(%0 : memref<f32>)85 return86}87 88// CHECK-LABEL: func.func @enter_data_false89// CHECK-NOT: acc.enter_data90 91// -----92 93func.func @exit_data_true(%d1 : memref<f32>) {94 %true = arith.constant true95 %0 = acc.getdeviceptr varPtr(%d1 : memref<f32>) -> memref<f32>96 acc.exit_data async if(%true) dataOperands(%0 : memref<f32>)97 acc.delete accPtr(%0 : memref<f32>)98 return99}100 101// CHECK-LABEL: func.func @exit_data_true102// CHECK-NOT:if103// CHECK:acc.exit_data async dataOperands104 105// -----106 107func.func @exit_data_false(%d1 : memref<f32>) {108 %false = arith.constant false109 %0 = acc.getdeviceptr varPtr(%d1 : memref<f32>) -> memref<f32>110 acc.exit_data async if(%false) dataOperands(%0 : memref<f32>)111 acc.delete accPtr(%0 : memref<f32>)112 return113}114 115// CHECK-LABEL: func.func @exit_data_false116// CHECK-NOT:acc.exit_data117 118// -----119