1// RUN: flatbuffer_translate -mlir-to-tflite-flatbuffer %s -o - | flatbuffer_to_string - | FileCheck %s 2 3func.func @main(tensor<1x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<1x4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4x4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>) -> tensor<1x4xf32> { 4// CHECK: { 5// CHECK-NEXT: version: 3, 6// CHECK-NEXT: operator_codes: [ { 7// CHECK-NEXT: deprecated_builtin_code: 16, 8// CHECK-NEXT: version: 1, 9// CHECK-NEXT: builtin_code: LSTM 10// CHECK-NEXT: } ], 11// CHECK-NEXT: subgraphs: [ { 12// CHECK-NEXT: tensors: [ { 13// CHECK-NEXT: shape: [ 1, 4 ], 14// CHECK-NEXT: buffer: 1, 15// CHECK-NEXT: name: "arg0", 16// CHECK-NEXT: quantization: { 17// CHECK-EMPTY: 18// CHECK-NEXT: }, 19// CHECK-NEXT: has_rank: true 20// CHECK-NEXT: }, { 21// CHECK-NEXT: shape: [ 4, 4 ], 22// CHECK-NEXT: buffer: 2, 23// CHECK-NEXT: name: "arg1", 24// CHECK-NEXT: quantization: { 25// CHECK-EMPTY: 26// CHECK-NEXT: }, 27// CHECK-NEXT: has_rank: true 28// CHECK-NEXT: }, { 29// CHECK-NEXT: shape: [ 4, 4 ], 30// CHECK-NEXT: buffer: 3, 31// CHECK-NEXT: name: "arg2", 32// CHECK-NEXT: quantization: { 33// CHECK-EMPTY: 34// CHECK-NEXT: }, 35// CHECK-NEXT: has_rank: true 36// CHECK-NEXT: }, { 37// CHECK-NEXT: shape: [ 4, 4 ], 38// CHECK-NEXT: buffer: 4, 39// CHECK-NEXT: name: "arg3", 40// CHECK-NEXT: quantization: { 41// CHECK-EMPTY: 42// CHECK-NEXT: }, 43// CHECK-NEXT: has_rank: true 44// CHECK-NEXT: }, { 45// CHECK-NEXT: shape: [ 4, 4 ], 46// CHECK-NEXT: buffer: 5, 47// CHECK-NEXT: name: "arg4", 48// CHECK-NEXT: quantization: { 49// CHECK-EMPTY: 50// CHECK-NEXT: }, 51// CHECK-NEXT: has_rank: true 52// CHECK-NEXT: }, { 53// CHECK-NEXT: shape: [ 4, 4 ], 54// CHECK-NEXT: buffer: 6, 55// CHECK-NEXT: name: "arg5", 56// CHECK-NEXT: quantization: { 57// CHECK-EMPTY: 58// CHECK-NEXT: }, 59// CHECK-NEXT: has_rank: true 60// CHECK-NEXT: }, { 61// CHECK-NEXT: shape: [ 4, 4 ], 62// CHECK-NEXT: buffer: 7, 63// CHECK-NEXT: name: "arg6", 64// CHECK-NEXT: quantization: { 65// CHECK-EMPTY: 66// CHECK-NEXT: }, 67// CHECK-NEXT: has_rank: true 68// CHECK-NEXT: }, { 69// CHECK-NEXT: shape: [ 4, 4 ], 70// CHECK-NEXT: buffer: 8, 71// CHECK-NEXT: name: "arg7", 72// CHECK-NEXT: quantization: { 73// CHECK-EMPTY: 74// CHECK-NEXT: }, 75// CHECK-NEXT: has_rank: true 76// CHECK-NEXT: }, { 77// CHECK-NEXT: shape: [ 4, 4 ], 78// CHECK-NEXT: buffer: 9, 79// CHECK-NEXT: name: "arg8", 80// CHECK-NEXT: quantization: { 81// CHECK-EMPTY: 82// CHECK-NEXT: }, 83// CHECK-NEXT: has_rank: true 84// CHECK-NEXT: }, { 85// CHECK-NEXT: shape: [ 4 ], 86// CHECK-NEXT: buffer: 10, 87// CHECK-NEXT: name: "arg9", 88// CHECK-NEXT: quantization: { 89// CHECK-EMPTY: 90// CHECK-NEXT: }, 91// CHECK-NEXT: has_rank: true 92// CHECK-NEXT: }, { 93// CHECK-NEXT: shape: [ 4 ], 94// CHECK-NEXT: buffer: 11, 95// CHECK-NEXT: name: "arg10", 96// CHECK-NEXT: quantization: { 97// CHECK-EMPTY: 98// CHECK-NEXT: }, 99// CHECK-NEXT: has_rank: true 100// CHECK-NEXT: }, { 101// CHECK-NEXT: shape: [ 4 ], 102// CHECK-NEXT: buffer: 12, 103// CHECK-NEXT: name: "arg11", 104// CHECK-NEXT: quantization: { 105// CHECK-EMPTY: 106// CHECK-NEXT: }, 107// CHECK-NEXT: has_rank: true 108// CHECK-NEXT: }, { 109// CHECK-NEXT: shape: [ 1, 4 ], 110// CHECK-NEXT: buffer: 13, 111// CHECK-NEXT: name: "arg12", 112// CHECK-NEXT: quantization: { 113// CHECK-EMPTY: 114// CHECK-NEXT: }, 115// CHECK-NEXT: has_rank: true 116// CHECK-NEXT: }, { 117// CHECK-NEXT: shape: [ 4 ], 118// CHECK-NEXT: buffer: 14, 119// CHECK-NEXT: name: "arg13", 120// CHECK-NEXT: quantization: { 121// CHECK-EMPTY: 122// CHECK-NEXT: }, 123// CHECK-NEXT: has_rank: true 124// CHECK-NEXT: }, { 125// CHECK-NEXT: shape: [ 4 ], 126// CHECK-NEXT: buffer: 15, 127// CHECK-NEXT: name: "arg14", 128// CHECK-NEXT: quantization: { 129// CHECK-EMPTY: 130// CHECK-NEXT: }, 131// CHECK-NEXT: has_rank: true 132// CHECK-NEXT: }, { 133// CHECK-NEXT: shape: [ 4 ], 134// CHECK-NEXT: buffer: 16, 135// CHECK-NEXT: name: "arg15", 136// CHECK-NEXT: quantization: { 137// CHECK-EMPTY: 138// CHECK-NEXT: }, 139// CHECK-NEXT: has_rank: true 140// CHECK-NEXT: }, { 141// CHECK-NEXT: shape: [ 4, 4 ], 142// CHECK-NEXT: buffer: 17, 143// CHECK-NEXT: name: "arg16", 144// CHECK-NEXT: quantization: { 145// CHECK-EMPTY: 146// CHECK-NEXT: }, 147// CHECK-NEXT: has_rank: true 148// CHECK-NEXT: }, { 149// CHECK-NEXT: shape: [ 4 ], 150// CHECK-NEXT: buffer: 18, 151// CHECK-NEXT: name: "arg17", 152// CHECK-NEXT: quantization: { 153// CHECK-EMPTY: 154// CHECK-NEXT: }, 155// CHECK-NEXT: has_rank: true 156// CHECK-NEXT: }, { 157// CHECK-NEXT: shape: [ 4 ], 158// CHECK-NEXT: buffer: 19, 159// CHECK-NEXT: name: "arg18", 160// CHECK-NEXT: quantization: { 161// CHECK-EMPTY: 162// CHECK-NEXT: }, 163// CHECK-NEXT: has_rank: true 164// CHECK-NEXT: }, { 165// CHECK-NEXT: shape: [ 4 ], 166// CHECK-NEXT: buffer: 20, 167// CHECK-NEXT: name: "arg19", 168// CHECK-NEXT: quantization: { 169// CHECK-EMPTY: 170// CHECK-NEXT: }, 171// CHECK-NEXT: has_rank: true 172// CHECK-NEXT: }, { 173// CHECK-NEXT: shape: [ 4 ], 174// CHECK-NEXT: buffer: 21, 175// CHECK-NEXT: name: "arg20", 176// CHECK-NEXT: quantization: { 177// CHECK-EMPTY: 178// CHECK-NEXT: }, 179// CHECK-NEXT: has_rank: true 180// CHECK-NEXT: }, { 181// CHECK-NEXT: shape: [ 4 ], 182// CHECK-NEXT: buffer: 22, 183// CHECK-NEXT: name: "arg21", 184// CHECK-NEXT: quantization: { 185// CHECK-EMPTY: 186// CHECK-NEXT: }, 187// CHECK-NEXT: has_rank: true 188// CHECK-NEXT: }, { 189// CHECK-NEXT: shape: [ 1, 4 ], 190// CHECK-NEXT: name: "Const", 191// CHECK-NEXT: quantization: { 192// CHECK-EMPTY: 193// CHECK-NEXT: }, 194// CHECK-NEXT: is_variable: true, 195// CHECK-NEXT: has_rank: true 196// CHECK-NEXT: }, { 197// CHECK-NEXT: shape: [ 1, 4 ], 198// CHECK-NEXT: name: "Const1", 199// CHECK-NEXT: quantization: { 200// CHECK-EMPTY: 201// CHECK-NEXT: }, 202// CHECK-NEXT: is_variable: true, 203// CHECK-NEXT: has_rank: true 204// CHECK-NEXT: }, { 205// CHECK-NEXT: shape: [ 1, 4 ], 206// CHECK-NEXT: buffer: 25, 207// CHECK-NEXT: name: "tfl.lstm", 208// CHECK-NEXT: quantization: { 209// CHECK-EMPTY: 210// CHECK-NEXT: }, 211// CHECK-NEXT: has_rank: true 212// CHECK-NEXT: } ], 213// CHECK-NEXT: inputs: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 ], 214// CHECK-NEXT: outputs: [ 24 ], 215// CHECK-NEXT: operators: [ { 216// CHECK-NEXT: inputs: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 22, 23, 18, 19, 20, 21 ], 217// CHECK-NEXT: outputs: [ 24 ], 218// CHECK-NEXT: builtin_options_type: LSTMOptions, 219// CHECK-NEXT: builtin_options: { 220// CHECK-EMPTY: 221// CHECK-NEXT: }, 222// CHECK-NEXT: intermediates: [ ] 223// CHECK-NEXT: } ], 224// CHECK-NEXT: name: "main" 225// CHECK-NEXT: } ], 226// CHECK-NEXT: description: "MLIR Converted.", 227// CHECK-NEXT: buffers: [ { 228// CHECK-EMPTY: 229// CHECK-NEXT: }, { 230// CHECK-EMPTY: 231// CHECK-NEXT: }, { 232// CHECK-EMPTY: 233// CHECK-NEXT: }, { 234// CHECK-EMPTY: 235// CHECK-NEXT: }, { 236// CHECK-EMPTY: 237// CHECK-NEXT: }, { 238// CHECK-EMPTY: 239// CHECK-NEXT: }, { 240// CHECK-EMPTY: 241// CHECK-NEXT: }, { 242// CHECK-EMPTY: 243// CHECK-NEXT: }, { 244// CHECK-EMPTY: 245// CHECK-NEXT: }, { 246// CHECK-EMPTY: 247// CHECK-NEXT: }, { 248// CHECK-EMPTY: 249// CHECK-NEXT: }, { 250// CHECK-EMPTY: 251// CHECK-NEXT: }, { 252// CHECK-EMPTY: 253// CHECK-NEXT: }, { 254// CHECK-EMPTY: 255// CHECK-NEXT: }, { 256// CHECK-EMPTY: 257// CHECK-NEXT: }, { 258// CHECK-EMPTY: 259// CHECK-NEXT: }, { 260// CHECK-EMPTY: 261// CHECK-NEXT: }, { 262// CHECK-EMPTY: 263// CHECK-NEXT: }, { 264// CHECK-EMPTY: 265// CHECK-NEXT: }, { 266// CHECK-EMPTY: 267// CHECK-NEXT: }, { 268// CHECK-EMPTY: 269// CHECK-NEXT: }, { 270// CHECK-EMPTY: 271// CHECK-NEXT: }, { 272// CHECK-EMPTY: 273// CHECK-NEXT: }, { 274// CHECK-NEXT: data: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] 275// CHECK-NEXT: }, { 276// CHECK-NEXT: data: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] 277// CHECK-NEXT: }, { 278// CHECK-EMPTY: 279// CHECK-NEXT: }, { 280// CHECK-NEXT: data: [ 49, 46, 55, 46, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] 281// CHECK-NEXT: } ], 282// CHECK-NEXT: metadata: [ { 283// CHECK-NEXT: name: "min_runtime_version", 284// CHECK-NEXT: buffer: 26 285// CHECK-NEXT: } ] 286// CHECK-NEXT: signature_defs: [ ] 287// CHECK-NEXT: } 288// CHECK-EMPTY: 289 290 291^bb0(%arg0: tensor<1x4xf32>, %arg1: tensor<4x4xf32>, %arg2: tensor<4x4xf32>, %arg3: tensor<4x4xf32>, %arg4: tensor<4x4xf32>, %arg5: tensor<4x4xf32>, %arg6: tensor<4x4xf32>, %arg7: tensor<4x4xf32>, %arg8: tensor<4x4xf32>, %arg9: tensor<4xf32>, %arg10: tensor<4xf32>, %arg11: tensor<4xf32>, %arg12: tensor<1x4xf32>, %arg13: tensor<4xf32>, %arg14: tensor<4xf32>, %arg15: tensor<4xf32>, %arg16: tensor<4x4xf32>, %arg17: tensor<4xf32>, %arg18: tensor<4xf32>, %arg19: tensor<4xf32>, %arg20: tensor<4xf32>, %arg21: tensor<4xf32>): 292 %cst0 = "tfl.pseudo_const" () {value = dense<0.0> : tensor<1x4xf32>} : () -> tensor<1x4xf32> loc("Const") 293 %cst1 = "tfl.pseudo_const" () {value = dense<0.0> : tensor<1x4xf32>} : () -> tensor<1x4xf32> loc("Const") 294 %24 = "tfl.lstm"(%arg0, %arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10, %arg11, %arg12, %arg13, %arg14, %arg15, %arg16, %arg17, %cst0, %cst1, %arg18, %arg19, %arg20, %arg21) ({}) {cell_clip = 0.000000e+00 : f32, fused_activation_function = "NONE", kernel_type = #tfl<lstm_kernel_type_attr FULL>, proj_clip = 0.000000e+00 : f32} : (tensor<1x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4x4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<1x4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4x4xf32>, tensor<4xf32>, tensor<1x4xf32>, tensor<1x4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>, tensor<4xf32>) -> tensor<1x4xf32> 295 func.return %24 : tensor<1x4xf32> 296} 297