aboutsummaryrefslogtreecommitdiff
path: root/mlir/test/Conversion/ComplexToROCDLLibraryCalls/complex-to-rocdl-library-calls.mlir
blob: ae59f28b46392d428cd271a81145d8fcc0d2f894 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// RUN: mlir-opt %s -convert-complex-to-rocdl-library-calls | FileCheck %s

// CHECK-DAG: @__ocml_cabs_f32(complex<f32>) -> f32
// CHECK-DAG: @__ocml_cabs_f64(complex<f64>) -> f64
// CHECK-DAG: @__ocml_carg_f32(complex<f32>) -> f32
// CHECK-DAG: @__ocml_carg_f64(complex<f64>) -> f64
// CHECK-DAG: @__ocml_ccos_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_ccos_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_cexp_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_cexp_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_clog_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_clog_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_conj_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_conj_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_cpow_f32(complex<f32>, complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_cpow_f64(complex<f64>, complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_csin_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_csin_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_csqrt_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_csqrt_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_ctan_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_ctan_f64(complex<f64>) -> complex<f64>
// CHECK-DAG: @__ocml_ctanh_f32(complex<f32>) -> complex<f32>
// CHECK-DAG: @__ocml_ctanh_f64(complex<f64>) -> complex<f64>

//CHECK-LABEL: @abs_caller
func.func @abs_caller(%f: complex<f32>, %d: complex<f64>) -> (f32, f64) {
  // CHECK: %[[RF:.*]] = call @__ocml_cabs_f32(%{{.*}})
  %rf = complex.abs %f : complex<f32>
  // CHECK: %[[RD:.*]] = call @__ocml_cabs_f64(%{{.*}})
  %rd = complex.abs %d : complex<f64>
  // CHECK: return %[[RF]], %[[RD]]
  return %rf, %rd : f32, f64
}

//CHECK-LABEL: @angle_caller
func.func @angle_caller(%f: complex<f32>, %d: complex<f64>) -> (f32, f64) {
  // CHECK: %[[AF:.*]] = call @__ocml_carg_f32(%{{.*}})
  %af = complex.angle %f : complex<f32>
  // CHECK: %[[AD:.*]] = call @__ocml_carg_f64(%{{.*}})
  %ad = complex.angle %d : complex<f64>
  // CHECK: return %[[AF]], %[[AD]]
  return %af, %ad : f32, f64
}

//CHECK-LABEL: @cos_caller
func.func @cos_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[CF:.*]] = call @__ocml_ccos_f32(%{{.*}})
  %cf = complex.cos %f : complex<f32>
  // CHECK: %[[CD:.*]] = call @__ocml_ccos_f64(%{{.*}})
  %cd = complex.cos %d : complex<f64>
  // CHECK: return %[[CF]], %[[CD]]
  return %cf, %cd : complex<f32>, complex<f64>
}

//CHECK-LABEL: @exp_caller
func.func @exp_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[EF:.*]] = call @__ocml_cexp_f32(%{{.*}})
  %ef = complex.exp %f : complex<f32>
  // CHECK: %[[ED:.*]] = call @__ocml_cexp_f64(%{{.*}})
  %ed = complex.exp %d : complex<f64>
  // CHECK: return %[[EF]], %[[ED]]
  return %ef, %ed : complex<f32>, complex<f64>
}

//CHECK-LABEL: @log_caller
func.func @log_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[LF:.*]] = call @__ocml_clog_f32(%{{.*}})
  %lf = complex.log %f : complex<f32>
  // CHECK: %[[LD:.*]] = call @__ocml_clog_f64(%{{.*}})
  %ld = complex.log %d : complex<f64>
  // CHECK: return %[[LF]], %[[LD]]
  return %lf, %ld : complex<f32>, complex<f64>
}

//CHECK-LABEL: @conj_caller
func.func @conj_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[CF:.*]] = call @__ocml_conj_f32(%{{.*}})
  %cf2 = complex.conj %f : complex<f32>
  // CHECK: %[[CD:.*]] = call @__ocml_conj_f64(%{{.*}})
  %cd2 = complex.conj %d : complex<f64>
  // CHECK: return %[[CF]], %[[CD]]
  return %cf2, %cd2 : complex<f32>, complex<f64>
}

//CHECK-LABEL: @pow_caller
func.func @pow_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[PF:.*]] = call @__ocml_cpow_f32(%{{.*}}, %{{.*}})
  %pf = complex.pow %f, %f : complex<f32>
  // CHECK: %[[PD:.*]] = call @__ocml_cpow_f64(%{{.*}}, %{{.*}})
  %pd = complex.pow %d, %d : complex<f64>
  // CHECK: return %[[PF]], %[[PD]]
  return %pf, %pd : complex<f32>, complex<f64>
}

//CHECK-LABEL: @sin_caller
func.func @sin_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[SF:.*]] = call @__ocml_csin_f32(%{{.*}})
  %sf2 = complex.sin %f : complex<f32>
  // CHECK: %[[SD:.*]] = call @__ocml_csin_f64(%{{.*}})
  %sd2 = complex.sin %d : complex<f64>
  // CHECK: return %[[SF]], %[[SD]]
  return %sf2, %sd2 : complex<f32>, complex<f64>
}

//CHECK-LABEL: @sqrt_caller
func.func @sqrt_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[SF:.*]] = call @__ocml_csqrt_f32(%{{.*}})
  %sf = complex.sqrt %f : complex<f32>
  // CHECK: %[[SD:.*]] = call @__ocml_csqrt_f64(%{{.*}})
  %sd = complex.sqrt %d : complex<f64>
  // CHECK: return %[[SF]], %[[SD]]
  return %sf, %sd : complex<f32>, complex<f64>
}

//CHECK-LABEL: @tan_caller
func.func @tan_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[TF:.*]] = call @__ocml_ctan_f32(%{{.*}})
  %tf2 = complex.tan %f : complex<f32>
  // CHECK: %[[TD:.*]] = call @__ocml_ctan_f64(%{{.*}})
  %td2 = complex.tan %d : complex<f64>
  // CHECK: return %[[TF]], %[[TD]]
  return %tf2, %td2 : complex<f32>, complex<f64>
}

//CHECK-LABEL: @tanh_caller
func.func @tanh_caller(%f: complex<f32>, %d: complex<f64>) -> (complex<f32>, complex<f64>) {
  // CHECK: %[[TF:.*]] = call @__ocml_ctanh_f32(%{{.*}})
  %tf = complex.tanh %f : complex<f32>
  // CHECK: %[[TD:.*]] = call @__ocml_ctanh_f64(%{{.*}})
  %td = complex.tanh %d : complex<f64>
  // CHECK: return %[[TF]], %[[TD]]
  return %tf, %td : complex<f32>, complex<f64>
}