added varying new/delete
This commit is contained in:
@@ -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
|
||||
')
|
||||
|
||||
2
expr.cpp
2
expr.cpp
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user