brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · e63a062 Raw
120 lines · plain
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s2 3 4func.func @missing_sizes(%tc : i32, %ts : i32) {5  %canonloop = omp.new_cli6  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {7    omp.terminator8  }9 10  // expected-error@+1 {{'omp.tile' op there must be one tile size for each applyee}}11  omp.tile <-(%canonloop)12 13  llvm.return14}15 16// -----17 18func.func @no_loop(%tc : i32, %ts : i32) {19  // expected-error@+1 {{'omp.tile' op must apply to at least one loop}}20  omp.tile <-()21 22  return23}24 25// -----26 27func.func @missing_generator(%tc : i32, %ts : i32) {28  // expected-error@+1 {{'omp.new_cli' op CLI has no generator}}29  %canonloop = omp.new_cli30 31  // expected-note@+1 {{see consumer here: "omp.tile"(%0, %arg1) <{operandSegmentSizes = array<i32: 0, 1, 1>}> : (!omp.cli, i32) -> ()}}32  omp.tile <-(%canonloop) sizes(%ts : i32)33 34  return35}36 37// -----38 39func.func @insufficient_sizes(%tc : i32, %ts : i32) {40  %canonloop1 = omp.new_cli41  %canonloop2 = omp.new_cli42  omp.canonical_loop(%canonloop1) %iv : i32 in range(%tc) {43    omp.terminator44  }45  omp.canonical_loop(%canonloop2) %iv : i32 in range(%tc) {46    omp.terminator47  }48 49  // expected-error@+1 {{'omp.tile' op there must be one tile size for each applyee}}50  omp.tile <-(%canonloop1, %canonloop2) sizes(%ts : i32)51 52  llvm.return53}54 55// -----56 57func.func @insufficient_applyees(%tc : i32, %ts : i32) {58  %canonloop = omp.new_cli59  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {60    omp.terminator61  }62 63  // expected-error@+1 {{omp.tile' op there must be one tile size for each applyee}}64  omp.tile <- (%canonloop) sizes(%ts, %ts : i32, i32)65 66  return67}68 69// -----70 71func.func @insufficient_generatees(%tc : i32, %ts : i32) {72  %canonloop = omp.new_cli73  %grid = omp.new_cli74  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {75    omp.terminator76  }77 78  // expected-error@+1 {{'omp.tile' op expecting two times the number of generatees than applyees}}79  omp.tile (%grid) <- (%canonloop) sizes(%ts : i32)80 81  return82}83 84// -----85 86func.func @not_perfectly_nested(%tc : i32, %ts : i32) {87  %canonloop1 = omp.new_cli88  %canonloop2 = omp.new_cli89  omp.canonical_loop(%canonloop1) %iv1 : i32 in range(%tc) {90    %v = arith.constant 42 : i3291    omp.canonical_loop(%canonloop2) %iv2 : i32 in range(%tc) {92      omp.terminator93    }94    omp.terminator95  }96 97  // expected-error@+1 {{'omp.tile' op tiled loop nest must be perfectly nested}}98  omp.tile <-(%canonloop1, %canonloop2) sizes(%ts, %ts : i32, i32)99 100  llvm.return101}102 103// -----104 105func.func @non_nectangular(%tc : i32, %ts : i32) {106  %canonloop1 = omp.new_cli107  %canonloop2 = omp.new_cli108  omp.canonical_loop(%canonloop1) %iv1 : i32 in range(%tc) {109    omp.canonical_loop(%canonloop2) %iv2 : i32 in range(%iv1) {110      omp.terminator111    }112    omp.terminator113  }114 115  // expected-error@+1 {{'omp.tile' op tiled loop nest must be rectangular}}116  omp.tile <-(%canonloop1, %canonloop2) sizes(%ts, %ts : i32, i32)117 118  llvm.return119}120