added varying new/delete

This commit is contained in:
Evghenii
2014-01-24 09:22:55 +01:00
parent be6ac0408a
commit 5a8351d7ea
3 changed files with 55 additions and 5 deletions

View File

@@ -2204,10 +2204,58 @@ if.end: ; preds = %if.then, %entry
ret void
}
declare <WIDTH x i64> @__new_varying32_64rt(<WIDTH x i32> %size, <WIDTH x MASK> %mask);
declare <WIDTH x i64> @__new_varying64_64rt(<WIDTH x i64> %size, <WIDTH x MASK> %mask);
declare void @__delete_varying_64rt(<WIDTH x i64> %ptr, <WIDTH x MASK> %mask);
define <1 x i64> @__new_varying32_64rt(<1 x i32> %sizev, <1 x i1> %maskv)
{
entry:
%size32 = extractelement <1 x i32> %sizev, i32 0
%mask = extractelement <1 x i1> %maskv, i32 0
%size64 = zext i32 %size32 to i64
br i1 %mask, label %alloc, label %skip
alloc:
%ptr = tail call noalias i8* @malloc(i64 %size64)
%addr1 = ptrtoint i8* %ptr to i64
br label %skip
skip:
%addr64 = phi i64 [ %addr1, %alloc], [ 0, %entry ]
%addr = insertelement <1 x i64> undef, i64 %addr64, i32 0
ret <1 x i64> %addr
}
define <1 x i64> @__new_varying64_64rt(<1 x i64> %sizev, <1 x i1> %maskv)
{
entry:
%size64 = extractelement <1 x i64> %sizev, i32 0
%mask = extractelement <1 x i1> %maskv, i32 0
br i1 %mask, label %alloc, label %skip
alloc:
%ptr = tail call noalias i8* @malloc(i64 %size64)
%addr1 = ptrtoint i8* %ptr to i64
br label %skip
skip:
%addr64 = phi i64 [ %addr1, %alloc], [ 0, %entry ]
%addr = insertelement <1 x i64> undef, i64 %addr64, i32 0
ret <1 x i64> %addr
}
define void @__delete_varying_64rt(<1 x i64> %ptrv, <1 x i1> %maskv)
{
entry:
%addr64 = extractelement <1 x i64> %ptrv, i32 0
%mask = extractelement <1 x i1> %maskv, i32 0
br i1 %mask, label %free, label %skip
free:
%ptr = inttoptr i64 %addr64 to i8*
tail call void @free(i8* %ptr)
br label %skip
skip:
ret void
}
', `
errprint(`RUNTIME should be defined to either 32 or 64
')

View File

@@ -8654,7 +8654,7 @@ NewExpr::TypeCheck() {
}
if (g->target->getISA() == Target::NVPTX && allocType->IsVaryingType())
{
Error(pos, "\"sizeof\" with varying data types is not yet supported with \"nvptx\" target.");
Error(pos, "\"new\" with varying data types is not yet supported with \"nvptx\" target.");
return NULL;
}
if (CastType<UndefinedStructType>(allocType) != NULL) {

View File

@@ -25,8 +25,10 @@ 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;
}