xref: /llvm-project/mlir/test/Dialect/Quant/parse-uniform.mlir (revision a6cef03f66ca76169ba629d21f1245b50b646ee0)
1// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file | FileCheck %s
2
3// -----
4// All per-layer params specified:
5//   [signed] storageType, storageTypeMin, storageTypeMax, expressedType, scale, zeroPoint
6// CHECK: !quant.uniform<i8<-8:7>:f32, 9.987200e-01:127>
7!qalias = !quant.uniform<i8<-8:7>:f32, 0.99872:127>
8func.func @parse() -> !qalias {
9  %0 = "foo"() : () -> !qalias
10  return %0 : !qalias
11}
12
13// -----
14// Trailing whitespace.
15// CHECK: !quant.uniform<i8<-8:7>:f32, 9.987200e-01:127>
16!qalias = !quant.uniform<i8<-8:7>:f32, 0.99872:127  >
17func.func @parse() -> !qalias {
18  %0 = "foo"() : () -> !qalias
19  return %0 : !qalias
20}
21
22// -----
23// Required per-layer params specified:
24//   [unsigned] storageType, expressedType, scale
25// CHECK: !quant.uniform<u8:f32, 9.987200e-01>
26!qalias = !quant.uniform<u8:f32, 0.99872>
27func.func @parse() -> !qalias {
28  %0 = "foo"() : () -> !qalias
29  return %0 : !qalias
30}
31
32// -----
33// Exponential scale (-)
34// CHECK: !quant.uniform<u8:f32, 2.000000e-02>
35!qalias = !quant.uniform<u8:f32, 2.0e-2>
36func.func @parse() -> !qalias {
37  %0 = "foo"() : () -> !qalias
38  return %0 : !qalias
39}
40
41// -----
42// Exponential scale (+)
43// CHECK: !quant.uniform<u8:f32, 2.000000e+02>
44!qalias = !quant.uniform<u8:f32, 2.0e+2>
45func.func @parse() -> !qalias {
46  %0 = "foo"() : () -> !qalias
47  return %0 : !qalias
48}
49
50// -----
51// Storage type: i16
52// CHECK: !quant.uniform<i16:f32, 2.000000e+02>
53!qalias = !quant.uniform<i16:f32, 2.0e+2>
54func.func @parse() -> !qalias {
55  %0 = "foo"() : () -> !qalias
56  return %0 : !qalias
57}
58
59// -----
60// Storage type: u16
61// CHECK: !quant.uniform<u16:f32, 2.000000e+02>
62!qalias = !quant.uniform<u16:f32, 2.0e+2>
63func.func @parse() -> !qalias {
64  %0 = "foo"() : () -> !qalias
65  return %0 : !qalias
66}
67
68// -----
69// Storage type: i32
70// CHECK: !quant.uniform<i32:f32, 2.000000e+02>
71!qalias = !quant.uniform<i32:f32, 2.0e+2>
72func.func @parse() -> !qalias {
73  %0 = "foo"() : () -> !qalias
74  return %0 : !qalias
75}
76
77// -----
78// Storage type: u32
79// CHECK: !quant.uniform<u32:f32, 2.000000e+02>
80!qalias = !quant.uniform<u32:f32, 2.0e+2>
81func.func @parse() -> !qalias {
82  %0 = "foo"() : () -> !qalias
83  return %0 : !qalias
84}
85
86// -----
87// Expressed type: f32
88// CHECK: !quant.uniform<u8:f32, 2.000000e+02>
89!qalias = !quant.uniform<u8:f32, 2.0e+2>
90func.func @parse() -> !qalias {
91  %0 = "foo"() : () -> !qalias
92  return %0 : !qalias
93}
94
95// -----
96// Expressed type: f32
97// CHECK: !quant.uniform<u8:f32, 0x41646ABBA0000000:128>
98!qalias = !quant.uniform<u8:f32, 0x41646ABBA0000000:128>
99func.func @parse() -> !qalias {
100  %0 = "foo"() : () -> !qalias
101  return %0 : !qalias
102}
103
104// -----
105// Expressed type: f16
106// CHECK: !quant.uniform<u8:f16, 2.000000e+02>
107!qalias = !quant.uniform<u8:f16, 2.0e+2>
108func.func @parse() -> !qalias {
109  %0 = "foo"() : () -> !qalias
110  return %0 : !qalias
111}
112
113// -----
114// Expressed type: f64
115// CHECK: !quant.uniform<u8:f64, 2.000000e+02>
116!qalias = !quant.uniform<u8:f64, 2.0e+2>
117func.func @parse() -> !qalias {
118  %0 = "foo"() : () -> !qalias
119  return %0 : !qalias
120}
121
122// -----
123// Expressed type: bf16
124// CHECK: !quant.uniform<u8:bf16, 2.000000e+02>
125!qalias = !quant.uniform<u8:bf16, 2.0e+2>
126func.func @parse() -> !qalias {
127  %0 = "foo"() : () -> !qalias
128  return %0 : !qalias
129}
130
131// -----
132// Per-axis scales and zero points (affine)
133// CHECK: !quant.uniform<u8:f32:1, {2.000000e+02:-120,9.987200e-01:127}>
134!qalias = !quant.uniform<u8:f32:1, {2.0e+2:-120,0.99872:127}>
135func.func @parse() -> !qalias {
136  %0 = "foo"() : () -> !qalias
137  return %0 : !qalias
138}
139
140// -----
141// Per-axis scales and no zero points (fixedpoint)
142// CHECK: !quant.uniform<i8:f32:1, {2.000000e+02,9.987200e-01}>
143!qalias = !quant.uniform<i8:f32:1, {2.0e+2,0.99872}>
144func.func @parse() -> !qalias {
145  %0 = "foo"() : () -> !qalias
146  return %0 : !qalias
147}
148
149// -----
150// Per-axis scales and zero points (mixed affine and fixedpoint)
151// CHECK: !quant.uniform<i8:f32:1, {2.000000e+02,9.987200e-01:120}>
152!qalias = !quant.uniform<i8:f32:1, {2.0e+2,0.99872:120}>
153func.func @parse() -> !qalias {
154  %0 = "foo"() : () -> !qalias
155  return %0 : !qalias
156}
157