@@ -163,7 +163,7 @@ def evict_by_cache cache
163
163
return if !cache
164
164
@cached . delete ( cache . var )
165
165
r = cache . reg
166
- debug_is_register? ( r )
166
+ debug_is_register? ( r , "evict_by_cache" )
167
167
cache . spill!
168
168
@by_reg . delete ( r )
169
169
# FIXME: BUG workaround? (was on one line)
@@ -213,9 +213,9 @@ def mark_dirty(reg, block)
213
213
r . spill = block if r
214
214
end
215
215
216
- def debug_is_register? ( reg )
216
+ def debug_is_register? ( reg , where )
217
217
return if reg && reg . to_sym == @selfreg
218
- raise "NOT A REGISTER: #{ reg . to_s } " if !reg || !@registers . member? ( reg . to_sym )
218
+ raise "NOT A REGISTER: #{ reg . inspect } in #{ where } " if !reg || !@registers . member? ( reg . to_sym )
219
219
end
220
220
221
221
# Called to "cache" a variable in a register. If no register is
@@ -238,7 +238,7 @@ def cache_reg!(var)
238
238
end
239
239
240
240
if free
241
- debug_is_register? ( free )
241
+ debug_is_register? ( free , "cache_reg!" )
242
242
c = Cache . new ( free , var )
243
243
k = var . to_sym
244
244
@cached [ k ] = c
@@ -267,7 +267,7 @@ def lock_reg(reg)
267
267
# Low level
268
268
def free! ( free )
269
269
@allocated_registers . delete ( free )
270
- debug_is_register? ( free )
270
+ debug_is_register? ( free , "free!" )
271
271
@free_registers << free
272
272
end
273
273
@@ -290,14 +290,17 @@ def with_register(required_reg = nil)
290
290
# registers is in use as cache, see if we can evict one of
291
291
# them.
292
292
293
- if !@cached . empty?
293
+ if @cached . empty?
294
+ #STDERR.puts "No cached registers?"
295
+ else
294
296
# Figure out which register to drop, based on order.
295
297
# (least frequently used variable evicted first)
296
298
r = @order . reverse
297
299
r . each do |v |
298
300
# @FIXME: Workaround for @bug below
299
301
if !free
300
302
c = @cached [ v ]
303
+ #STDERR.puts "c: #{c.inspect}"
301
304
if c
302
305
if !c . locked
303
306
# @FIXME
@@ -316,8 +319,6 @@ def with_register(required_reg = nil)
316
319
end
317
320
end
318
321
319
- debug_is_register? ( free )
320
-
321
322
if !free
322
323
# This really should not happen, unless we are
323
324
# very careless about #with_register blocks.
@@ -331,6 +332,8 @@ def with_register(required_reg = nil)
331
332
1 /0
332
333
end
333
334
335
+ debug_is_register? ( free , "with_register" )
336
+
334
337
# This is for debugging of the allocator - we store
335
338
# a backtrace of where in the compiler the allocation
336
339
# was attempted from in case we run out of registers
0 commit comments