diff --git a/builtins/target-nvptx.ll b/builtins/target-nvptx.ll index 1b5a6392..3f609b85 100644 --- a/builtins/target-nvptx.ll +++ b/builtins/target-nvptx.ll @@ -1404,3 +1404,63 @@ define <1 x i8*> @__insert_void(<1 x i8*>, i32, ret <1 x i8*> %insert } +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; assert + +declare void @__assertfail(i64,i64,i32,i64,i64) noreturn; +declare i32 @vprintf(i64,i64) +define i32 @__puts_nvptx(i8*) alwaysinline +{ + %str = ptrtoint i8* %0 to i64 + %parm = or i64 0, 0 + %call = call i32 @vprintf(i64 %str, i64 %parm) + %cr = alloca <2 x i8> + store <2 x i8> , <2 x i8>* %cr + %cr1 = ptrtoint <2 x i8>* %cr to i64 + %call1 = call i32 @vprintf(i64 %cr1, i64 %parm) + ret i32 %call1; +} +define void @__abort_nvptx(i8* %str) noreturn +{ + %tmp1 = alloca <3 x i8> + store <3 x i8> , <3 x i8>* %tmp1 + %tmp2 = alloca <2 x i8> + store <2 x i8> , <2 x i8>* %tmp2 + + %param1 = ptrtoint <2 x i8>* %tmp2 to i64 + %param3 = or i32 0, 0 + %string = ptrtoint i8* %str to i64 + %param4 = ptrtoint <3 x i8>* %tmp1 to i64 + %param5 = or i64 1, 1 + call void @__assertfail(i64 %param1, i64 %string, i32 %param3, i64 %param4, i64 %param5); + ret void +} + +define void @__do_assert_uniform(i8 *%str, i1 %test, %mask) { + br i1 %test, label %ok, label %fail + +fail: + call void @__abort_nvptx(i8* %str) noreturn + unreachable + +ok: + ret void +} + + +define void @__do_assert_varying(i8 *%str, %test, + %mask) { + %nottest = xor %test, + < forloop(i, 1, eval(WIDTH-1), `MASK -1, ') MASK -1 > + %nottest_and_mask = and %nottest, %mask + %mm = call i64 @__movmsk( %nottest_and_mask) + %all_ok = icmp eq i64 %mm, 0 + br i1 %all_ok, label %ok, label %fail + +fail: + call void @__abort_nvptx(i8* %str) noreturn + unreachable + +ok: + ret void +} diff --git a/builtins/util-nvptx.m4 b/builtins/util-nvptx.m4 index 804c07e3..65577454 100644 --- a/builtins/util-nvptx.m4 +++ b/builtins/util-nvptx.m4 @@ -2064,42 +2064,6 @@ define void @__memset64(i8 * %dst, i8 %val, i64 %len) alwaysinline { ret void } -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; assert - -declare i32 @puts(i8*) -declare void @abort() noreturn - -define void @__do_assert_uniform(i8 *%str, i1 %test, %mask) { - br i1 %test, label %ok, label %fail - -fail: - %call = call i32 @puts(i8* %str) - call void @abort() noreturn - unreachable - -ok: - ret void -} - - -define void @__do_assert_varying(i8 *%str, %test, - %mask) { - %nottest = xor %test, - < forloop(i, 1, eval(WIDTH-1), `MASK -1, ') MASK -1 > - %nottest_and_mask = and %nottest, %mask - %mm = call i64 @__movmsk( %nottest_and_mask) - %all_ok = icmp eq i64 %mm, 0 - br i1 %all_ok, label %ok, label %fail - -fail: - %call = call i32 @puts(i8* %str) - call void @abort() noreturn - unreachable - -ok: - ret void -} ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; new/delete diff --git a/tests/cfor-gs-improve-multidim-struct-1.ispc b/tests/cfor-gs-improve-multidim-struct-1.ispc index ad4053dc..0d682f9a 100644 --- a/tests/cfor-gs-improve-multidim-struct-1.ispc +++ b/tests/cfor-gs-improve-multidim-struct-1.ispc @@ -11,7 +11,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; #ifndef __NVPTX__ uniform Foo f[5]; -#else __NVPTX__ /* too much shared memory allocated, nvcc fails to link */ +#else /* too much shared memory allocated, nvcc fails to link */ uniform Foo * uniform f = uniform new uniform Foo[5]; #define _UNMALLOC #endif diff --git a/tests/soa-17.ispc b/tests/soa-17.ispc index 897840f3..5dc9ea2f 100644 --- a/tests/soa-17.ispc +++ b/tests/soa-17.ispc @@ -39,9 +39,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { float a = aFOO[programIndex]; a *= -1; Point vp = { a, { 2*a, 3*a, 4*a }, {5*a} }; -#ifndef __NVPTX__ assert(2+programIndex < 160); -#endif pts[2+programIndex] = vp; RET[programIndex] = pts[programIndex].y[2]; diff --git a/tests/soa-22.ispc b/tests/soa-22.ispc index 4d8fd299..ba3ffa0c 100644 --- a/tests/soa-22.ispc +++ b/tests/soa-22.ispc @@ -26,9 +26,7 @@ export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) { } } -#ifndef __NVPTX__ assert(programIndex < 80); -#endif RET[programIndex] = pts[programIndex].pts[programIndex % 3][programIndex % 4].z; }