Skip to content
This repository was archived by the owner on Jan 3, 2024. It is now read-only.

Commit 15f0b1f

Browse files
committed
merge default
2 parents cf327a5 + d161639 commit 15f0b1f

File tree

5 files changed

+24
-2
lines changed

5 files changed

+24
-2
lines changed

rpython/jit/metainterp/optimizeopt/bridgeopt.py

-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ def serialize_optimizer_knowledge(optimizer, numb_state, liveboxes, liveboxes_fr
9393
triples_struct, triples_array = optimizer.optheap.serialize_optheap(available_boxes)
9494
# can only encode descrs that have a known index into
9595
# metainterp_sd.all_descrs
96-
triples_struct = [triple for triple in triples_struct if triple[1].descr_index != -1]
9796
numb_state.append_int(len(triples_struct))
9897
for box1, descr, box2 in triples_struct:
9998
descr_index = descr.descr_index

rpython/jit/metainterp/optimizeopt/heap.py

+4
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,8 @@ def optimize_GUARD_NOT_INVALIDATED(self, op):
696696
def serialize_optheap(self, available_boxes):
697697
result_getfield = []
698698
for descr, cf in self.cached_fields.iteritems():
699+
if descr.descr_index == -1:
700+
continue # not reachable via metainterp_sd.all_descrs
699701
if cf._lazy_set:
700702
continue # XXX safe default for now
701703
parent_descr = descr.get_parent_descr()
@@ -715,6 +717,8 @@ def serialize_optheap(self, available_boxes):
715717
result_getfield.append((box1, descr, box2))
716718
result_array = []
717719
for descr, indexdict in self.cached_arrayitems.iteritems():
720+
if descr.descr_index == -1:
721+
continue # not reachable via metainterp_sd.all_descrs
718722
for index, cf in indexdict.iteritems():
719723
if cf._lazy_set:
720724
continue # XXX safe default for now

rpython/rlib/rbigint.py

+16
Original file line numberDiff line numberDiff line change
@@ -1482,6 +1482,13 @@ def bit_length(self):
14821482
bits = ovfcheck((i-1) * SHIFT) + msd_bits
14831483
return bits
14841484

1485+
@jit.elidable
1486+
def bit_count(self):
1487+
res = 0
1488+
for i in range(self.numdigits()):
1489+
res = ovfcheck(res + bit_count_digit(self.digit(i)))
1490+
return res
1491+
14851492
def gcd(self, other):
14861493
""" Compute the (always positive) greatest common divisor of self and
14871494
other """
@@ -2562,6 +2569,15 @@ def bits_in_digit(d):
25622569
d_bits += ord(BitLengthTable[d])
25632570
return d_bits
25642571

2572+
2573+
def bit_count_digit(val):
2574+
count = 0
2575+
while val:
2576+
count += val & 1
2577+
val >>= 1
2578+
return count
2579+
2580+
25652581
def _truediv_result(result, negate):
25662582
if negate:
25672583
result = -result

rpython/rlib/test/test_rbigint.py

+4
Original file line numberDiff line numberDiff line change
@@ -1579,6 +1579,10 @@ def test_abs_rshift_and_mask(self, x, shift, mask):
15791579
r1 = rx.abs_rshift_and_mask(r_ulonglong(shift), mask)
15801580
assert r1 == (abs(x) >> shift) & mask
15811581

1582+
@given(biglongs)
1583+
def test_bit_count(self, val):
1584+
assert rbigint.fromlong(val).bit_count() == bin(abs(val)).count("1")
1585+
15821586

15831587
@pytest.mark.parametrize(['methname'], [(methodname, ) for methodname in dir(TestHypothesis) if methodname.startswith("test_")])
15841588
def test_hypothesis_small_shift(methname):

rpython/rlib/unicodedata/dawg.py

-1
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,6 @@ def _lookup(packed, s):
408408
stringpos = 0
409409
node_offset = 0
410410
skipped = 0 # keep track of number of final nodes that we skipped
411-
false = False
412411
while stringpos < len(s):
413412
node_count, final, edge_offset = decode_node(packed, node_offset)
414413
prev_child_offset = edge_offset

0 commit comments

Comments
 (0)