brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · b5eb6e6 Raw
133 lines · plain
1// RUN: mlir-opt %s --transform-interpreter --split-input-file | FileCheck %s2 3// CHECK-LABEL: func @genbool_1d4// CHECK: %[[T0:.*]] = arith.constant dense<[true, true, true, true, false, false, false, false]> : vector<8xi1>5// CHECK: return %[[T0]] : vector<8xi1>6 7func.func @genbool_1d() -> vector<8xi1> {8  %0 = vector.constant_mask [4] : vector<8xi1>9  return %0 : vector<8xi1>10}11 12// CHECK-LABEL: func @genbool_2d13// CHECK: %[[C0:.*]] = arith.constant14// CHECK-SAME{LITERAL}: dense<[[true, true, false, false], [true, true, false, false], [false, false, false, false], [false, false, false, false]]> : vector<4x4xi1>15// CHECK: return %[[C0]] : vector<4x4xi1>16 17func.func @genbool_2d() -> vector<4x4xi1> {18  %v = vector.constant_mask [2, 2] : vector<4x4xi1>19  return %v: vector<4x4xi1>20}21 22// CHECK-LABEL: func @genbool_3d23// CHECK: %[[C0:.*]] = arith.constant24// CHECK-SAME{LITERAL}: dense<[[[true, true, true, false], [false, false, false, false], [false, false, false, false]], [[false, false, false, false], [false, false, false, false], [false, false, false, false]]]> : vector<2x3x4xi1>25// CHECK: return %[[C0]] : vector<2x3x4xi1>26 27func.func @genbool_3d() -> vector<2x3x4xi1> {28  %v = vector.constant_mask [1, 1, 3] : vector<2x3x4xi1>29  return %v: vector<2x3x4xi1>30}31 32// CHECK-LABEL: func @genbool_var_1d(33// CHECK-SAME: %[[A:.*]]: index)34// CHECK:      %[[T0:.*]] = vector.create_mask %[[A]] : vector<3xi1>35// CHECK:      return %[[T0]] : vector<3xi1>36 37func.func @genbool_var_1d(%arg0: index) -> vector<3xi1> {38  %0 = vector.create_mask %arg0 : vector<3xi1>39  return %0 : vector<3xi1>40}41 42// CHECK-LABEL: func @genbool_var_2d(43// CHECK-SAME: %[[A:.*0]]: index,44// CHECK-SAME: %[[B:.*1]]: index)45// CHECK-DAG:  %[[C1:.*]] = arith.constant dense<false> : vector<3xi1>46// CHECK-DAG:  %[[C2:.*]] = arith.constant dense<false> : vector<2x3xi1>47// CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index48// CHECK-DAG:  %[[c1:.*]] = arith.constant 1 : index49// CHECK:      %[[T0:.*]] = vector.create_mask %[[B]] : vector<3xi1>50// CHECK:      %[[T1:.*]] = arith.cmpi sgt, %[[A]], %[[c0]] : index51// CHECK:      %[[T2:.*]] = arith.select %[[T1]], %[[T0]], %[[C1]] : vector<3xi1>52// CHECK:      %[[T3:.*]] = vector.insert %[[T2]], %[[C2]] [0] : vector<3xi1> into vector<2x3xi1>53// CHECK:      %[[T4:.*]] = arith.cmpi sgt, %[[A]], %[[c1]] : index54// CHECK:      %[[T5:.*]] = arith.select %[[T4]], %[[T0]], %[[C1]] : vector<3xi1>55// CHECK:      %[[T6:.*]] = vector.insert %[[T5]], %[[T3]] [1] : vector<3xi1> into vector<2x3xi1>56// CHECK:      return %[[T6]] : vector<2x3xi1>57 58func.func @genbool_var_2d(%arg0: index, %arg1: index) -> vector<2x3xi1> {59  %0 = vector.create_mask %arg0, %arg1 : vector<2x3xi1>60  return %0 : vector<2x3xi1>61}62 63// CHECK-LABEL: func @genbool_var_3d(64// CHECK-SAME: %[[A:.*0]]: index,65// CHECK-SAME: %[[B:.*1]]: index,66// CHECK-SAME: %[[C:.*2]]: index)67// CHECK-DAG:  %[[C1:.*]] = arith.constant dense<false> : vector<7xi1>68// CHECK-DAG:  %[[C2:.*]] = arith.constant dense<false> : vector<1x7xi1>69// CHECK-DAG:  %[[C3:.*]] = arith.constant dense<false> : vector<2x1x7xi1>70// CHECK-DAG:  %[[c0:.*]] = arith.constant 0 : index71// CHECK-DAG:  %[[c1:.*]] = arith.constant 1 : index72// CHECK:      %[[T0:.*]] = vector.create_mask %[[C]] : vector<7xi1>73// CHECK:      %[[T1:.*]] = arith.cmpi sgt, %[[B]], %[[c0]] : index74// CHECK:      %[[T2:.*]] = arith.select %[[T1]], %[[T0]], %[[C1]] : vector<7xi1>75// CHECK:      %[[T3:.*]] = vector.insert %[[T2]], %[[C2]] [0] : vector<7xi1> into vector<1x7xi1>76// CHECK:      %[[T4:.*]] = arith.cmpi sgt, %[[A]], %[[c0]] : index77// CHECK:      %[[T5:.*]] = arith.select %[[T4]], %[[T3]], %[[C2]] : vector<1x7xi1>78// CHECK:      %[[T6:.*]] = vector.insert %[[T5]], %[[C3]] [0] : vector<1x7xi1> into vector<2x1x7xi1>79// CHECK:      %[[T7:.*]] = arith.cmpi sgt, %[[A]], %[[c1]] : index80// CHECK:      %[[T8:.*]] = arith.select %[[T7]], %[[T3]], %[[C2]] : vector<1x7xi1>81// CHECK:      %[[T9:.*]] = vector.insert %[[T8]], %[[T6]] [1] : vector<1x7xi1> into vector<2x1x7xi1>82// CHECK:      return %[[T9]] : vector<2x1x7xi1>83 84func.func @genbool_var_3d(%arg0: index, %arg1: index, %arg2: index) -> vector<2x1x7xi1> {85  %0 = vector.create_mask %arg0, %arg1, %arg2 : vector<2x1x7xi1>86  return %0 : vector<2x1x7xi1>87}88 89module attributes {transform.with_named_sequence} {90  transform.named_sequence @__transform_main(%module_op: !transform.any_op {transform.readonly}) {91    %f = transform.structured.match ops{["func.func"]} in %module_op92      : (!transform.any_op) -> !transform.any_op93 94    transform.apply_patterns to %f {95      transform.apply_patterns.vector.lower_masks96    } : !transform.any_op97    transform.yield98  }99}100 101// -----102 103// CHECK-LABEL: func @transfer_read_3d(104func.func @transfer_read_3d(105    %t: tensor<?x?x?xf32>, %arg0: index, %arg1: index, %arg2: index)106  -> vector<2x1x7xf32> {107  %c0 = arith.constant 0 : index108  %f0 = arith.constant 0.0 : f32109  //      CHECK: %[[mask:.*]] = vector.create_mask110  //  CHECK-NOT: vector.mask111  //      CHECK: vector.transfer_read {{.*}}, %[[mask]] {in_bounds = [true, true, true]}112  // CHECK-SAME:   : tensor<?x?x?xf32>, vector<2x1x7xf32>113  %0 = vector.create_mask %arg0, %arg1, %arg2 : vector<2x1x7xi1>114  %1 = vector.mask %0 {115    vector.transfer_read %t[%c0, %c0, %c0], %f0 {in_bounds = [true, true, true]}116      : tensor<?x?x?xf32>, vector<2x1x7xf32>117  } : vector<2x1x7xi1> -> vector<2x1x7xf32>118 119  return %1: vector<2x1x7xf32>120}121 122module attributes {transform.with_named_sequence} {123  transform.named_sequence @__transform_main(%module_op: !transform.any_op {transform.readonly}) {124    %f = transform.structured.match ops{["func.func"]} in %module_op125      : (!transform.any_op) -> !transform.any_op126 127    transform.apply_patterns to %f {128      transform.apply_patterns.vector.lower_masked_transfers129    } : !transform.any_op130    transform.yield131  }132}133