@@ -146,8 +146,6 @@ class _EmitterState:
146146 operators : List [Operator ]
147147 delegates : List [BackendDelegate ]
148148 operator_cache : Dict [Tuple [str , str ], int ]
149- # delegate_cache: the key is hash(delegated_payload) and the value is the index in delegates
150- delegate_cache : Dict [str , int ]
151149 emit_stacktrace : bool
152150 emit_mutable_buffer_names : bool
153151
@@ -1091,7 +1089,7 @@ def _emit_delegate(
10911089 delegate's blob."""
10921090 processed_bytes = lowered_module .processed_bytes
10931091 hashed = hashlib .sha256 (processed_bytes ).hexdigest ()
1094- delegate_index = self .emitter_state . delegate_cache .get (hashed )
1092+ delegate_index = self .program_state . backend_delegate_data_cache .get (hashed )
10951093 delegate_ret = None
10961094
10971095 if isinstance (self .node .meta ["spec" ], list ):
@@ -1129,28 +1127,20 @@ def _emit_delegate(
11291127 if delegate_index is None :
11301128 # Allocate an entry for the data. TODO(T150113674): Reuse any duplicate entries if
11311129 # present.
1132- hashed = hashlib .sha256 (processed_bytes ).hexdigest ()
1133- data_index : Optional [int ] = (
1134- self .program_state .backend_delegate_data_cache .get (hashed )
1130+ delegate_index = len (self .program_state .backend_delegate_data_cache )
1131+ self .program_state .backend_delegate_data_cache [hashed ] = delegate_index
1132+ self .program_state .backend_delegate_data .append (
1133+ BackendDelegateInlineData (data = processed_bytes )
11351134 )
1136- if data_index is None :
1137- data_index = len (self .program_state .backend_delegate_data )
1138- self .program_state .backend_delegate_data_cache [hashed ] = data_index
1139- self .program_state .backend_delegate_data .append (
1140- BackendDelegateInlineData (data = processed_bytes )
1141- )
1142-
1143- backend_delegate = BackendDelegate (
1144- id = lowered_module .backend_id ,
1145- processed = BackendDelegateDataReference (
1146- location = DataLocation .INLINE , index = data_index
1147- ),
1148- compile_specs = lowered_module .compile_specs ,
1149- )
1150- delegate_index = len (self .emitter_state .delegate_cache )
1151- self .emitter_state .delegates .append (backend_delegate )
1152- self .emitter_state .delegate_cache [hashed ] = delegate_index
11531135
1136+ backend_delegate = BackendDelegate (
1137+ id = lowered_module .backend_id ,
1138+ processed = BackendDelegateDataReference (
1139+ location = DataLocation .INLINE , index = delegate_index
1140+ ),
1141+ compile_specs = lowered_module .compile_specs ,
1142+ )
1143+ self .emitter_state .delegates .append (backend_delegate )
11541144 # TODO(angelayi) Will need to emit the kwargs too, in the correct order according to the
11551145 # function's spec and with default arguments. This requires us to store the function's spec
11561146 # in to_backend()
@@ -1163,7 +1153,12 @@ def _emit_delegate(
11631153 delegate_args .append (elem .id )
11641154
11651155 self .chain .instructions .append (
1166- Instruction (DelegateCall (delegate_index = delegate_index , args = delegate_args ))
1156+ Instruction (
1157+ DelegateCall (
1158+ delegate_index = len (self .emitter_state .delegates ) - 1 ,
1159+ args = delegate_args ,
1160+ )
1161+ )
11671162 )
11681163
11691164 return delegate_ret
0 commit comments