brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 2702a1e Raw
184 lines · plain
1// RUN: mlir-opt %s -split-input-file -pass-pipeline="builtin.module(convert-math-to-funcs)" | FileCheck %s2 3// -----4 5// CHECK-LABEL: func @ipowi(6// CHECK-SAME: %[[ARG0:.+]]: i64,7// CHECK-SAME: %[[ARG1:.+]]: i64)8func.func @ipowi(%arg0: i64, %arg1: i64) {9  // CHECK: call @__mlir_math_ipowi_i64(%[[ARG0]], %[[ARG1]]) : (i64, i64) -> i6410  %0 = math.ipowi %arg0, %arg1 : i6411  func.return12}13 14// CHECK-LABEL:   func.func private @__mlir_math_ipowi_i64(15// CHECK-SAME:      %[[VAL_0:.*]]: i64,16// CHECK-SAME:      %[[VAL_1:.*]]: i64) -> i6417// CHECK-SAME:        attributes {llvm.linkage = #llvm.linkage<linkonce_odr>} {18// CHECK:           %[[VAL_2:.*]] = arith.constant 0 : i6419// CHECK:           %[[VAL_3:.*]] = arith.constant 1 : i6420// CHECK:           %[[VAL_4:.*]] = arith.constant -1 : i6421// CHECK:           %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_1]], %[[VAL_2]] : i6422// CHECK:           cf.cond_br %[[VAL_5]], ^bb1, ^bb223// CHECK:         ^bb1:24// CHECK:           return %[[VAL_3]] : i6425// CHECK:         ^bb2:26// CHECK:           %[[VAL_6:.*]] = arith.cmpi sle, %[[VAL_1]], %[[VAL_2]] : i6427// CHECK:           cf.cond_br %[[VAL_6]], ^bb3, ^bb12(%[[VAL_3]], %[[VAL_0]], %[[VAL_1]] : i64, i64, i64)28// CHECK:         ^bb3:29// CHECK:           %[[VAL_7:.*]] = arith.cmpi eq, %[[VAL_0]], %[[VAL_2]] : i6430// CHECK:           cf.cond_br %[[VAL_7]], ^bb4, ^bb531// CHECK:         ^bb4:32// CHECK:           %[[VAL_8:.*]] = arith.divsi %[[VAL_3]], %[[VAL_2]]  : i6433// CHECK:           return %[[VAL_8]] : i6434// CHECK:         ^bb5:35// CHECK:           %[[VAL_9:.*]] = arith.cmpi eq, %[[VAL_0]], %[[VAL_3]] : i6436// CHECK:           cf.cond_br %[[VAL_9]], ^bb6, ^bb737// CHECK:         ^bb6:38// CHECK:           return %[[VAL_3]] : i6439// CHECK:         ^bb7:40// CHECK:           %[[VAL_10:.*]] = arith.cmpi eq, %[[VAL_0]], %[[VAL_4]] : i6441// CHECK:           cf.cond_br %[[VAL_10]], ^bb8, ^bb1142// CHECK:         ^bb8:43// CHECK:           %[[VAL_11:.*]] = arith.andi %[[VAL_1]], %[[VAL_3]]  : i6444// CHECK:           %[[VAL_12:.*]] = arith.cmpi ne, %[[VAL_11]], %[[VAL_2]] : i6445// CHECK:           cf.cond_br %[[VAL_12]], ^bb9, ^bb1046// CHECK:         ^bb9:47// CHECK:           return %[[VAL_4]] : i6448// CHECK:         ^bb10:49// CHECK:           return %[[VAL_3]] : i6450// CHECK:         ^bb11:51// CHECK:           return %[[VAL_2]] : i6452// CHECK:         ^bb12(%[[VAL_13:.*]]: i64, %[[VAL_14:.*]]: i64, %[[VAL_15:.*]]: i64):53// CHECK:           %[[VAL_16:.*]] = arith.andi %[[VAL_15]], %[[VAL_3]]  : i6454// CHECK:           %[[VAL_17:.*]] = arith.cmpi ne, %[[VAL_16]], %[[VAL_2]] : i6455// CHECK:           cf.cond_br %[[VAL_17]], ^bb13, ^bb14(%[[VAL_13]] : i64)56// CHECK:         ^bb13:57// CHECK:           %[[VAL_18:.*]] = arith.muli %[[VAL_13]], %[[VAL_14]]  : i6458// CHECK:           cf.br ^bb14(%[[VAL_18]] : i64)59// CHECK:         ^bb14(%[[VAL_19:.*]]: i64):60// CHECK:           %[[VAL_20:.*]] = arith.shrui %[[VAL_15]], %[[VAL_3]]  : i6461// CHECK:           %[[VAL_21:.*]] = arith.cmpi eq, %[[VAL_20]], %[[VAL_2]] : i6462// CHECK:           cf.cond_br %[[VAL_21]], ^bb15, ^bb1663// CHECK:         ^bb15:64// CHECK:           return %[[VAL_19]] : i6465// CHECK:         ^bb16:66// CHECK:           %[[VAL_22:.*]] = arith.muli %[[VAL_14]], %[[VAL_14]]  : i6467// CHECK:           cf.br ^bb12(%[[VAL_19]], %[[VAL_22]], %[[VAL_20]] : i64, i64, i64)68// CHECK:         }69 70// -----71 72// CHECK-LABEL: func @ipowi(73// CHECK-SAME: %[[ARG0:.+]]: i8,74// CHECK-SAME: %[[ARG1:.+]]: i8)75  // CHECK: call @__mlir_math_ipowi_i8(%[[ARG0]], %[[ARG1]]) : (i8, i8) -> i876func.func @ipowi(%arg0: i8, %arg1: i8) {77  %0 = math.ipowi %arg0, %arg1 : i878  func.return79}80 81// CHECK-LABEL:   func.func private @__mlir_math_ipowi_i8(82// CHECK-SAME:      %[[VAL_0:.*]]: i8,83// CHECK-SAME:      %[[VAL_1:.*]]: i8) -> i884// CHECK-SAME:        attributes {llvm.linkage = #llvm.linkage<linkonce_odr>} {85// CHECK:           %[[VAL_2:.*]] = arith.constant 0 : i886// CHECK:           %[[VAL_3:.*]] = arith.constant 1 : i887// CHECK:           %[[VAL_4:.*]] = arith.constant -1 : i888// CHECK:           %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_1]], %[[VAL_2]] : i889// CHECK:           cf.cond_br %[[VAL_5]], ^bb1, ^bb290// CHECK:         ^bb1:91// CHECK:           return %[[VAL_3]] : i892// CHECK:         ^bb2:93// CHECK:           %[[VAL_6:.*]] = arith.cmpi sle, %[[VAL_1]], %[[VAL_2]] : i894// CHECK:           cf.cond_br %[[VAL_6]], ^bb3, ^bb12(%[[VAL_3]], %[[VAL_0]], %[[VAL_1]] : i8, i8, i8)95// CHECK:         ^bb3:96// CHECK:           %[[VAL_7:.*]] = arith.cmpi eq, %[[VAL_0]], %[[VAL_2]] : i897// CHECK:           cf.cond_br %[[VAL_7]], ^bb4, ^bb598// CHECK:         ^bb4:99// CHECK:           %[[VAL_8:.*]] = arith.divsi %[[VAL_3]], %[[VAL_2]]  : i8100// CHECK:           return %[[VAL_8]] : i8101// CHECK:         ^bb5:102// CHECK:           %[[VAL_9:.*]] = arith.cmpi eq, %[[VAL_0]], %[[VAL_3]] : i8103// CHECK:           cf.cond_br %[[VAL_9]], ^bb6, ^bb7104// CHECK:         ^bb6:105// CHECK:           return %[[VAL_3]] : i8106// CHECK:         ^bb7:107// CHECK:           %[[VAL_10:.*]] = arith.cmpi eq, %[[VAL_0]], %[[VAL_4]] : i8108// CHECK:           cf.cond_br %[[VAL_10]], ^bb8, ^bb11109// CHECK:         ^bb8:110// CHECK:           %[[VAL_11:.*]] = arith.andi %[[VAL_1]], %[[VAL_3]]  : i8111// CHECK:           %[[VAL_12:.*]] = arith.cmpi ne, %[[VAL_11]], %[[VAL_2]] : i8112// CHECK:           cf.cond_br %[[VAL_12]], ^bb9, ^bb10113// CHECK:         ^bb9:114// CHECK:           return %[[VAL_4]] : i8115// CHECK:         ^bb10:116// CHECK:           return %[[VAL_3]] : i8117// CHECK:         ^bb11:118// CHECK:           return %[[VAL_2]] : i8119// CHECK:         ^bb12(%[[VAL_13:.*]]: i8, %[[VAL_14:.*]]: i8, %[[VAL_15:.*]]: i8):120// CHECK:           %[[VAL_16:.*]] = arith.andi %[[VAL_15]], %[[VAL_3]]  : i8121// CHECK:           %[[VAL_17:.*]] = arith.cmpi ne, %[[VAL_16]], %[[VAL_2]] : i8122// CHECK:           cf.cond_br %[[VAL_17]], ^bb13, ^bb14(%[[VAL_13]] : i8)123// CHECK:         ^bb13:124// CHECK:           %[[VAL_18:.*]] = arith.muli %[[VAL_13]], %[[VAL_14]]  : i8125// CHECK:           cf.br ^bb14(%[[VAL_18]] : i8)126// CHECK:         ^bb14(%[[VAL_19:.*]]: i8):127// CHECK:           %[[VAL_20:.*]] = arith.shrui %[[VAL_15]], %[[VAL_3]]  : i8128// CHECK:           %[[VAL_21:.*]] = arith.cmpi eq, %[[VAL_20]], %[[VAL_2]] : i8129// CHECK:           cf.cond_br %[[VAL_21]], ^bb15, ^bb16130// CHECK:         ^bb15:131// CHECK:           return %[[VAL_19]] : i8132// CHECK:         ^bb16:133// CHECK:           %[[VAL_22:.*]] = arith.muli %[[VAL_14]], %[[VAL_14]]  : i8134// CHECK:           cf.br ^bb12(%[[VAL_19]], %[[VAL_22]], %[[VAL_20]] : i8, i8, i8)135// CHECK:         }136 137// -----138 139// CHECK-LABEL:   func.func @ipowi_vec(140// CHECK-SAME:                          %[[VAL_0:.*]]: vector<2x3xi64>,141// CHECK-SAME:                          %[[VAL_1:.*]]: vector<2x3xi64>) {142func.func @ipowi_vec(%arg0: vector<2x3xi64>, %arg1: vector<2x3xi64>) {143// CHECK:   %[[CST:.*]] = arith.constant dense<0> : vector<2x3xi64>144// CHECK:   %[[B00:.*]] = vector.extract %[[VAL_0]][0, 0] : i64 from vector<2x3xi64>145// CHECK:   %[[E00:.*]] = vector.extract %[[VAL_1]][0, 0] : i64 from vector<2x3xi64>146// CHECK:   %[[R00:.*]] = call @__mlir_math_ipowi_i64(%[[B00]], %[[E00]]) : (i64, i64) -> i64147// CHECK:   %[[TMP00:.*]] = vector.insert %[[R00]], %[[CST]] [0, 0] : i64 into vector<2x3xi64>148// CHECK:   %[[B01:.*]] = vector.extract %[[VAL_0]][0, 1] : i64 from vector<2x3xi64>149// CHECK:   %[[E01:.*]] = vector.extract %[[VAL_1]][0, 1] : i64 from vector<2x3xi64>150// CHECK:   %[[R01:.*]] = call @__mlir_math_ipowi_i64(%[[B01]], %[[E01]]) : (i64, i64) -> i64151// CHECK:   %[[TMP01:.*]] = vector.insert %[[R01]], %[[TMP00]] [0, 1] : i64 into vector<2x3xi64>152// CHECK:   %[[B02:.*]] = vector.extract %[[VAL_0]][0, 2] : i64 from vector<2x3xi64>153// CHECK:   %[[E02:.*]] = vector.extract %[[VAL_1]][0, 2] : i64 from vector<2x3xi64>154// CHECK:   %[[R02:.*]] = call @__mlir_math_ipowi_i64(%[[B02]], %[[E02]]) : (i64, i64) -> i64155// CHECK:   %[[TMP02:.*]] = vector.insert %[[R02]], %[[TMP01]] [0, 2] : i64 into vector<2x3xi64>156// CHECK:   %[[B10:.*]] = vector.extract %[[VAL_0]][1, 0] : i64 from vector<2x3xi64>157// CHECK:   %[[E10:.*]] = vector.extract %[[VAL_1]][1, 0] : i64 from vector<2x3xi64>158// CHECK:   %[[R10:.*]] = call @__mlir_math_ipowi_i64(%[[B10]], %[[E10]]) : (i64, i64) -> i64159// CHECK:   %[[TMP10:.*]] = vector.insert %[[R10]], %[[TMP02]] [1, 0] : i64 into vector<2x3xi64>160// CHECK:   %[[B11:.*]] = vector.extract %[[VAL_0]][1, 1] : i64 from vector<2x3xi64>161// CHECK:   %[[E11:.*]] = vector.extract %[[VAL_1]][1, 1] : i64 from vector<2x3xi64>162// CHECK:   %[[R11:.*]] = call @__mlir_math_ipowi_i64(%[[B11]], %[[E11]]) : (i64, i64) -> i64163// CHECK:   %[[TMP11:.*]] = vector.insert %[[R11]], %[[TMP10]] [1, 1] : i64 into vector<2x3xi64>164// CHECK:   %[[B12:.*]] = vector.extract %[[VAL_0]][1, 2] : i64 from vector<2x3xi64>165// CHECK:   %[[E12:.*]] = vector.extract %[[VAL_1]][1, 2] : i64 from vector<2x3xi64>166// CHECK:   %[[R12:.*]] = call @__mlir_math_ipowi_i64(%[[B12]], %[[E12]]) : (i64, i64) -> i64167// CHECK:   %[[TMP12:.*]] = vector.insert %[[R12]], %[[TMP11]] [1, 2] : i64 into vector<2x3xi64>168// CHECK:   return169// CHECK: }170  %0 = math.ipowi %arg0, %arg1 : vector<2x3xi64>171  func.return172}173 174// -----175 176// Check that index is not converted177 178// CHECK-LABEL: func.func @ipowi_index179// CHECK:         math.ipowi180func.func @ipowi_index(%arg0: index, %arg1: index) {181  %0 = math.ipowi %arg0, %arg1 : index182  func.return183}184