|  | // RUN: iree-tf-opt -pass-pipeline=iree-tf-saved-model-lower-global-tensors -split-input-file <%s | IreeFileCheck %s | 
|  |  | 
|  | // CHECK-LABEL: module attributes {tf_saved_model.semantics} | 
|  | module attributes {tf_saved_model.semantics} { | 
|  |  | 
|  | // TODO(silvasean): Verify "type" handling. | 
|  | // I think when "type" is a partial type that flow will not model it correctly. | 
|  |  | 
|  | // CHECK:       flow.variable [[V:@[a-zA-Z0-9$._-]+]] mutable dense<1.000000e+00> : tensor<1xf32> | 
|  | // CHECK:       func @f() -> (tensor<?xf32> {tf_saved_model.index_path = []}) | 
|  | // CHECK-NEXT:    [[PTR:%.+]] = flow.variable.address [[V]] : !iree.ptr<tensor<?xf32>> | 
|  | // CHECK-NEXT:    [[T:%.+]] = flow.variable.load.indirect [[PTR]] : !iree.ptr<tensor<?xf32>> -> tensor<?xf32> | 
|  | // CHECK-NEXT:    return [[T]] : tensor<?xf32> | 
|  |  | 
|  | "tf_saved_model.global_tensor"() { is_mutable, sym_name = "v", type = tensor<?xf32>, value = dense<1.> : tensor<1xf32> } : () -> () | 
|  | func @f(%arg0: tensor<!tf.resource<tensor<?xf32>>> {tf_saved_model.bound_input = @v}) | 
|  | -> (tensor<?xf32> {tf_saved_model.index_path = []}) | 
|  | attributes {tf_saved_model.exported_names = ["f"]} { | 
|  | %0 = "tf.ReadVariableOp"(%arg0) : (tensor<!tf.resource<tensor<?xf32>>>) -> tensor<?xf32> | 
|  | return %0 : tensor<?xf32> | 
|  | } | 
|  | } | 
|  |  | 
|  | // ----- | 
|  |  | 
|  | // CHECK-LABEL: module attributes {tf_saved_model.semantics} | 
|  | module attributes {tf_saved_model.semantics} { | 
|  |  | 
|  | // CHECK:       flow.variable [[V:@[a-zA-Z0-9$._-]+]] mutable dense<1.000000e+00> : tensor<1xf32> | 
|  | // CHECK:       func @f(%arg0: tensor<?xf32> {tf_saved_model.index_path = [0]}) | 
|  | // CHECK-NEXT:    [[PTR:%.+]] = flow.variable.address @__iree_flow_v : !iree.ptr<tensor<?xf32>> | 
|  | // CHECK-NEXT:    flow.variable.store.indirect %arg0, [[PTR]] : tensor<?xf32> -> !iree.ptr<tensor<?xf32>> | 
|  | // CHECK-NEXT:    return | 
|  |  | 
|  | "tf_saved_model.global_tensor"() { is_mutable, sym_name = "v", type = tensor<?xf32>, value = dense<1.> : tensor<1xf32> } : () -> () | 
|  | func @f(%arg0: tensor<?xf32> {tf_saved_model.index_path = [0]}, %arg1: tensor<!tf.resource<tensor<?xf32>>> {tf_saved_model.bound_input = @v}) | 
|  | attributes {tf_saved_model.exported_names = ["f"]} { | 
|  | "tf.AssignVariableOp"(%arg1, %arg0) : (tensor<!tf.resource<tensor<?xf32>>>, tensor<?xf32>) -> () | 
|  | return | 
|  | } | 
|  | } |