From: Nikodemus S. <nik...@ra...> - 2009-06-16 15:36:06
|
2009/6/16 Nikodemus Siivola <nik...@ra...>: > My current belief is that > > (or (immediately-used-p lvar node) > (binding* ((ctran (node-next cast) :exit-if-null) > (next (ctran-next ctran))) > (and (cast-p next) > (eq (node-dest next) dest) > (eq (cast-type-check next) :external)))) > > is a heuristic which tries to avoid using external (callee) checks for > casts originating from declarations in user code. If this is so, the > fix seems simple enough as the heuristic can be relaxed to ignore > intervening refs, in addition to external casts to the same > destination. Based on this, the attached patch relaxes that restriction a bit, allowing (defun foo (x y) (string= x y)) to be compiled without type-checks in FOO, and shrinks to the by 72kb, all of it apparently redundant type checks. I'm deeply interested in hearing if this (a) causes problems for anyone (b) gives noticeable performance benefits. Cheers, -- Nikodemus |