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