1// RUN: mlir-opt %s -test-lower-to-llvm | \ 2// RUN: mlir-runner -e entry -entry-point-result=void \ 3// RUN: -shared-libs=%mlir_c_runner_utils | \ 4// RUN: FileCheck %s 5 6func.func @maskedload16(%base: memref<?xf32>, %mask: vector<16xi1>, 7 %pass_thru: vector<16xf32>) -> vector<16xf32> { 8 %c0 = arith.constant 0: index 9 %ld = vector.maskedload %base[%c0], %mask, %pass_thru 10 : memref<?xf32>, vector<16xi1>, vector<16xf32> into vector<16xf32> 11 return %ld : vector<16xf32> 12} 13 14func.func @maskedload16_at8(%base: memref<?xf32>, %mask: vector<16xi1>, 15 %pass_thru: vector<16xf32>) -> vector<16xf32> { 16 %c8 = arith.constant 8: index 17 %ld = vector.maskedload %base[%c8], %mask, %pass_thru 18 : memref<?xf32>, vector<16xi1>, vector<16xf32> into vector<16xf32> 19 return %ld : vector<16xf32> 20} 21 22func.func @entry() { 23 // Set up memory. 24 %c0 = arith.constant 0: index 25 %c1 = arith.constant 1: index 26 %c16 = arith.constant 16: index 27 %A = memref.alloc(%c16) : memref<?xf32> 28 scf.for %i = %c0 to %c16 step %c1 { 29 %i32 = arith.index_cast %i : index to i32 30 %fi = arith.sitofp %i32 : i32 to f32 31 memref.store %fi, %A[%i] : memref<?xf32> 32 } 33 34 // Set up pass thru vector. 35 %u = arith.constant -7.0: f32 36 %pass = vector.broadcast %u : f32 to vector<16xf32> 37 38 // Set up masks. 39 %f = arith.constant 0: i1 40 %t = arith.constant 1: i1 41 %none = vector.constant_mask [0] : vector<16xi1> 42 %all = vector.constant_mask [16] : vector<16xi1> 43 %some = vector.constant_mask [8] : vector<16xi1> 44 %0 = vector.insert %f, %some[0] : i1 into vector<16xi1> 45 %1 = vector.insert %t, %0[13] : i1 into vector<16xi1> 46 %2 = vector.insert %t, %1[14] : i1 into vector<16xi1> 47 %other = vector.insert %t, %2[14] : i1 into vector<16xi1> 48 49 // 50 // Masked load tests. 51 // 52 53 %l1 = call @maskedload16(%A, %none, %pass) 54 : (memref<?xf32>, vector<16xi1>, vector<16xf32>) -> (vector<16xf32>) 55 vector.print %l1 : vector<16xf32> 56 // CHECK: ( -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, -7 ) 57 58 %l2 = call @maskedload16(%A, %all, %pass) 59 : (memref<?xf32>, vector<16xi1>, vector<16xf32>) -> (vector<16xf32>) 60 vector.print %l2 : vector<16xf32> 61 // CHECK: ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) 62 63 %l3 = call @maskedload16(%A, %some, %pass) 64 : (memref<?xf32>, vector<16xi1>, vector<16xf32>) -> (vector<16xf32>) 65 vector.print %l3 : vector<16xf32> 66 // CHECK: ( 0, 1, 2, 3, 4, 5, 6, 7, -7, -7, -7, -7, -7, -7, -7, -7 ) 67 68 %l4 = call @maskedload16(%A, %other, %pass) 69 : (memref<?xf32>, vector<16xi1>, vector<16xf32>) -> (vector<16xf32>) 70 vector.print %l4 : vector<16xf32> 71 // CHECK: ( -7, 1, 2, 3, 4, 5, 6, 7, -7, -7, -7, -7, -7, 13, 14, -7 ) 72 73 %l5 = call @maskedload16_at8(%A, %some, %pass) 74 : (memref<?xf32>, vector<16xi1>, vector<16xf32>) -> (vector<16xf32>) 75 vector.print %l5 : vector<16xf32> 76 // CHECK: ( 8, 9, 10, 11, 12, 13, 14, 15, -7, -7, -7, -7, -7, -7, -7, -7 ) 77 78 memref.dealloc %A : memref<?xf32> 79 return 80} 81 82