identified issue with __movmsk.
This commit is contained in:
@@ -722,8 +722,15 @@ svml_stubs(double,d,WIDTH)
|
|||||||
|
|
||||||
define i64 @__movmsk(<1 x i1>) nounwind readnone alwaysinline {
|
define i64 @__movmsk(<1 x i1>) nounwind readnone alwaysinline {
|
||||||
%v = extractelement <1 x i1> %0, i32 0
|
%v = extractelement <1 x i1> %0, i32 0
|
||||||
%call = call i32 @__ballot_nvptx(i1 zeroext %v)
|
;; if 0
|
||||||
%v64 = zext i32 %call to i64
|
;; this one fails with ./tests/popcnt-4.ispc and others ...
|
||||||
|
;; %v0 = call i32 @__ballot_nvptx(i1 %v)
|
||||||
|
;; %v64 = zext i32 %v0 to i64
|
||||||
|
|
||||||
|
;; else
|
||||||
|
;; this one just copies mask
|
||||||
|
%v64 = zext i1 %v to i64
|
||||||
|
;; endif
|
||||||
ret i64 %v64
|
ret i64 %v64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2693,44 +2693,10 @@ declare i8* @malloc(i32)
|
|||||||
declare i32 @posix_memalign(i8**, i32, i32)
|
declare i32 @posix_memalign(i8**, i32, i32)
|
||||||
declare void @free(i8 *)
|
declare void @free(i8 *)
|
||||||
|
|
||||||
define noalias i8 * @__new_uniform_32rt(i64 %size) {
|
declare noalias i8 * @__new_uniform_32rt(i64 %size);
|
||||||
%ptr = alloca i8*
|
declare <WIDTH x i64> @__new_varying32_32rt(<WIDTH x i32> %size, <WIDTH x MASK> %mask);
|
||||||
%conv = trunc i64 %size to i32
|
declare void @__delete_uniform_32rt(i8 * %ptr);
|
||||||
%alignment = load i32* @memory_alignment
|
declare void @__delete_varying_32rt(<WIDTH x i64> %ptr, <WIDTH x MASK> %mask);
|
||||||
%call1 = call i32 @posix_memalign(i8** %ptr, i32 %alignment, i32 %conv)
|
|
||||||
%ptr_val = load i8** %ptr
|
|
||||||
ret i8* %ptr_val
|
|
||||||
}
|
|
||||||
|
|
||||||
define <WIDTH x i64> @__new_varying32_32rt(<WIDTH x i32> %size, <WIDTH x MASK> %mask) {
|
|
||||||
%ret = alloca <WIDTH x i64>
|
|
||||||
store <WIDTH x i64> zeroinitializer, <WIDTH x i64> * %ret
|
|
||||||
%ret64 = bitcast <WIDTH x i64> * %ret to i64 *
|
|
||||||
%alignment = load i32* @memory_alignment
|
|
||||||
|
|
||||||
per_lane(WIDTH, <WIDTH x MASK> %mask, `
|
|
||||||
%sz_LANE_ID = extractelement <WIDTH x i32> %size, i32 LANE
|
|
||||||
%store_LANE_ID = getelementptr i64 * %ret64, i32 LANE
|
|
||||||
%ptr_LANE_ID = bitcast i64* %store_LANE_ID to i8**
|
|
||||||
%call_LANE_ID = call i32 @posix_memalign(i8** %ptr_LANE_ID, i32 %alignment, i32 %sz_LANE_ID)')
|
|
||||||
|
|
||||||
%r = load <WIDTH x i64> * %ret
|
|
||||||
ret <WIDTH x i64> %r
|
|
||||||
}
|
|
||||||
|
|
||||||
define void @__delete_uniform_32rt(i8 * %ptr) {
|
|
||||||
call void @free(i8 * %ptr)
|
|
||||||
ret void
|
|
||||||
}
|
|
||||||
|
|
||||||
define void @__delete_varying_32rt(<WIDTH x i64> %ptr, <WIDTH x MASK> %mask) {
|
|
||||||
per_lane(WIDTH, <WIDTH x MASK> %mask, `
|
|
||||||
%iptr_LANE_ID = extractelement <WIDTH x i64> %ptr, i32 LANE
|
|
||||||
%ptr_LANE_ID = inttoptr i64 %iptr_LANE_ID to i8 *
|
|
||||||
call void @free(i8 * %ptr_LANE_ID)
|
|
||||||
')
|
|
||||||
ret void
|
|
||||||
}
|
|
||||||
|
|
||||||
',
|
',
|
||||||
RUNTIME, `64',
|
RUNTIME, `64',
|
||||||
|
|||||||
Reference in New Issue
Block a user