'When adding to the set, ensure it is properly sized for the given
number of used entries.'

def upsize(self, nitems):

    context = self._context
    builder = self._builder
    intp_t = nitems.type
    one = ir.Constant(intp_t, 1)
    two = ir.Constant(intp_t, 2)
    payload = self.payload
    min_entries = builder.shl(nitems, one)
    size = builder.add(payload.mask, one)
    need_resize = builder.icmp_unsigned('>=', min_entries, size)
    with builder.if_then(need_resize, likely=False):
        new_size_p = cgutils.alloca_once_value(builder, size)
        bb_body = builder.append_basic_block('calcsize.body')
        bb_end = builder.append_basic_block('calcsize.end')
        builder.branch(bb_body)
        with builder.goto_block(bb_body):
            new_size = builder.load(new_size_p)
            new_size = builder.shl(new_size, two)
            builder.store(new_size, new_size_p)
            is_too_small = builder.icmp_unsigned('>=', min_entries, new_size)
            builder.cbranch(is_too_small, bb_body, bb_end)
        builder.position_at_end(bb_end)
        new_size = builder.load(new_size_p)
        if DEBUG_ALLOCS:
            context.printf(builder, 'upsize    to    %zd    items:    current    size    =    %zd,    min    entries    =    %zd,    new    size    =    %zd\n', nitems, size, min_entries, new_size)
        self._resize(payload, new_size, 'cannot    grow    set')
