aboutsummaryrefslogtreecommitdiff
path: root/final/Bitcode/Regression/fft/driver.cpp
blob: ea2bfd21d061fd880bdab70063c23d9bcfbe114d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "halide_buffer.h"

template<typename T>
T rand_value() {
    return (T)(rand() * 0.125) - 100;
}

template<typename T>
buffer_t make_buffer(int w, int h) {
    T *mem = new T[w*h];
    buffer_t buf = {0};
    buf.host = (uint8_t *)mem;
    buf.extent[0] = w;
    buf.extent[1] = h;
    buf.elem_size = sizeof(T);
    buf.stride[0] = 1;
    buf.stride[1] = w;

    for (int i = 0; i < w*h; i++) {
        mem[i] = rand_value<T>();
    }

    return buf;
}


int main(int argc, char **argv) {
    unsigned int err_code = 0;
#if (!__has_builtin(__builtin_cpu_supports) && (defined(__i386__) || defined(__x86_64__)))
    return err_code;
#endif
#if defined(__i386__) || defined(__x86_64__)
    if (!__builtin_cpu_supports("avx")) {
      return err_code;
    }
#endif
    time_t seed;
    if (argc > 1) {
        seed = atoi(argv[1]);
    }
    else {
        seed = time(NULL);
        srand (seed);
    }
    const int W = 256, H = 256;
    // Make some input buffers
    buffer_t bufs[] = {
        make_buffer<int32_t>(W, H),
        make_buffer<int32_t>(W, H),
        make_buffer<int32_t>(W, H)
    };

    for (int i = 0; i < 24; i++) {
        filter f = filters[i];
        f.fn(bufs + 0,
             bufs + 1,
             bufs + 2);
    }

    for (int i = 0; i < sizeof(bufs)/sizeof(buffer_t); i++) {
        delete[] bufs[i].host;
    }

    return err_code;
}