Add new builtin code field to operator code
This is for addressing the builtin code shortage problem. PiperOrigin-RevId: 336083510 Change-Id: I0ca615ed0893e948ad6299221117e2c59f81cdba
This commit is contained in:
parent
1e68aaed08
commit
54151bec86
@ -459,11 +459,13 @@ node {
|
||||
# CHECK-LABEL: {
|
||||
# CHECK: version: 3,
|
||||
# CHECK: operator_codes: [ {
|
||||
# CHECK: builtin_code: CONV_2D,
|
||||
# CHECK: version: 3
|
||||
# CHECK: deprecated_builtin_code: 3,
|
||||
# CHECK: version: 3,
|
||||
# CHECK: builtin_code: CONV_2D
|
||||
# CHECK: }, {
|
||||
# CHECK: builtin_code: RESHAPE,
|
||||
# CHECK: deprecated_builtin_code: 22,
|
||||
# CHECK: version: 1
|
||||
# CHECK: builtin_code: RESHAPE
|
||||
# CHECK: } ],
|
||||
# CHECK: subgraphs: [ {
|
||||
# CHECK: tensors: [ {
|
||||
|
@ -4,8 +4,9 @@ func @main(tensor<1x384xf32>, tensor<1x96xf32>, tensor<384x480xf32>, tensor<384x
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: LSTM,
|
||||
// CHECK-NEXT: deprecated_builtin_code: 16,
|
||||
// CHECK-NEXT: version: 2
|
||||
// CHECK-NEXT: builtin_code: LSTM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -6,14 +6,17 @@ func @main(tensor<4xf32>) -> tensor<4xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: MUL,
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: CUSTOM,
|
||||
// CHECK-NEXT: custom_code: "MyCustomOp"
|
||||
// CHECK-NEXT: deprecated_builtin_code: 32,
|
||||
// CHECK-NEXT: custom_code: "MyCustomOp",
|
||||
// CHECK-NEXT: builtin_code: CUSTOM
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: EXP,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 47,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: EXP
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,11 +5,13 @@ func @main(tensor<1x224x224x3xf32>) -> tensor<1x112x112x32xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: DEQUANTIZE,
|
||||
// CHECK-NEXT: deprecated_builtin_code: 6,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: builtin_code: DEQUANTIZE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: DEPTHWISE_CONV_2D,
|
||||
// CHECK-NEXT: deprecated_builtin_code: 4,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: builtin_code: DEPTHWISE_CONV_2D
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,11 +5,13 @@ func @main(tensor<1x224x224x3xf32>) -> tensor<1x112x112x32xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: DEQUANTIZE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 6,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: DEQUANTIZE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: DEPTHWISE_CONV_2D,
|
||||
// CHECK-NEXT: version: 2
|
||||
// CHECK-NEXT: deprecated_builtin_code: 4,
|
||||
// CHECK-NEXT: version: 2,
|
||||
// CHECK-NEXT: builtin_code: DEPTHWISE_CONV_2D
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,11 +5,13 @@ func @main(tensor<4xf32>) -> tensor<4xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: MUL,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: EXP,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 47,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: EXP
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -6,8 +6,9 @@ func @main(tensor<4xf32>) -> tensor<4xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: FAKE_QUANT,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 80,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: FAKE_QUANT
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -4,8 +4,9 @@ func @main(%arg0: tensor<3x2xf32>) -> tensor<3x2xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: CUSTOM,
|
||||
// CHECK-NEXT: deprecated_builtin_code: 32,
|
||||
// CHECK-NEXT: custom_code: "FlexAddV2"
|
||||
// CHECK-NEXT: builtin_code: CUSTOM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<4xcomplex<f64>>, tensor<4xcomplex<f64>>) -> tensor<4xcomplex<f
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: CUSTOM,
|
||||
// CHECK-NEXT: custom_code: "FlexAdd"
|
||||
// CHECK-NEXT: deprecated_builtin_code: 32,
|
||||
// CHECK-NEXT: custom_code: "FlexAdd",
|
||||
// CHECK-NEXT: builtin_code: CUSTOM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<4xf64>, tensor<4xf64>) -> tensor<4xf64> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: CUSTOM,
|
||||
// CHECK-NEXT: custom_code: "FlexAdd"
|
||||
// CHECK-NEXT: deprecated_builtin_code: 32,
|
||||
// CHECK-NEXT: custom_code: "FlexAdd",
|
||||
// CHECK-NEXT: builtin_code: CUSTOM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,14 +5,17 @@ func @main(tensor<4xf32>) -> tensor<4xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: CUSTOM,
|
||||
// CHECK-NEXT: custom_code: "FlexDiv"
|
||||
// CHECK-NEXT: deprecated_builtin_code: 32,
|
||||
// CHECK-NEXT: custom_code: "FlexDiv",
|
||||
// CHECK-NEXT: builtin_code: CUSTOM
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: deprecated_builtin_code: 47,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: EXP
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<40x37xf32>, tensor<40x37xf32>) -> tensor<40x40xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: FULLY_CONNECTED,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 9,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: FULLY_CONNECTED
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<40x37xf32>, tensor<40x37xf32>) -> tensor<40x40xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: FULLY_CONNECTED,
|
||||
// CHECK-NEXT: version: 2
|
||||
// CHECK-NEXT: deprecated_builtin_code: 9,
|
||||
// CHECK-NEXT: version: 2,
|
||||
// CHECK-NEXT: builtin_code: FULLY_CONNECTED
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -3,8 +3,9 @@
|
||||
// CHECK: {
|
||||
// CHECK: version: 3,
|
||||
// CHECK: operator_codes: [ {
|
||||
// CHECK: builtin_code: CUSTOM,
|
||||
// CHECK: custom_code: "HashTableV2"
|
||||
// CHECK: deprecated_builtin_code: 32,
|
||||
// CHECK: custom_code: "HashTableV2",
|
||||
// CHECK: builtin_code: CUSTOM
|
||||
// CHECK: } ],
|
||||
// CHECK: subgraphs: [ {
|
||||
// CHECK: tensors: [ {
|
||||
|
@ -4,16 +4,19 @@
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: LESS,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 58,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: LESS
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: IF,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 118,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: IF
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: MUL,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,11 +5,13 @@ func @main(tensor<4xi1>) -> tensor<4xi1> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: LOGICAL_OR,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 84,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: LOGICAL_OR
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: LOGICAL_AND,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 86,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: LOGICAL_AND
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -4,8 +4,9 @@ func @main(tensor<1x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, t
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: LSTM,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 16,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: LSTM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -7,8 +7,9 @@ func @main(%arg0: tensor<1x528x!quant.uniform<i8:f32, 0.037248000502586365:-19>>
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: LSTM,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 16,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: LSTM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,20 +5,25 @@ func @main(tensor<4xf32>) -> tensor<4xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: SQUARED_DIFFERENCE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 99,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: SQUARED_DIFFERENCE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: MUL,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: DIV,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 42,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: DIV
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: EXP,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 47,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: EXP
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: NEG,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 59,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: NEG
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<3x!quant.uniform<i8:f32, 0.1>>) -> tensor<3x!quant.uniform<i8:
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: MUL,
|
||||
// CHECK-NEXT: version: 2
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 2,
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<3x!quant.uniform<i8:f32, 1.0>>) -> tensor<3x!quant.uniform<i8:
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: MUL,
|
||||
// CHECK-NEXT: version: 3
|
||||
// CHECK-NEXT: deprecated_builtin_code: 18,
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: builtin_code: MUL
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<1x6x6x16xf32>) -> tensor<1x1x1x16xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: AVERAGE_POOL_2D,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 1,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: AVERAGE_POOL_2D
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -3,8 +3,9 @@
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: CUSTOM,
|
||||
// CHECK-NEXT: custom_code: "NumericVerify"
|
||||
// CHECK-NEXT: deprecated_builtin_code: 32,
|
||||
// CHECK-NEXT: custom_code: "NumericVerify",
|
||||
// CHECK-NEXT: builtin_code: CUSTOM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -4,20 +4,25 @@ func @main(%arg0: tensor<1x224x224x3xf32>) -> tensor<1x1001xf32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: QUANTIZE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 114,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: QUANTIZE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: CONV_2D,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 3,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: CONV_2D
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: RESHAPE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 22,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: RESHAPE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: SOFTMAX,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 25,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: SOFTMAX
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: DEQUANTIZE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 6,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: DEQUANTIZE
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -5,8 +5,9 @@ func @main(tensor<3x2xi32>) -> tensor<6xi32> {
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: RESHAPE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 22,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: RESHAPE
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -7,8 +7,9 @@ func @main(tensor<3x2xi32>) -> tensor<3x2xi32>
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: SUB,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 41,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: SUB
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: } ],
|
||||
|
@ -4,8 +4,9 @@ func @main(tensor<4 x f32>, tensor<4 x f32>, tensor<4 x f32>, tensor<4 x f32>) -
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: SVDF,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 27,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: SVDF
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -4,8 +4,9 @@ func @main(tensor<4 x f32>, tensor<4 x i8>, tensor<4 x f32>, tensor<4 x f32>) ->
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: SVDF,
|
||||
// CHECK-NEXT: version: 2
|
||||
// CHECK-NEXT: deprecated_builtin_code: 27,
|
||||
// CHECK-NEXT: version: 2,
|
||||
// CHECK-NEXT: builtin_code: SVDF
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -3,14 +3,17 @@
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: WHILE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 119,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: WHILE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: GREATER,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 61,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: GREATER
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: SUB,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 41,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: SUB
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: } ],
|
||||
|
@ -4,8 +4,9 @@ func @main(%arg0: tensor<4xi32>, %arg1: tensor<32x4x4x128xf32>, %arg2: tensor<1x
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: TRANSPOSE_CONV,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 67,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: TRANSPOSE_CONV
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -3,8 +3,9 @@
|
||||
// CHECK: {
|
||||
// CHECK: version: 3,
|
||||
// CHECK: operator_codes: [ {
|
||||
// CHECK: builtin_code: CUSTOM,
|
||||
// CHECK: custom_code: "SomeOperation"
|
||||
// CHECK: deprecated_builtin_code: 32,
|
||||
// CHECK: custom_code: "SomeOperation",
|
||||
// CHECK: builtin_code: CUSTOM
|
||||
// CHECK: } ],
|
||||
// CHECK: subgraphs: [ {
|
||||
// CHECK: tensors: [ {
|
||||
|
@ -4,8 +4,9 @@ func @main(tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, t
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: UNIDIRECTIONAL_SEQUENCE_LSTM,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 44,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: UNIDIRECTIONAL_SEQUENCE_LSTM
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -4,8 +4,9 @@ func @main(tensor<4 x f32>, tensor<4 x f32>, tensor<4 x f32>, tensor<4 x f32>) -
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: UNIDIRECTIONAL_SEQUENCE_RNN,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 35,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: UNIDIRECTIONAL_SEQUENCE_RNN
|
||||
// CHECK-NEXT: } ],
|
||||
// CHECK-NEXT: subgraphs: [ {
|
||||
// CHECK-NEXT: tensors: [ {
|
||||
|
@ -3,14 +3,17 @@
|
||||
// CHECK: {
|
||||
// CHECK-NEXT: version: 3,
|
||||
// CHECK-NEXT: operator_codes: [ {
|
||||
// CHECK-NEXT: builtin_code: WHILE,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 119,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: WHILE
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: GREATER,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 61,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: GREATER
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: builtin_code: SUB,
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: deprecated_builtin_code: 41,
|
||||
// CHECK-NEXT: version: 1,
|
||||
// CHECK-NEXT: builtin_code: SUB
|
||||
// CHECK-NEXT: }, {
|
||||
// CHECK-NEXT: version: 1
|
||||
// CHECK-NEXT: } ],
|
||||
|
@ -24,7 +24,8 @@ extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
// The enum for builtin operators.
|
||||
// Note: CUSTOM and DELEGATE are 2 special ops which are not real built-in ops.
|
||||
// Note: CUSTOM, DELEGATE, and PLACEHOLDER_FOR_GREATER_OP_CODES are 3 special
|
||||
// ops which are not real built-in ops.
|
||||
typedef enum {
|
||||
kTfLiteBuiltinAdd = 0,
|
||||
kTfLiteBuiltinAveragePool2d = 1,
|
||||
@ -153,6 +154,7 @@ typedef enum {
|
||||
kTfLiteBuiltinDensify = 124,
|
||||
kTfLiteBuiltinSegmentSum = 125,
|
||||
kTfLiteBuiltinBatchMatmul = 126,
|
||||
kTfLiteBuiltinPlaceholderForGreaterOpCodes = 127,
|
||||
} TfLiteBuiltinOperator;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -803,6 +803,8 @@ TfLiteStatus ParseOpDataTfLite(const Operator* op, BuiltinOperator op_type,
|
||||
case BuiltinOperator_DENSIFY:
|
||||
case BuiltinOperator_SEGMENT_SUM:
|
||||
return kTfLiteOk;
|
||||
case BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES:
|
||||
return kTfLiteError;
|
||||
}
|
||||
return kTfLiteError;
|
||||
} // NOLINT[readability/fn_size]
|
||||
|
@ -163,8 +163,11 @@ class OpOptionData {
|
||||
op_to_option_["UNIDIRECTIONAL_SEQUENCE_RNN"] = "SequenceRNNOptions";
|
||||
op_to_option_["MAXIMUM"] = "MaximumMinimumOptions";
|
||||
op_to_option_["MINIMUM"] = "MaximumMinimumOptions";
|
||||
|
||||
// These operators are not real ones.
|
||||
op_to_option_["CUSTOM"] = ""; // TODO(aselle): maybe something else.
|
||||
op_to_option_["DELEGATE"] = ""; // TODO(aselle): maybe something else.
|
||||
op_to_option_["PLACEHOLDER_FOR_GREATER_OP_CODES"] = "";
|
||||
|
||||
// Manually specified mappings between ops to "none" options -- these are
|
||||
// ops without a corresponding Options message in schema as yet. If these
|
||||
|
@ -73,6 +73,7 @@ exports_files([
|
||||
"schema_v1.fbs",
|
||||
"schema_v2.fbs",
|
||||
"schema_v3.fbs",
|
||||
"schema_v3a.fbs",
|
||||
])
|
||||
|
||||
flatbuffer_cc_library(
|
||||
@ -115,7 +116,7 @@ cc_test(
|
||||
srcs = ["flatbuffer_compatibility_test.cc"],
|
||||
data = [
|
||||
"schema.fbs",
|
||||
"schema_v3.fbs",
|
||||
"schema_v3a.fbs",
|
||||
],
|
||||
tags = [
|
||||
"no_oss",
|
||||
|
@ -46,7 +46,8 @@ extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
// The enum for builtin operators.
|
||||
// Note: CUSTOM and DELEGATE are 2 special ops which are not real built-in ops.
|
||||
// Note: CUSTOM, DELEGATE, and PLACEHOLDER_FOR_GREATER_OP_CODES are 3 special
|
||||
// ops which are not real built-in ops.
|
||||
typedef enum {
|
||||
)";
|
||||
|
||||
|
@ -61,8 +61,7 @@ TEST(SchemaTest, TestCompatibility) {
|
||||
// Read file contents of schemas into strings
|
||||
// TODO(aselle): Need a reliable way to load files.
|
||||
std::string base_contents, current_contents;
|
||||
const char *base_filename =
|
||||
TFLITE_TF_PREFIX "lite/schema/schema_v3.fbs";
|
||||
const char *base_filename = TFLITE_TF_PREFIX "lite/schema/schema_v3a.fbs";
|
||||
const char *current_filename =
|
||||
TFLITE_TF_PREFIX "lite/schema/schema.fbs";
|
||||
|
||||
|
@ -17,6 +17,8 @@
|
||||
// Version 1: Add subgraphs to schema.
|
||||
// Version 2: Rename operators to conform to NN API.
|
||||
// Version 3: Move buffer data from Model.Subgraph.Tensors to Model.Buffers.
|
||||
// Version 3a: Add new builtin op code field. Has backward compatibility with
|
||||
// version 3.
|
||||
|
||||
namespace tflite;
|
||||
|
||||
@ -215,7 +217,7 @@ table Tensor {
|
||||
// object containing configuration parameters, builtins have a predetermined
|
||||
// set of acceptable options.
|
||||
|
||||
enum BuiltinOperator : byte {
|
||||
enum BuiltinOperator : int32 {
|
||||
ADD = 0,
|
||||
AVERAGE_POOL_2D = 1,
|
||||
CONCATENATION = 2,
|
||||
@ -248,7 +250,6 @@ enum BuiltinOperator : byte {
|
||||
SPACE_TO_DEPTH = 26,
|
||||
SVDF = 27,
|
||||
TANH = 28,
|
||||
// TODO(aselle): Consider rename to CONCATENATE_EMBEDDINGS
|
||||
CONCAT_EMBEDDINGS = 29,
|
||||
SKIP_GRAM = 30,
|
||||
CALL = 31,
|
||||
@ -349,7 +350,8 @@ enum BuiltinOperator : byte {
|
||||
SELECT_V2 = 123,
|
||||
DENSIFY = 124,
|
||||
SEGMENT_SUM = 125,
|
||||
BATCH_MATMUL = 126
|
||||
BATCH_MATMUL = 126,
|
||||
PLACEHOLDER_FOR_GREATER_OP_CODES = 127
|
||||
}
|
||||
|
||||
|
||||
@ -982,12 +984,21 @@ table BatchMatMulOptions {
|
||||
// An OperatorCode can be an enum value (BuiltinOperator) if the operator is a
|
||||
// builtin, or a string if the operator is custom.
|
||||
table OperatorCode {
|
||||
builtin_code:BuiltinOperator;
|
||||
// This field is for backward compatibility. This field will be used when
|
||||
// the value of the extended builtin_code field has less than
|
||||
// BulitinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES.
|
||||
deprecated_builtin_code:byte;
|
||||
custom_code:string;
|
||||
|
||||
// The version of the operator. The version need to be bumped whenever new
|
||||
// parameters are introduced into an op.
|
||||
version:int = 1;
|
||||
|
||||
// This field is introduced for resolving op builtin code shortage problem
|
||||
// (the original BuiltinOperator enum field was represented as a byte).
|
||||
// This field will be used when the value of the extended builtin_code field
|
||||
// has greater than BulitinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES.
|
||||
builtin_code:BuiltinOperator;
|
||||
}
|
||||
|
||||
enum CustomOptionsFormat : byte {
|
||||
|
@ -781,11 +781,12 @@ enum BuiltinOperator {
|
||||
BuiltinOperator_DENSIFY = 124,
|
||||
BuiltinOperator_SEGMENT_SUM = 125,
|
||||
BuiltinOperator_BATCH_MATMUL = 126,
|
||||
BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES = 127,
|
||||
BuiltinOperator_MIN = BuiltinOperator_ADD,
|
||||
BuiltinOperator_MAX = BuiltinOperator_BATCH_MATMUL
|
||||
BuiltinOperator_MAX = BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES
|
||||
};
|
||||
|
||||
inline const BuiltinOperator (&EnumValuesBuiltinOperator())[127] {
|
||||
inline const BuiltinOperator (&EnumValuesBuiltinOperator())[128] {
|
||||
static const BuiltinOperator values[] = {
|
||||
BuiltinOperator_ADD,
|
||||
BuiltinOperator_AVERAGE_POOL_2D,
|
||||
@ -913,13 +914,14 @@ inline const BuiltinOperator (&EnumValuesBuiltinOperator())[127] {
|
||||
BuiltinOperator_SELECT_V2,
|
||||
BuiltinOperator_DENSIFY,
|
||||
BuiltinOperator_SEGMENT_SUM,
|
||||
BuiltinOperator_BATCH_MATMUL
|
||||
BuiltinOperator_BATCH_MATMUL,
|
||||
BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES
|
||||
};
|
||||
return values;
|
||||
}
|
||||
|
||||
inline const char * const *EnumNamesBuiltinOperator() {
|
||||
static const char * const names[128] = {
|
||||
static const char * const names[129] = {
|
||||
"ADD",
|
||||
"AVERAGE_POOL_2D",
|
||||
"CONCATENATION",
|
||||
@ -1047,13 +1049,14 @@ inline const char * const *EnumNamesBuiltinOperator() {
|
||||
"DENSIFY",
|
||||
"SEGMENT_SUM",
|
||||
"BATCH_MATMUL",
|
||||
"PLACEHOLDER_FOR_GREATER_OP_CODES",
|
||||
nullptr
|
||||
};
|
||||
return names;
|
||||
}
|
||||
|
||||
inline const char *EnumNameBuiltinOperator(BuiltinOperator e) {
|
||||
if (flatbuffers::IsOutRange(e, BuiltinOperator_ADD, BuiltinOperator_BATCH_MATMUL)) return "";
|
||||
if (flatbuffers::IsOutRange(e, BuiltinOperator_ADD, BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES)) return "";
|
||||
const size_t index = static_cast<size_t>(e);
|
||||
return EnumNamesBuiltinOperator()[index];
|
||||
}
|
||||
@ -9336,24 +9339,27 @@ flatbuffers::Offset<BatchMatMulOptions> CreateBatchMatMulOptions(flatbuffers::Fl
|
||||
|
||||
struct OperatorCodeT : public flatbuffers::NativeTable {
|
||||
typedef OperatorCode TableType;
|
||||
tflite::BuiltinOperator builtin_code;
|
||||
int8_t deprecated_builtin_code;
|
||||
std::string custom_code;
|
||||
int32_t version;
|
||||
tflite::BuiltinOperator builtin_code;
|
||||
OperatorCodeT()
|
||||
: builtin_code(tflite::BuiltinOperator_ADD),
|
||||
version(1) {
|
||||
: deprecated_builtin_code(0),
|
||||
version(1),
|
||||
builtin_code(tflite::BuiltinOperator_ADD) {
|
||||
}
|
||||
};
|
||||
|
||||
struct OperatorCode FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
typedef OperatorCodeT NativeTableType;
|
||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||
VT_BUILTIN_CODE = 4,
|
||||
VT_DEPRECATED_BUILTIN_CODE = 4,
|
||||
VT_CUSTOM_CODE = 6,
|
||||
VT_VERSION = 8
|
||||
VT_VERSION = 8,
|
||||
VT_BUILTIN_CODE = 10
|
||||
};
|
||||
tflite::BuiltinOperator builtin_code() const {
|
||||
return static_cast<tflite::BuiltinOperator>(GetField<int8_t>(VT_BUILTIN_CODE, 0));
|
||||
int8_t deprecated_builtin_code() const {
|
||||
return GetField<int8_t>(VT_DEPRECATED_BUILTIN_CODE, 0);
|
||||
}
|
||||
const flatbuffers::String *custom_code() const {
|
||||
return GetPointer<const flatbuffers::String *>(VT_CUSTOM_CODE);
|
||||
@ -9361,12 +9367,16 @@ struct OperatorCode FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
int32_t version() const {
|
||||
return GetField<int32_t>(VT_VERSION, 1);
|
||||
}
|
||||
tflite::BuiltinOperator builtin_code() const {
|
||||
return static_cast<tflite::BuiltinOperator>(GetField<int32_t>(VT_BUILTIN_CODE, 0));
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<int8_t>(verifier, VT_BUILTIN_CODE) &&
|
||||
VerifyField<int8_t>(verifier, VT_DEPRECATED_BUILTIN_CODE) &&
|
||||
VerifyOffset(verifier, VT_CUSTOM_CODE) &&
|
||||
verifier.VerifyString(custom_code()) &&
|
||||
VerifyField<int32_t>(verifier, VT_VERSION) &&
|
||||
VerifyField<int32_t>(verifier, VT_BUILTIN_CODE) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
OperatorCodeT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const;
|
||||
@ -9377,8 +9387,8 @@ struct OperatorCode FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
struct OperatorCodeBuilder {
|
||||
flatbuffers::FlatBufferBuilder &fbb_;
|
||||
flatbuffers::uoffset_t start_;
|
||||
void add_builtin_code(tflite::BuiltinOperator builtin_code) {
|
||||
fbb_.AddElement<int8_t>(OperatorCode::VT_BUILTIN_CODE, static_cast<int8_t>(builtin_code), 0);
|
||||
void add_deprecated_builtin_code(int8_t deprecated_builtin_code) {
|
||||
fbb_.AddElement<int8_t>(OperatorCode::VT_DEPRECATED_BUILTIN_CODE, deprecated_builtin_code, 0);
|
||||
}
|
||||
void add_custom_code(flatbuffers::Offset<flatbuffers::String> custom_code) {
|
||||
fbb_.AddOffset(OperatorCode::VT_CUSTOM_CODE, custom_code);
|
||||
@ -9386,6 +9396,9 @@ struct OperatorCodeBuilder {
|
||||
void add_version(int32_t version) {
|
||||
fbb_.AddElement<int32_t>(OperatorCode::VT_VERSION, version, 1);
|
||||
}
|
||||
void add_builtin_code(tflite::BuiltinOperator builtin_code) {
|
||||
fbb_.AddElement<int32_t>(OperatorCode::VT_BUILTIN_CODE, static_cast<int32_t>(builtin_code), 0);
|
||||
}
|
||||
explicit OperatorCodeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
|
||||
: fbb_(_fbb) {
|
||||
start_ = fbb_.StartTable();
|
||||
@ -9400,27 +9413,31 @@ struct OperatorCodeBuilder {
|
||||
|
||||
inline flatbuffers::Offset<OperatorCode> CreateOperatorCode(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
tflite::BuiltinOperator builtin_code = tflite::BuiltinOperator_ADD,
|
||||
int8_t deprecated_builtin_code = 0,
|
||||
flatbuffers::Offset<flatbuffers::String> custom_code = 0,
|
||||
int32_t version = 1) {
|
||||
int32_t version = 1,
|
||||
tflite::BuiltinOperator builtin_code = tflite::BuiltinOperator_ADD) {
|
||||
OperatorCodeBuilder builder_(_fbb);
|
||||
builder_.add_builtin_code(builtin_code);
|
||||
builder_.add_version(version);
|
||||
builder_.add_custom_code(custom_code);
|
||||
builder_.add_builtin_code(builtin_code);
|
||||
builder_.add_deprecated_builtin_code(deprecated_builtin_code);
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
inline flatbuffers::Offset<OperatorCode> CreateOperatorCodeDirect(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
tflite::BuiltinOperator builtin_code = tflite::BuiltinOperator_ADD,
|
||||
int8_t deprecated_builtin_code = 0,
|
||||
const char *custom_code = nullptr,
|
||||
int32_t version = 1) {
|
||||
int32_t version = 1,
|
||||
tflite::BuiltinOperator builtin_code = tflite::BuiltinOperator_ADD) {
|
||||
auto custom_code__ = custom_code ? _fbb.CreateString(custom_code) : 0;
|
||||
return tflite::CreateOperatorCode(
|
||||
_fbb,
|
||||
builtin_code,
|
||||
deprecated_builtin_code,
|
||||
custom_code__,
|
||||
version);
|
||||
version,
|
||||
builtin_code);
|
||||
}
|
||||
|
||||
flatbuffers::Offset<OperatorCode> CreateOperatorCode(flatbuffers::FlatBufferBuilder &_fbb, const OperatorCodeT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr);
|
||||
@ -13695,9 +13712,10 @@ inline OperatorCodeT *OperatorCode::UnPack(const flatbuffers::resolver_function_
|
||||
inline void OperatorCode::UnPackTo(OperatorCodeT *_o, const flatbuffers::resolver_function_t *_resolver) const {
|
||||
(void)_o;
|
||||
(void)_resolver;
|
||||
{ auto _e = builtin_code(); _o->builtin_code = _e; }
|
||||
{ auto _e = deprecated_builtin_code(); _o->deprecated_builtin_code = _e; }
|
||||
{ auto _e = custom_code(); if (_e) _o->custom_code = _e->str(); }
|
||||
{ auto _e = version(); _o->version = _e; }
|
||||
{ auto _e = builtin_code(); _o->builtin_code = _e; }
|
||||
}
|
||||
|
||||
inline flatbuffers::Offset<OperatorCode> OperatorCode::Pack(flatbuffers::FlatBufferBuilder &_fbb, const OperatorCodeT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
|
||||
@ -13708,14 +13726,16 @@ inline flatbuffers::Offset<OperatorCode> CreateOperatorCode(flatbuffers::FlatBuf
|
||||
(void)_rehasher;
|
||||
(void)_o;
|
||||
struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const OperatorCodeT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
|
||||
auto _builtin_code = _o->builtin_code;
|
||||
auto _deprecated_builtin_code = _o->deprecated_builtin_code;
|
||||
auto _custom_code = _o->custom_code.empty() ? 0 : _fbb.CreateString(_o->custom_code);
|
||||
auto _version = _o->version;
|
||||
auto _builtin_code = _o->builtin_code;
|
||||
return tflite::CreateOperatorCode(
|
||||
_fbb,
|
||||
_builtin_code,
|
||||
_deprecated_builtin_code,
|
||||
_custom_code,
|
||||
_version);
|
||||
_version,
|
||||
_builtin_code);
|
||||
}
|
||||
|
||||
inline OperatorT *Operator::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
|
||||
|
@ -19,21 +19,90 @@ limitations under the License.
|
||||
namespace tflite {
|
||||
|
||||
// The following GetBuiltinCode methods are the utility methods for reading
|
||||
// builtin operatore code. Later, theses method will be used for upcoming
|
||||
// builtin code compatibility changes.
|
||||
// builtin operatore code, ensuring compatibility issues between v3 and v3a
|
||||
// schema. Always the maximum value of the two fields always will be the correct
|
||||
// value as follows:
|
||||
//
|
||||
// - Supporting schema version v3 models
|
||||
//
|
||||
// The `builtin_code` field is not available in the v3 models. Flatbuffer
|
||||
// library will feed zero value, which is the default value in the v3a schema.
|
||||
// The actual builtin operatore code value will exist in the
|
||||
// `deprecated_builtin_code` field. At the same time, it implies that
|
||||
// `deprecated_builtin_code` >= `builtin_code` and the maximum value of the two
|
||||
// fields will be same with `deprecated_builtin_code'.
|
||||
//
|
||||
// - Supporting builtin operator codes beyonds 127
|
||||
//
|
||||
// New builtin operators, whose operator code is larger than 127, can not be
|
||||
// assigned to the `deprecated_builtin_code` field. In such cases, the
|
||||
// value of the `builtin_code` field should be used for the builtin operator
|
||||
// code. In the case, the maximum value of the two fields will be the value of
|
||||
// the `builtin_code` as the right value.
|
||||
|
||||
BuiltinOperator GetBuiltinCode(const OperatorCode *op_code) {
|
||||
// Caller should guarantee that the given argument value is not a nullptr.
|
||||
TFLITE_DCHECK(op_code != nullptr);
|
||||
|
||||
return op_code->builtin_code();
|
||||
return (op_code->builtin_code() ? op_code->builtin_code()
|
||||
: static_cast<BuiltinOperator>(
|
||||
op_code->deprecated_builtin_code()));
|
||||
}
|
||||
|
||||
BuiltinOperator GetBuiltinCode(const OperatorCodeT *op_code) {
|
||||
// Caller should guarantee that the given argument value is not a nullptr.
|
||||
TFLITE_DCHECK(op_code != nullptr);
|
||||
|
||||
return op_code->builtin_code;
|
||||
return (op_code->builtin_code
|
||||
? op_code->builtin_code
|
||||
: static_cast<BuiltinOperator>(op_code->deprecated_builtin_code));
|
||||
}
|
||||
|
||||
int8_t ConvertBuiltinCodeToDeprecatedBuiltinCode(
|
||||
const BuiltinOperator builtin_code) {
|
||||
return (builtin_code < BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES)
|
||||
? static_cast<int8_t>(builtin_code)
|
||||
: static_cast<int8_t>(
|
||||
BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES);
|
||||
}
|
||||
|
||||
// The following methods are the following `OperatorCode` table object creation
|
||||
// methods for backward compatibility. These are manually copied from the
|
||||
// flatbuffer generated code from schema v3. They serve as overloads for the
|
||||
// v3a's CreateOperatorCode functions in schema_generated.h and enable code that
|
||||
// still assumes flatbuffer schema v3 to be unchanged with the inclusion of the
|
||||
// schema_utils header.
|
||||
// TODO(b/162392898): remove once all callers are updated to use schema v3a
|
||||
// functions.
|
||||
|
||||
flatbuffers::Offset<OperatorCode> CreateOperatorCode(
|
||||
flatbuffers::FlatBufferBuilder &_fbb, BuiltinOperator builtin_code,
|
||||
flatbuffers::Offset<flatbuffers::String> custom_code, int32_t version) {
|
||||
OperatorCodeBuilder builder_(_fbb);
|
||||
builder_.add_version(version);
|
||||
|
||||
int8_t deprecated_builtin_code =
|
||||
static_cast<int8_t>(BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES);
|
||||
if (builtin_code < BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES) {
|
||||
deprecated_builtin_code = static_cast<int8_t>(builtin_code);
|
||||
}
|
||||
builder_.add_deprecated_builtin_code(deprecated_builtin_code);
|
||||
builder_.add_custom_code(custom_code);
|
||||
builder_.add_builtin_code(builtin_code);
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
flatbuffers::Offset<OperatorCode> CreateOperatorCodeDirect(
|
||||
flatbuffers::FlatBufferBuilder &_fbb, BuiltinOperator builtin_code,
|
||||
const char *custom_code, int32_t version) {
|
||||
auto custom_code__ = custom_code ? _fbb.CreateString(custom_code) : 0;
|
||||
int8_t deprecated_builtin_code =
|
||||
static_cast<int8_t>(BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES);
|
||||
if (builtin_code < BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES) {
|
||||
deprecated_builtin_code = static_cast<int8_t>(builtin_code);
|
||||
}
|
||||
return CreateOperatorCode(_fbb, deprecated_builtin_code, custom_code__,
|
||||
version, builtin_code);
|
||||
}
|
||||
|
||||
} // namespace tflite
|
||||
|
@ -28,6 +28,22 @@ BuiltinOperator GetBuiltinCode(const OperatorCode *op_code);
|
||||
|
||||
BuiltinOperator GetBuiltinCode(const OperatorCodeT *op_code);
|
||||
|
||||
int8_t ConvertBuiltinCodeToDeprecatedBuiltinCode(
|
||||
const BuiltinOperator builtin_code);
|
||||
|
||||
// The following methods are for backward compatibility for the early version
|
||||
// three, which does not have an extended builtin code.
|
||||
flatbuffers::Offset<OperatorCode> CreateOperatorCode(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
BuiltinOperator builtin_code = BuiltinOperator_ADD,
|
||||
flatbuffers::Offset<flatbuffers::String> custom_code = 0,
|
||||
int32_t version = 1);
|
||||
|
||||
flatbuffers::Offset<OperatorCode> CreateOperatorCodeDirect(
|
||||
flatbuffers::FlatBufferBuilder &_fbb,
|
||||
BuiltinOperator builtin_code = BuiltinOperator_ADD,
|
||||
const char *custom_code = nullptr, int32_t version = 1);
|
||||
|
||||
} // namespace tflite
|
||||
|
||||
#endif // TENSORFLOW_LITE_SCHEMA_SCHEMA_UTILS_H_
|
||||
|
1109
tensorflow/lite/schema/schema_v3a.fbs
Normal file
1109
tensorflow/lite/schema/schema_v3a.fbs
Normal file
File diff suppressed because it is too large
Load Diff
@ -297,6 +297,8 @@ int32_t GetOrInsertDequantizeOpCodeIndex(ModelT* model) {
|
||||
model->operator_codes.push_back(absl::make_unique<OperatorCodeT>());
|
||||
int op_code_idx = model->operator_codes.size() - 1;
|
||||
model->operator_codes[op_code_idx]->builtin_code = BuiltinOperator_DEQUANTIZE;
|
||||
model->operator_codes[op_code_idx]->deprecated_builtin_code =
|
||||
static_cast<int8_t>(BuiltinOperator_DEQUANTIZE);
|
||||
// Version 2 and onwards supports INT8 inputs.
|
||||
model->operator_codes[op_code_idx]->version = 2;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user