aboutsummaryrefslogtreecommitdiff
path: root/final/Bitcode/Regression/vector_widen
diff options
context:
space:
mode:
Diffstat (limited to 'final/Bitcode/Regression/vector_widen')
-rw-r--r--final/Bitcode/Regression/vector_widen/CMakeLists.txt14
-rw-r--r--final/Bitcode/Regression/vector_widen/driver.cpp63
-rw-r--r--final/Bitcode/Regression/vector_widen/halide_buffer.h54
-rw-r--r--final/Bitcode/Regression/vector_widen/halide_runtime.bcbin0 -> 72776 bytes
-rw-r--r--final/Bitcode/Regression/vector_widen/vector_widen.bcbin0 -> 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
new file mode 100644
index 00000000..1404e629
--- /dev/null
+++ b/final/Bitcode/Regression/vector_widen/halide_runtime.bc
Binary files differ
diff --git a/final/Bitcode/Regression/vector_widen/vector_widen.bc b/final/Bitcode/Regression/vector_widen/vector_widen.bc
new file mode 100644
index 00000000..144bc16b
--- /dev/null
+++ b/final/Bitcode/Regression/vector_widen/vector_widen.bc
Binary files differ