brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.9 KiB · 9d4bf7b Raw
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