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