diff options
Diffstat (limited to 'final/Bitcode/Regression/vector_widen')
-rw-r--r-- | final/Bitcode/Regression/vector_widen/CMakeLists.txt | 14 | ||||
-rw-r--r-- | final/Bitcode/Regression/vector_widen/driver.cpp | 63 | ||||
-rw-r--r-- | final/Bitcode/Regression/vector_widen/halide_buffer.h | 54 | ||||
-rw-r--r-- | final/Bitcode/Regression/vector_widen/halide_runtime.bc | bin | 0 -> 72776 bytes | |||
-rw-r--r-- | final/Bitcode/Regression/vector_widen/vector_widen.bc | bin | 0 -> 4336 bytes |
5 files changed, 131 insertions, 0 deletions
diff --git a/final/Bitcode/Regression/vector_widen/CMakeLists.txt b/final/Bitcode/Regression/vector_widen/CMakeLists.txt new file mode 100644 index 00000000..77687175 --- /dev/null +++ b/final/Bitcode/Regression/vector_widen/CMakeLists.txt @@ -0,0 +1,14 @@ +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/halide_runtime.bc PROPERTIES LANGUAGE CXX) +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/vector_widen.bc PROPERTIES LANGUAGE CXX) + +find_package(Threads) +list(APPEND LDFLAGS ${CMAKE_THREAD_LIBS_INIT}) +foreach(lib ${CMAKE_DL_LIBS}) + list(APPEND LDFLAGS -l${lib}) +endforeach() + +llvm_multisource(widen_bug + ${CMAKE_CURRENT_SOURCE_DIR}/driver.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/halide_runtime.bc + ${CMAKE_CURRENT_SOURCE_DIR}/vector_widen.bc +) diff --git a/final/Bitcode/Regression/vector_widen/driver.cpp b/final/Bitcode/Regression/vector_widen/driver.cpp new file mode 100644 index 00000000..76bed53e --- /dev/null +++ b/final/Bitcode/Regression/vector_widen/driver.cpp @@ -0,0 +1,63 @@ +#include "halide_buffer.h" + +template<typename T> +T rand_value() { + return (T)((T)rand() / 8) - 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 = 4096, H = 512; + // Make some input buffers + buffer_t bufs[] = { + make_buffer<uint8_t>(W, H), + make_buffer<int32_t>(W, H) + }; + + for (int i = 0; i < 1; i++) { + filter f = filters[i]; + f.fn(bufs + 0, + bufs + 1); + } + + for (int i = 0; i < sizeof(bufs)/sizeof(buffer_t); i++) { + delete[] bufs[i].host; + } + + return err_code; +} diff --git a/final/Bitcode/Regression/vector_widen/halide_buffer.h b/final/Bitcode/Regression/vector_widen/halide_buffer.h new file mode 100644 index 00000000..61b1c37f --- /dev/null +++ b/final/Bitcode/Regression/vector_widen/halide_buffer.h @@ -0,0 +1,54 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> +#ifndef HALIDE_ATTRIBUTE_ALIGN + #ifdef _MSC_VER + #define HALIDE_ATTRIBUTE_ALIGN(x) __declspec(align(x)) + #else + #define HALIDE_ATTRIBUTE_ALIGN(x) __attribute__((aligned(x))) + #endif +#endif +#ifndef BUFFER_T_DEFINED +#define BUFFER_T_DEFINED +#include <stdbool.h> +#include <stdint.h> +typedef struct buffer_t { + uint64_t dev; + uint8_t* host; + int32_t extent[4]; + int32_t stride[4]; + int32_t min[4]; + int32_t elem_size; + HALIDE_ATTRIBUTE_ALIGN(1) bool host_dirty; + HALIDE_ATTRIBUTE_ALIGN(1) bool dev_dirty; + HALIDE_ATTRIBUTE_ALIGN(1) uint8_t _padding[10 - sizeof(void *)]; +} buffer_t; +#endif +struct halide_filter_metadata_t; +#ifndef HALIDE_FUNCTION_ATTRS +#define HALIDE_FUNCTION_ATTRS +#endif +#ifndef FILTER_T_DEFINED +#define FILTER_T_DEFINED +typedef struct filter { + const char *name; + int (*fn)(buffer_t *, // uint8 + buffer_t *); // uint32 +} filter; +#endif + +#ifdef __cplusplus +extern "C" { +#endif +int vector_widen(buffer_t *_in_u8_buffer, buffer_t *widen_buffer) HALIDE_FUNCTION_ATTRS; +int vector_widen_argv(void **args) HALIDE_FUNCTION_ATTRS; +extern const struct halide_filter_metadata_t vector_widen_metadata; +#ifdef __cplusplus +} // extern "C" +#endif + +filter filters[] = { +{"vector_widen", &vector_widen}, +{NULL, NULL}}; + + diff --git a/final/Bitcode/Regression/vector_widen/halide_runtime.bc b/final/Bitcode/Regression/vector_widen/halide_runtime.bc Binary files differnew file mode 100644 index 00000000..1404e629 --- /dev/null +++ b/final/Bitcode/Regression/vector_widen/halide_runtime.bc diff --git a/final/Bitcode/Regression/vector_widen/vector_widen.bc b/final/Bitcode/Regression/vector_widen/vector_widen.bc Binary files differnew file mode 100644 index 00000000..144bc16b --- /dev/null +++ b/final/Bitcode/Regression/vector_widen/vector_widen.bc |