Skip to content

missed optimization: llvm fails to vectorize when dealing with bools #166666

@alex

Description

@alex

https://godbolt.org/z/zz8xGqbY7

#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>

// Count how many bools are true
size_t count_true(const bool *values, size_t len) {
    size_t count = 0;
    for (size_t i = 0; i < len; i++) {
        if (values[i]) {
            count++;
        }
    }
    return count;
}

// Count how many uint8_t values are non-zero
size_t count_nonzero_u8(const uint8_t *values, size_t len) {
    size_t count = 0;
    for (size_t i = 0; i < len; i++) {
        if (values[i] != 0) {
            count++;
        }
    }
    return count;
}

count_true should vectorize just as easily as count_nonzero_u8, except it doesn't :-)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions