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