@@ -147,8 +147,6 @@ class _EmitterState:
147
147
operators : List [Operator ]
148
148
delegates : List [BackendDelegate ]
149
149
operator_cache : Dict [Tuple [str , str ], int ]
150
- # delegate_cache: the key is hash(delegated_payload) and the value is the index in delegates
151
- delegate_cache : Dict [str , int ]
152
150
emit_stacktrace : bool
153
151
emit_mutable_buffer_names : bool
154
152
@@ -1092,7 +1090,7 @@ def _emit_delegate(
1092
1090
delegate's blob."""
1093
1091
processed_bytes = lowered_module .processed_bytes
1094
1092
hashed = hashlib .sha256 (processed_bytes ).hexdigest ()
1095
- delegate_index = self .emitter_state . delegate_cache .get (hashed )
1093
+ delegate_index = self .program_state . backend_delegate_data_cache .get (hashed )
1096
1094
delegate_ret = None
1097
1095
1098
1096
if isinstance (self .node .meta ["spec" ], list ):
@@ -1130,28 +1128,20 @@ def _emit_delegate(
1130
1128
if delegate_index is None :
1131
1129
# Allocate an entry for the data. TODO(T150113674): Reuse any duplicate entries if
1132
1130
# present.
1133
- hashed = hashlib .sha256 (processed_bytes ).hexdigest ()
1134
- data_index : Optional [int ] = (
1135
- self .program_state .backend_delegate_data_cache .get (hashed )
1131
+ delegate_index = len (self .program_state .backend_delegate_data_cache )
1132
+ self .program_state .backend_delegate_data_cache [hashed ] = delegate_index
1133
+ self .program_state .backend_delegate_data .append (
1134
+ BackendDelegateInlineData (data = processed_bytes )
1136
1135
)
1137
- if data_index is None :
1138
- data_index = len (self .program_state .backend_delegate_data )
1139
- self .program_state .backend_delegate_data_cache [hashed ] = data_index
1140
- self .program_state .backend_delegate_data .append (
1141
- BackendDelegateInlineData (data = processed_bytes )
1142
- )
1143
-
1144
- backend_delegate = BackendDelegate (
1145
- id = lowered_module .backend_id ,
1146
- processed = BackendDelegateDataReference (
1147
- location = DataLocation .INLINE , index = data_index
1148
- ),
1149
- compile_specs = lowered_module .compile_specs ,
1150
- )
1151
- delegate_index = len (self .emitter_state .delegate_cache )
1152
- self .emitter_state .delegates .append (backend_delegate )
1153
- self .emitter_state .delegate_cache [hashed ] = delegate_index
1154
1136
1137
+ backend_delegate = BackendDelegate (
1138
+ id = lowered_module .backend_id ,
1139
+ processed = BackendDelegateDataReference (
1140
+ location = DataLocation .INLINE , index = delegate_index
1141
+ ),
1142
+ compile_specs = lowered_module .compile_specs ,
1143
+ )
1144
+ self .emitter_state .delegates .append (backend_delegate )
1155
1145
# TODO(angelayi) Will need to emit the kwargs too, in the correct order according to the
1156
1146
# function's spec and with default arguments. This requires us to store the function's spec
1157
1147
# in to_backend()
@@ -1164,7 +1154,12 @@ def _emit_delegate(
1164
1154
delegate_args .append (elem .id )
1165
1155
1166
1156
self .chain .instructions .append (
1167
- Instruction (DelegateCall (delegate_index = delegate_index , args = delegate_args ))
1157
+ Instruction (
1158
+ DelegateCall (
1159
+ delegate_index = len (self .emitter_state .delegates ) - 1 ,
1160
+ args = delegate_args ,
1161
+ )
1162
+ )
1168
1163
)
1169
1164
1170
1165
return delegate_ret
0 commit comments