@@ -147,8 +147,6 @@ class _EmitterState:
147147 operators : List [Operator ]
148148 delegates : List [BackendDelegate ]
149149 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 ]
152150 emit_stacktrace : bool
153151 emit_mutable_buffer_names : bool
154152
@@ -1092,7 +1090,7 @@ def _emit_delegate(
10921090 delegate's blob."""
10931091 processed_bytes = lowered_module .processed_bytes
10941092 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 )
10961094 delegate_ret = None
10971095
10981096 if isinstance (self .node .meta ["spec" ], list ):
@@ -1130,28 +1128,20 @@ def _emit_delegate(
11301128 if delegate_index is None :
11311129 # Allocate an entry for the data. TODO(T150113674): Reuse any duplicate entries if
11321130 # 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 )
11361135 )
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
11541136
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 )
11551145 # TODO(angelayi) Will need to emit the kwargs too, in the correct order according to the
11561146 # function's spec and with default arguments. This requires us to store the function's spec
11571147 # in to_backend()
@@ -1164,7 +1154,12 @@ def _emit_delegate(
11641154 delegate_args .append (elem .id )
11651155
11661156 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+ )
11681163 )
11691164
11701165 return delegate_ret
0 commit comments