brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · de6c931 Raw
146 lines · plain
1// RUN: mlir-opt %s -canonicalize="test-convergence" -split-input-file | FileCheck %s2 3func.func @update_no_op(%x : memref<i32>) {4  omp.atomic.update %x : memref<i32> {5  ^bb0(%xval : i32):6    omp.yield(%xval : i32)7  }8  return9}10 11// CHECK-LABEL: func.func @update_no_op12// CHECK-NOT: omp.atomic.update13 14// -----15 16func.func @update_write_op(%x : memref<i32>, %value: i32) {17  omp.atomic.update %x : memref<i32> {18  ^bb0(%xval : i32):19    omp.yield(%value : i32)20  }21  return22}23 24// CHECK-LABEL: func.func @update_write_op25// CHECK-SAME:            (%[[X:.+]]: memref<i32>, %[[VALUE:.+]]: i32)26// CHECK: omp.atomic.write %[[X]] = %[[VALUE]] : memref<i32>, i3227// CHECK-NOT: omp.atomic.update28 29// -----30 31func.func @update_normal(%x : memref<i32>, %value: i32) {32  omp.atomic.update %x : memref<i32> {33  ^bb0(%xval : i32):34    %newval = arith.addi %xval, %value : i3235    omp.yield(%newval : i32)36  }37  return38}39 40// CHECK-LABEL: func.func @update_normal41// CHECK: omp.atomic.update42// CHECK: arith.addi43// CHECK: omp.yield44 45// -----46 47func.func @update_unnecessary_computations(%x: memref<i32>) {48  %c0 = arith.constant 0 : i3249  omp.atomic.update %x : memref<i32> {50  ^bb0(%xval: i32):51    %newval = arith.addi %xval, %c0 : i3252    omp.yield(%newval: i32)53  }54  return55}56 57// CHECK-LABEL: func.func @update_unnecessary_computations58// CHECK-NOT: omp.atomic.update59 60// -----61 62func.func @update_unnecessary_computations(%x: memref<i32>) {63  %c0 = arith.constant 0 : i3264  omp.atomic.update %x : memref<i32> {65  ^bb0(%xval: i32):66    %newval = arith.muli %xval, %c0 : i3267    omp.yield(%newval: i32)68  }69  return70}71 72// CHECK-LABEL: func.func @update_unnecessary_computations73// CHECK-NOT: omp.atomic.update74// CHECK: omp.atomic.write75 76// -----77 78// CHECK-LABEL: func.func @parallel_empty79func.func @parallel_empty() {80  omp.parallel {}81  return82}83 84// CHECK-NOT: omp.parallel85 86// -----87 88// CHECK-LABEL: func.func @parallel_only_terminator89func.func @parallel_only_terminator() {90  omp.parallel {91    omp.terminator92  }93  return94}95 96// CHECK-NOT: omp.parallel97// CHECK-NOT: omp.terminator98 99// -----100 101// CHECK-LABEL: func.func @parallel_no_side_effects102func.func @parallel_no_side_effects(%a: i32, %b: i32) {103  omp.parallel {104    %x = arith.addi %a, %b : i32105    omp.terminator106  }107  return108}109 110// CHECK-NOT: omp.parallel111// CHECK-NOT: omp.terminator112 113// -----114 115// CHECK-LABEL: func.func @parallel_maybe_side_effects116func.func @parallel_maybe_side_effects(%a: i32, %b: i32) {117  omp.parallel {118    func.call @foo() : () -> ()119    omp.terminator120  }121  return122}123 124func.func private @foo() -> ()125 126// CHECK: omp.parallel127// CHECK: func.call @foo() : () -> ()128// CHECK: omp.terminator129 130// -----131 132func.func @constant_hoisting_target(%x : !llvm.ptr) {133  omp.target {134    ^bb0(%arg0: !llvm.ptr):135    %c1 = arith.constant 10 : i32136    llvm.store %c1, %arg0 : i32, !llvm.ptr137    omp.terminator138  }139  return140}141 142// CHECK-LABEL: func.func @constant_hoisting_target143// CHECK-NOT: arith.constant144// CHECK: omp.target145// CHECK: arith.constant146