205 lines · plain
1// RUN: mlir-opt --split-input-file --verify-diagnostics --test-math-to-vcix %s | FileCheck %s2 3// CHECK-LABEL: func.func @cos(4// CHECK-SAME: %[[VAL_0:.*]]: vector<[8]xf32>,5// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[8]xf32> {6// CHECK: %[[VAL_2:.*]] = arith.constant 9 : i647// CHECK: %[[VAL_3:.*]] = "vcix.v.iv"(%[[VAL_0]], %[[VAL_2]]) <{imm = 0 : i32, opcode = 0 : i64}> : (vector<[8]xf32>, i64) -> vector<[8]xf32>8// CHECK: return %[[VAL_3]] : vector<[8]xf32>9// CHECK: }10func.func @cos(%a: vector<[8] x f32>, %rvl: i64) -> vector<[8] x f32> {11 %res = math.cos %a : vector<[8] x f32>12 return %res : vector<[8] x f32>13}14 15// -----16 17// CHECK-LABEL: func.func @cos_req_legalization(18// CHECK-SAME: %[[VAL_0:.*]]: vector<[32]xf32>,19// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[32]xf32> {20// CHECK: %[[VAL_2:.*]] = arith.constant 9 : i6421// CHECK: %[[VAL_3:.*]] = arith.constant dense<0.000000e+00> : vector<[32]xf32>22// CHECK: %[[VAL_4:.*]] = vector.scalable.extract %[[VAL_0]][0] : vector<[16]xf32> from vector<[32]xf32>23// CHECK: %[[VAL_5:.*]] = "vcix.v.iv"(%[[VAL_4]], %[[VAL_2]]) <{imm = 0 : i32, opcode = 0 : i64}> : (vector<[16]xf32>, i64) -> vector<[16]xf32>24// CHECK: %[[VAL_6:.*]] = vector.scalable.insert %[[VAL_5]], %[[VAL_3]][0] : vector<[16]xf32> into vector<[32]xf32>25// CHECK: %[[VAL_7:.*]] = vector.scalable.extract %[[VAL_0]][16] : vector<[16]xf32> from vector<[32]xf32>26// CHECK: %[[VAL_8:.*]] = "vcix.v.iv"(%[[VAL_7]], %[[VAL_2]]) <{imm = 0 : i32, opcode = 0 : i64}> : (vector<[16]xf32>, i64) -> vector<[16]xf32>27// CHECK: %[[VAL_9:.*]] = vector.scalable.insert %[[VAL_8]], %[[VAL_6]][16] : vector<[16]xf32> into vector<[32]xf32>28// CHECK: return %[[VAL_9]] : vector<[32]xf32>29// CHECK: }30func.func @cos_req_legalization(%a: vector<[32] x f32>, %rvl: i64) -> vector<[32] x f32> {31 %res = math.cos %a : vector<[32] x f32>32 return %res : vector<[32] x f32>33}34 35// -----36 37// CHECK-LABEL: func.func @cos_fixed(38// CHECK-SAME: %[[VAL_0:.*]]: vector<8xf32>,39// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<8xf32> {40// CHECK: %[[VAL_2:.*]] = "vcix.v.iv"(%[[VAL_0]]) <{imm = 0 : i32, opcode = 0 : i64}> : (vector<8xf32>) -> vector<8xf32>41// CHECK: return %[[VAL_2]] : vector<8xf32>42// CHECK: }43func.func @cos_fixed(%a: vector<8 x f32>, %rvl: i64) -> vector<8 x f32> {44 %res = math.cos %a : vector<8 x f32>45 return %res : vector<8 x f32>46}47 48// -----49 50// CHECK-LABEL: func.func @sin(51// CHECK-SAME: %[[VAL_0:.*]]: vector<[8]xf32>,52// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[8]xf32> {53// CHECK: %[[VAL_2:.*]] = arith.constant 9 : i6454// CHECK: %[[VAL_3:.*]] = "vcix.v.sv"(%[[VAL_0]], %[[VAL_0]], %[[VAL_2]]) <{opcode = 0 : i64}> : (vector<[8]xf32>, vector<[8]xf32>, i64) -> vector<[8]xf32>55// CHECK: return %[[VAL_3]] : vector<[8]xf32>56// CHECK: }57func.func @sin(%a: vector<[8] x f32>, %rvl: i64) -> vector<[8] x f32> {58 %res = math.sin %a : vector<[8] x f32>59 return %res : vector<[8] x f32>60}61 62// -----63 64// CHECK-LABEL: func.func @sin_req_legalization(65// CHECK-SAME: %[[VAL_0:.*]]: vector<[32]xf32>,66// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[32]xf32> {67// CHECK: %[[VAL_2:.*]] = arith.constant 9 : i6468// CHECK: %[[VAL_3:.*]] = arith.constant dense<0.000000e+00> : vector<[32]xf32>69// CHECK: %[[VAL_4:.*]] = vector.scalable.extract %[[VAL_0]][0] : vector<[16]xf32> from vector<[32]xf32>70// CHECK: %[[VAL_5:.*]] = "vcix.v.sv"(%[[VAL_4]], %[[VAL_4]], %[[VAL_2]]) <{opcode = 0 : i64}> : (vector<[16]xf32>, vector<[16]xf32>, i64) -> vector<[16]xf32>71// CHECK: %[[VAL_6:.*]] = vector.scalable.insert %[[VAL_5]], %[[VAL_3]][0] : vector<[16]xf32> into vector<[32]xf32>72// CHECK: %[[VAL_7:.*]] = vector.scalable.extract %[[VAL_0]][16] : vector<[16]xf32> from vector<[32]xf32>73// CHECK: %[[VAL_8:.*]] = "vcix.v.sv"(%[[VAL_7]], %[[VAL_7]], %[[VAL_2]]) <{opcode = 0 : i64}> : (vector<[16]xf32>, vector<[16]xf32>, i64) -> vector<[16]xf32>74// CHECK: %[[VAL_9:.*]] = vector.scalable.insert %[[VAL_8]], %[[VAL_6]][16] : vector<[16]xf32> into vector<[32]xf32>75// CHECK: return %[[VAL_9]] : vector<[32]xf32>76// CHECK: }77func.func @sin_req_legalization(%a: vector<[32] x f32>, %rvl: i64) -> vector<[32] x f32> {78 %res = math.sin %a : vector<[32] x f32>79 return %res : vector<[32] x f32>80}81 82// -----83 84// CHECK-LABEL: func.func @sin_fixed(85// CHECK-SAME: %[[VAL_0:.*]]: vector<8xf32>,86// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<8xf32> {87// CHECK: %[[VAL_2:.*]] = "vcix.v.sv"(%[[VAL_0]], %[[VAL_0]]) <{opcode = 0 : i64}> : (vector<8xf32>, vector<8xf32>) -> vector<8xf32>88// CHECK: return %[[VAL_2]] : vector<8xf32>89// CHECK: }90func.func @sin_fixed(%a: vector<8 x f32>, %rvl: i64) -> vector<8 x f32> {91 %res = math.sin %a : vector<8 x f32>92 return %res : vector<8 x f32>93}94 95// -----96 97// CHECK-LABEL: func.func @tan(98// CHECK-SAME: %[[VAL_0:.*]]: vector<[8]xf32>,99// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[8]xf32> {100// CHECK: %[[VAL_2:.*]] = arith.constant 0.000000e+00 : f32101// CHECK: %[[VAL_3:.*]] = arith.constant 9 : i64102// CHECK: %[[VAL_4:.*]] = "vcix.v.sv"(%[[VAL_0]], %[[VAL_2]], %[[VAL_3]]) <{opcode = 0 : i64}> : (vector<[8]xf32>, f32, i64) -> vector<[8]xf32>103// CHECK: return %[[VAL_4]] : vector<[8]xf32>104// CHECK: }105func.func @tan(%a: vector<[8] x f32>, %rvl: i64) -> vector<[8] x f32> {106 %res = math.tan %a : vector<[8] x f32>107 return %res : vector<[8] x f32>108}109 110// -----111 112// CHECK-LABEL: func.func @tan_req_legalization(113// CHECK-SAME: %[[VAL_0:.*]]: vector<[32]xf32>,114// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[32]xf32> {115// CHECK: %[[VAL_2:.*]] = arith.constant 0.000000e+00 : f32116// CHECK: %[[VAL_3:.*]] = arith.constant 9 : i64117// CHECK: %[[VAL_4:.*]] = arith.constant dense<0.000000e+00> : vector<[32]xf32>118// CHECK: %[[VAL_5:.*]] = vector.scalable.extract %[[VAL_0]][0] : vector<[16]xf32> from vector<[32]xf32>119// CHECK: %[[VAL_6:.*]] = "vcix.v.sv"(%[[VAL_5]], %[[VAL_2]], %[[VAL_3]]) <{opcode = 0 : i64}> : (vector<[16]xf32>, f32, i64) -> vector<[16]xf32>120// CHECK: %[[VAL_7:.*]] = vector.scalable.insert %[[VAL_6]], %[[VAL_4]][0] : vector<[16]xf32> into vector<[32]xf32>121// CHECK: %[[VAL_8:.*]] = vector.scalable.extract %[[VAL_0]][16] : vector<[16]xf32> from vector<[32]xf32>122// CHECK: %[[VAL_9:.*]] = "vcix.v.sv"(%[[VAL_8]], %[[VAL_2]], %[[VAL_3]]) <{opcode = 0 : i64}> : (vector<[16]xf32>, f32, i64) -> vector<[16]xf32>123// CHECK: %[[VAL_10:.*]] = vector.scalable.insert %[[VAL_9]], %[[VAL_7]][16] : vector<[16]xf32> into vector<[32]xf32>124// CHECK: return %[[VAL_10]] : vector<[32]xf32>125// CHECK: }126func.func @tan_req_legalization(%a: vector<[32] x f32>, %rvl: i64) -> vector<[32] x f32> {127 %res = math.tan %a : vector<[32] x f32>128 return %res : vector<[32] x f32>129}130 131// -----132 133// CHECK-LABEL: func.func @tan_fixed(134// CHECK-SAME: %[[VAL_0:.*]]: vector<8xf32>,135// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<8xf32> {136// CHECK: %[[VAL_2:.*]] = arith.constant 0.000000e+00 : f32137// CHECK: %[[VAL_3:.*]] = "vcix.v.sv"(%[[VAL_0]], %[[VAL_2]]) <{opcode = 0 : i64}> : (vector<8xf32>, f32) -> vector<8xf32>138// CHECK: return %[[VAL_3]] : vector<8xf32>139// CHECK: }140func.func @tan_fixed(%a: vector<8 x f32>, %rvl: i64) -> vector<8 x f32> {141 %res = math.tan %a : vector<8 x f32>142 return %res : vector<8 x f32>143}144 145// -----146 147// CHECK-LABEL: func.func @log(148// CHECK-SAME: %[[VAL_0:.*]]: vector<[8]xf32>,149// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[8]xf32> {150// CHECK: %[[VAL_2:.*]] = arith.constant 0 : i32151// CHECK: %[[VAL_3:.*]] = arith.constant 9 : i64152// CHECK: %[[VAL_4:.*]] = "vcix.v.sv"(%[[VAL_0]], %[[VAL_2]], %[[VAL_3]]) <{opcode = 0 : i64}> : (vector<[8]xf32>, i32, i64) -> vector<[8]xf32>153// CHECK: return %[[VAL_4]] : vector<[8]xf32>154// CHECK: }155func.func @log(%a: vector<[8] x f32>, %rvl: i64) -> vector<[8] x f32> {156 %res = math.log %a : vector<[8] x f32>157 return %res : vector<[8] x f32>158}159 160// -----161 162// CHECK-LABEL: func.func @log_req_legalization(163// CHECK-SAME: %[[VAL_0:.*]]: vector<[32]xf32>,164// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<[32]xf32> {165// CHECK: %[[VAL_2:.*]] = arith.constant 0 : i32166// CHECK: %[[VAL_3:.*]] = arith.constant 9 : i64167// CHECK: %[[VAL_4:.*]] = arith.constant dense<0.000000e+00> : vector<[32]xf32>168// CHECK: %[[VAL_5:.*]] = vector.scalable.extract %[[VAL_0]][0] : vector<[16]xf32> from vector<[32]xf32>169// CHECK: %[[VAL_6:.*]] = "vcix.v.sv"(%[[VAL_5]], %[[VAL_2]], %[[VAL_3]]) <{opcode = 0 : i64}> : (vector<[16]xf32>, i32, i64) -> vector<[16]xf32>170// CHECK: %[[VAL_7:.*]] = vector.scalable.insert %[[VAL_6]], %[[VAL_4]][0] : vector<[16]xf32> into vector<[32]xf32>171// CHECK: %[[VAL_8:.*]] = vector.scalable.extract %[[VAL_0]][16] : vector<[16]xf32> from vector<[32]xf32>172// CHECK: %[[VAL_9:.*]] = "vcix.v.sv"(%[[VAL_8]], %[[VAL_2]], %[[VAL_3]]) <{opcode = 0 : i64}> : (vector<[16]xf32>, i32, i64) -> vector<[16]xf32>173// CHECK: %[[VAL_10:.*]] = vector.scalable.insert %[[VAL_9]], %[[VAL_7]][16] : vector<[16]xf32> into vector<[32]xf32>174// CHECK: return %[[VAL_10]] : vector<[32]xf32>175// CHECK: }176func.func @log_req_legalization(%a: vector<[32] x f32>, %rvl: i64) -> vector<[32] x f32> {177 %res = math.log %a : vector<[32] x f32>178 return %res : vector<[32] x f32>179}180 181// -----182 183// CHECK-LABEL: func.func @log_fixed(184// CHECK-SAME: %[[VAL_0:.*]]: vector<8xf32>,185// CHECK-SAME: %[[VAL_1:.*]]: i64) -> vector<8xf32> {186// CHECK: %[[VAL_2:.*]] = arith.constant 0 : i32187// CHECK: %[[VAL_3:.*]] = "vcix.v.sv"(%[[VAL_0]], %[[VAL_2]]) <{opcode = 0 : i64}> : (vector<8xf32>, i32) -> vector<8xf32>188// CHECK: return %[[VAL_3]] : vector<8xf32>189// CHECK: }190func.func @log_fixed(%a: vector<8 x f32>, %rvl: i64) -> vector<8 x f32> {191 %res = math.log %a : vector<8 x f32>192 return %res : vector<8 x f32>193}194 195// -----196 197// Ensure this case exit gracefully198 199// CHECK-LABEL: func.func @no_vector_type200// CHECK: math.cos201func.func @no_vector_type(%arg0: f32) -> f32 {202 %0 = math.cos %arg0 : f32203 return %0 : f32204}205