brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · cf17752 Raw
124 lines · plain
1// RUN: mlir-opt %s --allow-unregistered-dialect -convert-complex-to-rocdl-library-calls | FileCheck %s2 3// CHECK-DAG: @__ocml_cabs_f32(complex<f32>) -> f324// CHECK-DAG: @__ocml_cabs_f64(complex<f64>) -> f645// CHECK-DAG: @__ocml_ccos_f32(complex<f32>) -> complex<f32>6// CHECK-DAG: @__ocml_ccos_f64(complex<f64>) -> complex<f64>7// CHECK-DAG: @__ocml_cexp_f32(complex<f32>) -> complex<f32>8// CHECK-DAG: @__ocml_cexp_f64(complex<f64>) -> complex<f64>9// CHECK-DAG: @__ocml_clog_f32(complex<f32>) -> complex<f32>10// CHECK-DAG: @__ocml_clog_f64(complex<f64>) -> complex<f64>11// CHECK-DAG: @__ocml_csin_f32(complex<f32>) -> complex<f32>12// CHECK-DAG: @__ocml_csin_f64(complex<f64>) -> complex<f64>13// CHECK-DAG: @__ocml_csqrt_f32(complex<f32>) -> complex<f32>14// CHECK-DAG: @__ocml_csqrt_f64(complex<f64>) -> complex<f64>15// CHECK-DAG: @__ocml_ctan_f32(complex<f32>) -> complex<f32>16// CHECK-DAG: @__ocml_ctan_f64(complex<f64>) -> complex<f64>17// CHECK-DAG: @__ocml_ctanh_f32(complex<f32>) -> complex<f32>18// CHECK-DAG: @__ocml_ctanh_f64(complex<f64>) -> complex<f64>19 20//CHECK-LABEL: @abs_caller21func.func @abs_caller(%f: complex<f32>, %d: complex<f64>) -> (f32, f64) {22  // CHECK: %[[RF:.*]] = call @__ocml_cabs_f32(%{{.*}})23  %rf = complex.abs %f : complex<f32>24  // CHECK: %[[RD:.*]] = call @__ocml_cabs_f64(%{{.*}})25  %rd = complex.abs %d : complex<f64>26  // CHECK: return %[[RF]], %[[RD]]27  return %rf, %rd : f32, f6428}29 30//CHECK-LABEL: @cos_caller31func.func @cos_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {32  // CHECK: %[[CF:.*]] = call @__ocml_ccos_f32(%{{.*}})33  %cf = complex.cos %f : complex<f32>34  // CHECK: %[[CD:.*]] = call @__ocml_ccos_f64(%{{.*}})35  %cd = complex.cos %d : complex<f64>36  // CHECK: return %[[CF]], %[[CD]]37  return %cf, %cd : complex<f32>, complex<f64>38}39 40//CHECK-LABEL: @exp_caller41func.func @exp_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {42  // CHECK: %[[EF:.*]] = call @__ocml_cexp_f32(%{{.*}})43  %ef = complex.exp %f : complex<f32>44  // CHECK: %[[ED:.*]] = call @__ocml_cexp_f64(%{{.*}})45  %ed = complex.exp %d : complex<f64>46  // CHECK: return %[[EF]], %[[ED]]47  return %ef, %ed : complex<f32>, complex<f64>48}49 50//CHECK-LABEL: @log_caller51func.func @log_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {52  // CHECK: %[[LF:.*]] = call @__ocml_clog_f32(%{{.*}})53  %lf = complex.log %f : complex<f32>54  // CHECK: %[[LD:.*]] = call @__ocml_clog_f64(%{{.*}})55  %ld = complex.log %d : complex<f64>56  // CHECK: return %[[LF]], %[[LD]]57  return %lf, %ld : complex<f32>, complex<f64>58}59 60//CHECK-LABEL: @pow_caller61//CHECK:          (%[[Z:.*]]: complex<f32>, %[[W:.*]]: complex<f32>)62func.func @pow_caller(%z: complex<f32>, %w: complex<f32>) -> complex<f32> {63  // CHECK: %[[LOG:.*]] = call @__ocml_clog_f32(%[[Z]])64  // CHECK: %[[MUL:.*]] = complex.mul %[[W]], %[[LOG]]65  // CHECK: %[[EXP:.*]] = call @__ocml_cexp_f32(%[[MUL]])66  // CHECK: return %[[EXP]]67  %r = complex.pow %z, %w : complex<f32>68  return %r : complex<f32>69}70 71//CHECK-LABEL: @powi_caller72//CHECK:          (%[[Z:.*]]: complex<f32>, %[[N:.*]]: i32)73func.func @powi_caller(%z: complex<f32>, %n: i32) -> complex<f32> {74  // CHECK: %[[N_FP:.*]] = arith.sitofp %[[N]] : i32 to f3275  // CHECK: %[[ZERO:.*]] = arith.constant 0.000000e+00 : f3276  // CHECK: %[[N_COMPLEX:.*]] = complex.create %[[N_FP]], %[[ZERO]] : complex<f32>77  // CHECK: %[[LOG:.*]] = call @__ocml_clog_f32(%[[Z]]) : (complex<f32>) -> complex<f32>78  // CHECK: %[[MUL:.*]] = complex.mul %[[N_COMPLEX]], %[[LOG]] : complex<f32>79  // CHECK: %[[EXP:.*]] = call @__ocml_cexp_f32(%[[MUL]]) : (complex<f32>) -> complex<f32>80  // CHECK: return %[[EXP]] : complex<f32>81  %r = complex.powi %z, %n : complex<f32>, i3282  return %r : complex<f32>83}84 85//CHECK-LABEL: @sin_caller86func.func @sin_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {87  // CHECK: %[[SF:.*]] = call @__ocml_csin_f32(%{{.*}})88  %sf2 = complex.sin %f : complex<f32>89  // CHECK: %[[SD:.*]] = call @__ocml_csin_f64(%{{.*}})90  %sd2 = complex.sin %d : complex<f64>91  // CHECK: return %[[SF]], %[[SD]]92  return %sf2, %sd2 : complex<f32>, complex<f64>93}94 95//CHECK-LABEL: @sqrt_caller96func.func @sqrt_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {97  // CHECK: %[[SF:.*]] = call @__ocml_csqrt_f32(%{{.*}})98  %sf = complex.sqrt %f : complex<f32>99  // CHECK: %[[SD:.*]] = call @__ocml_csqrt_f64(%{{.*}})100  %sd = complex.sqrt %d : complex<f64>101  // CHECK: return %[[SF]], %[[SD]]102  return %sf, %sd : complex<f32>, complex<f64>103}104 105//CHECK-LABEL: @tan_caller106func.func @tan_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {107  // CHECK: %[[TF:.*]] = call @__ocml_ctan_f32(%{{.*}})108  %tf2 = complex.tan %f : complex<f32>109  // CHECK: %[[TD:.*]] = call @__ocml_ctan_f64(%{{.*}})110  %td2 = complex.tan %d : complex<f64>111  // CHECK: return %[[TF]], %[[TD]]112  return %tf2, %td2 : complex<f32>, complex<f64>113}114 115//CHECK-LABEL: @tanh_caller116func.func @tanh_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {117  // CHECK: %[[TF:.*]] = call @__ocml_ctanh_f32(%{{.*}})118  %tf = complex.tanh %f : complex<f32>119  // CHECK: %[[TD:.*]] = call @__ocml_ctanh_f64(%{{.*}})120  %td = complex.tanh %d : complex<f64>121  // CHECK: return %[[TF]], %[[TD]]122  return %tf, %td : complex<f32>, complex<f64>123}124