summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrzej Janik <[email protected]>2020-11-19 00:35:06 +0100
committerAndrzej Janik <[email protected]>2020-11-19 00:35:06 +0100
commita4ef12947d552af77b1d564747afb9c78b536913 (patch)
treed373e4136a1509a9ccf7c3ebcbae3f11807226c3
parentc4437762915fc99754f778be0f65289249917a06 (diff)
downloadZLUDA-a4ef12947d552af77b1d564747afb9c78b536913.tar.gz
ZLUDA-a4ef12947d552af77b1d564747afb9c78b536913.zip
Fix bugs
-rw-r--r--ptx/src/test/spirv_run/atom_inc.spvtxt170
-rw-r--r--ptx/src/test/spirv_run/extern_shared_call.spvtxt84
-rw-r--r--ptx/src/test/spirv_run/mod.rs15
-rw-r--r--ptx/src/translate.rs4
4 files changed, 137 insertions, 136 deletions
diff --git a/ptx/src/test/spirv_run/atom_inc.spvtxt b/ptx/src/test/spirv_run/atom_inc.spvtxt
index 6948cd9..fda26c5 100644
--- a/ptx/src/test/spirv_run/atom_inc.spvtxt
+++ b/ptx/src/test/spirv_run/atom_inc.spvtxt
@@ -1,89 +1,81 @@
-; SPIR-V
-; Version: 1.3
-; Generator: rspirv
-; Bound: 60
-OpCapability GenericPointer
-OpCapability Linkage
-OpCapability Addresses
-OpCapability Kernel
-OpCapability Int8
-OpCapability Int16
-OpCapability Int64
-OpCapability Float16
-OpCapability Float64
-; OpCapability FunctionFloatControlINTEL
-; OpExtension "SPV_INTEL_float_controls2"
-%49 = OpExtInstImport "OpenCL.std"
-OpMemoryModel Physical64 OpenCL
-OpEntryPoint Kernel %1 "atom_inc"
-OpDecorate %40 LinkageAttributes "__notcuda_ptx_impl__atom_relaxed_gpu_generic_inc" Import
-OpDecorate %44 LinkageAttributes "__notcuda_ptx_impl__atom_relaxed_gpu_global_inc" Import
-%50 = OpTypeVoid
-%51 = OpTypeInt 32 0
-%52 = OpTypePointer Generic %51
-%53 = OpTypeFunction %51 %52 %51
-%54 = OpTypePointer CrossWorkgroup %51
-%55 = OpTypeFunction %51 %54 %51
-%56 = OpTypeInt 64 0
-%57 = OpTypeFunction %50 %56 %56
-%58 = OpTypePointer Function %56
-%59 = OpTypePointer Function %51
-%27 = OpConstant %51 101
-%28 = OpConstant %51 101
-%29 = OpConstant %56 4
-%31 = OpConstant %56 8
-%40 = OpFunction %51 None %53
-%42 = OpFunctionParameter %52
-%43 = OpFunctionParameter %51
-OpFunctionEnd
-%44 = OpFunction %51 None %55
-%46 = OpFunctionParameter %54
-%47 = OpFunctionParameter %51
-OpFunctionEnd
-%1 = OpFunction %50 None %57
-%9 = OpFunctionParameter %56
-%10 = OpFunctionParameter %56
-%39 = OpLabel
-%2 = OpVariable %58 Function
-%3 = OpVariable %58 Function
-%4 = OpVariable %58 Function
-%5 = OpVariable %58 Function
-%6 = OpVariable %59 Function
-%7 = OpVariable %59 Function
-%8 = OpVariable %59 Function
-OpStore %2 %9
-OpStore %3 %10
-%12 = OpLoad %56 %2
-%11 = OpCopyObject %56 %12
-OpStore %4 %11
-%14 = OpLoad %56 %3
-%13 = OpCopyObject %56 %14
-OpStore %5 %13
-%16 = OpLoad %56 %4
-%33 = OpConvertUToPtr %52 %16
-%15 = OpFunctionCall %51 %40 %33 %27
-OpStore %6 %15
-%18 = OpLoad %56 %4
-%34 = OpConvertUToPtr %54 %18
-%17 = OpFunctionCall %51 %44 %34 %28
-OpStore %7 %17
-%20 = OpLoad %56 %4
-%35 = OpConvertUToPtr %52 %20
-%19 = OpLoad %51 %35
-OpStore %8 %19
-%21 = OpLoad %56 %5
-%22 = OpLoad %51 %6
-%36 = OpConvertUToPtr %52 %21
-OpStore %36 %22
-%23 = OpLoad %56 %5
-%24 = OpLoad %51 %7
-%30 = OpIAdd %56 %23 %29
-%37 = OpConvertUToPtr %52 %30
-OpStore %37 %24
-%25 = OpLoad %56 %5
-%26 = OpLoad %51 %8
-%32 = OpIAdd %56 %25 %31
-%38 = OpConvertUToPtr %52 %32
-OpStore %38 %26
-OpReturn
-OpFunctionEnd \ No newline at end of file
+ OpCapability GenericPointer
+ OpCapability Linkage
+ OpCapability Addresses
+ OpCapability Kernel
+ OpCapability Int8
+ OpCapability Int16
+ OpCapability Int64
+ OpCapability Float16
+ OpCapability Float64
+ %47 = OpExtInstImport "OpenCL.std"
+ OpMemoryModel Physical64 OpenCL
+ OpEntryPoint Kernel %1 "atom_inc"
+ OpDecorate %38 LinkageAttributes "__notcuda_ptx_impl__atom_relaxed_gpu_generic_inc" Import
+ OpDecorate %42 LinkageAttributes "__notcuda_ptx_impl__atom_relaxed_gpu_global_inc" Import
+ %void = OpTypeVoid
+ %uint = OpTypeInt 32 0
+%_ptr_Generic_uint = OpTypePointer Generic %uint
+ %51 = OpTypeFunction %uint %_ptr_Generic_uint %uint
+%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint
+ %53 = OpTypeFunction %uint %_ptr_CrossWorkgroup_uint %uint
+ %ulong = OpTypeInt 64 0
+ %55 = OpTypeFunction %void %ulong %ulong
+%_ptr_Function_ulong = OpTypePointer Function %ulong
+%_ptr_Function_uint = OpTypePointer Function %uint
+ %uint_101 = OpConstant %uint 101
+ %uint_101_0 = OpConstant %uint 101
+ %ulong_4 = OpConstant %ulong 4
+ %ulong_8 = OpConstant %ulong 8
+ %38 = OpFunction %uint None %51
+ %40 = OpFunctionParameter %_ptr_Generic_uint
+ %41 = OpFunctionParameter %uint
+ OpFunctionEnd
+ %42 = OpFunction %uint None %53
+ %44 = OpFunctionParameter %_ptr_CrossWorkgroup_uint
+ %45 = OpFunctionParameter %uint
+ OpFunctionEnd
+ %1 = OpFunction %void None %55
+ %9 = OpFunctionParameter %ulong
+ %10 = OpFunctionParameter %ulong
+ %37 = OpLabel
+ %2 = OpVariable %_ptr_Function_ulong Function
+ %3 = OpVariable %_ptr_Function_ulong Function
+ %4 = OpVariable %_ptr_Function_ulong Function
+ %5 = OpVariable %_ptr_Function_ulong Function
+ %6 = OpVariable %_ptr_Function_uint Function
+ %7 = OpVariable %_ptr_Function_uint Function
+ %8 = OpVariable %_ptr_Function_uint Function
+ OpStore %2 %9
+ OpStore %3 %10
+ %11 = OpLoad %ulong %2
+ OpStore %4 %11
+ %12 = OpLoad %ulong %3
+ OpStore %5 %12
+ %14 = OpLoad %ulong %4
+ %31 = OpConvertUToPtr %_ptr_Generic_uint %14
+ %13 = OpFunctionCall %uint %38 %31 %uint_101
+ OpStore %6 %13
+ %16 = OpLoad %ulong %4
+ %32 = OpConvertUToPtr %_ptr_CrossWorkgroup_uint %16
+ %15 = OpFunctionCall %uint %42 %32 %uint_101_0
+ OpStore %7 %15
+ %18 = OpLoad %ulong %4
+ %33 = OpConvertUToPtr %_ptr_Generic_uint %18
+ %17 = OpLoad %uint %33
+ OpStore %8 %17
+ %19 = OpLoad %ulong %5
+ %20 = OpLoad %uint %6
+ %34 = OpConvertUToPtr %_ptr_Generic_uint %19
+ OpStore %34 %20
+ %21 = OpLoad %ulong %5
+ %22 = OpLoad %uint %7
+ %28 = OpIAdd %ulong %21 %ulong_4
+ %35 = OpConvertUToPtr %_ptr_Generic_uint %28
+ OpStore %35 %22
+ %23 = OpLoad %ulong %5
+ %24 = OpLoad %uint %8
+ %30 = OpIAdd %ulong %23 %ulong_8
+ %36 = OpConvertUToPtr %_ptr_Generic_uint %30
+ OpStore %36 %24
+ OpReturn
+ OpFunctionEnd
diff --git a/ptx/src/test/spirv_run/extern_shared_call.spvtxt b/ptx/src/test/spirv_run/extern_shared_call.spvtxt
index d979193..39f8683 100644
--- a/ptx/src/test/spirv_run/extern_shared_call.spvtxt
+++ b/ptx/src/test/spirv_run/extern_shared_call.spvtxt
@@ -7,7 +7,7 @@
OpCapability Int64
OpCapability Float16
OpCapability Float64
- %48 = OpExtInstImport "OpenCL.std"
+ %46 = OpExtInstImport "OpenCL.std"
OpMemoryModel Physical64 OpenCL
OpEntryPoint Kernel %14 "extern_shared_call" %1
OpDecorate %1 Alignment 4
@@ -18,78 +18,76 @@
%1 = OpVariable %_ptr_Workgroup__ptr_Workgroup_uint Workgroup
%uchar = OpTypeInt 8 0
%_ptr_Workgroup_uchar = OpTypePointer Workgroup %uchar
- %55 = OpTypeFunction %void %_ptr_Workgroup_uchar
+ %53 = OpTypeFunction %void %_ptr_Workgroup_uchar
%_ptr_Function__ptr_Workgroup_uchar = OpTypePointer Function %_ptr_Workgroup_uchar
%ulong = OpTypeInt 64 0
%_ptr_Function_ulong = OpTypePointer Function %ulong
%_ptr_Function__ptr_Workgroup_uint = OpTypePointer Function %_ptr_Workgroup_uint
%_ptr_Workgroup_ulong = OpTypePointer Workgroup %ulong
%ulong_2 = OpConstant %ulong 2
- %62 = OpTypeFunction %void %ulong %ulong %_ptr_Workgroup_uchar
+ %60 = OpTypeFunction %void %ulong %ulong %_ptr_Workgroup_uchar
%_ptr_CrossWorkgroup_ulong = OpTypePointer CrossWorkgroup %ulong
- %2 = OpFunction %void None %55
- %40 = OpFunctionParameter %_ptr_Workgroup_uchar
- %56 = OpLabel
- %41 = OpVariable %_ptr_Function__ptr_Workgroup_uchar Function
+ %2 = OpFunction %void None %53
+ %38 = OpFunctionParameter %_ptr_Workgroup_uchar
+ %54 = OpLabel
+ %39 = OpVariable %_ptr_Function__ptr_Workgroup_uchar Function
%3 = OpVariable %_ptr_Function_ulong Function
- OpStore %41 %40
+ OpStore %39 %38
OpBranch %13
%13 = OpLabel
- %42 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %41
- %5 = OpLoad %_ptr_Workgroup_uint %42
+ %40 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %39
+ %5 = OpLoad %_ptr_Workgroup_uint %40
%11 = OpBitcast %_ptr_Workgroup_ulong %5
%4 = OpLoad %ulong %11
OpStore %3 %4
%7 = OpLoad %ulong %3
%6 = OpIAdd %ulong %7 %ulong_2
OpStore %3 %6
- %43 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %41
- %8 = OpLoad %_ptr_Workgroup_uint %43
+ %41 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %39
+ %8 = OpLoad %_ptr_Workgroup_uint %41
%9 = OpLoad %ulong %3
%12 = OpBitcast %_ptr_Workgroup_ulong %8
OpStore %12 %9
OpReturn
OpFunctionEnd
- %14 = OpFunction %void None %62
+ %14 = OpFunction %void None %60
%20 = OpFunctionParameter %ulong
%21 = OpFunctionParameter %ulong
- %44 = OpFunctionParameter %_ptr_Workgroup_uchar
- %63 = OpLabel
- %45 = OpVariable %_ptr_Function__ptr_Workgroup_uchar Function
+ %42 = OpFunctionParameter %_ptr_Workgroup_uchar
+ %61 = OpLabel
+ %43 = OpVariable %_ptr_Function__ptr_Workgroup_uchar Function
%15 = OpVariable %_ptr_Function_ulong Function
%16 = OpVariable %_ptr_Function_ulong Function
%17 = OpVariable %_ptr_Function_ulong Function
%18 = OpVariable %_ptr_Function_ulong Function
%19 = OpVariable %_ptr_Function_ulong Function
- OpStore %45 %44
- OpBranch %38
- %38 = OpLabel
+ OpStore %43 %42
+ OpBranch %36
+ %36 = OpLabel
OpStore %15 %20
OpStore %16 %21
- %23 = OpLoad %ulong %15
- %22 = OpCopyObject %ulong %23
+ %22 = OpLoad %ulong %15
OpStore %17 %22
- %25 = OpLoad %ulong %16
- %24 = OpCopyObject %ulong %25
- OpStore %18 %24
- %27 = OpLoad %ulong %17
- %34 = OpConvertUToPtr %_ptr_CrossWorkgroup_ulong %27
- %26 = OpLoad %ulong %34
- OpStore %19 %26
- %46 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %45
- %28 = OpLoad %_ptr_Workgroup_uint %46
- %29 = OpLoad %ulong %19
- %35 = OpBitcast %_ptr_Workgroup_ulong %28
- OpStore %35 %29
- %65 = OpFunctionCall %void %2 %44
- %47 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %45
- %31 = OpLoad %_ptr_Workgroup_uint %47
- %36 = OpBitcast %_ptr_Workgroup_ulong %31
- %30 = OpLoad %ulong %36
- OpStore %19 %30
- %32 = OpLoad %ulong %18
- %33 = OpLoad %ulong %19
- %37 = OpConvertUToPtr %_ptr_CrossWorkgroup_ulong %32
- OpStore %37 %33
+ %23 = OpLoad %ulong %16
+ OpStore %18 %23
+ %25 = OpLoad %ulong %17
+ %32 = OpConvertUToPtr %_ptr_CrossWorkgroup_ulong %25
+ %24 = OpLoad %ulong %32
+ OpStore %19 %24
+ %44 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %43
+ %26 = OpLoad %_ptr_Workgroup_uint %44
+ %27 = OpLoad %ulong %19
+ %33 = OpBitcast %_ptr_Workgroup_ulong %26
+ OpStore %33 %27
+ %63 = OpFunctionCall %void %2 %42
+ %45 = OpBitcast %_ptr_Function__ptr_Workgroup_uint %43
+ %29 = OpLoad %_ptr_Workgroup_uint %45
+ %34 = OpBitcast %_ptr_Workgroup_ulong %29
+ %28 = OpLoad %ulong %34
+ OpStore %19 %28
+ %30 = OpLoad %ulong %18
+ %31 = OpLoad %ulong %19
+ %35 = OpConvertUToPtr %_ptr_CrossWorkgroup_ulong %30
+ OpStore %35 %31
OpReturn
OpFunctionEnd
diff --git a/ptx/src/test/spirv_run/mod.rs b/ptx/src/test/spirv_run/mod.rs
index ab79a88..bb04d2d 100644
--- a/ptx/src/test/spirv_run/mod.rs
+++ b/ptx/src/test/spirv_run/mod.rs
@@ -136,7 +136,6 @@ test_ptx!(
test_ptx!(stateful_ld_st_simple, [121u64], [121u64]);
test_ptx!(stateful_ld_st_ntid, [123u64], [123u64]);
-
struct DisplayError<T: Debug> {
err: T,
}
@@ -295,7 +294,7 @@ fn test_spvtxt_assert<'a>(
rspirv::binary::parse_words(&parsed_spirv, &mut loader)?;
let spvtxt_mod = loader.module();
unsafe { spirv_tools::spvBinaryDestroy(spv_binary) };
- if !is_spirv_fn_equal(&spirv_module.spirv.functions[0], &spvtxt_mod.functions[0]) {
+ if !is_spirv_fns_equal(&spirv_module.spirv.functions, &spvtxt_mod.functions) {
// We could simply use ptx_mod.disassemble, but SPIRV-Tools text formattinmg is so much nicer
let spv_from_ptx_binary = spirv_module.spirv.assemble();
let mut spv_text: spirv_tools::spv_text = ptr::null_mut();
@@ -367,6 +366,18 @@ impl<T: Copy + Eq + Hash> EqMap<T> {
}
}
+fn is_spirv_fns_equal(fns1: &[Function], fns2: &[Function]) -> bool {
+ if fns1.len() != fns2.len() {
+ return false;
+ }
+ for (fn1, fn2) in fns1.iter().zip(fns2.iter()) {
+ if !is_spirv_fn_equal(fn1, fn2) {
+ return false;
+ }
+ }
+ true
+}
+
fn is_spirv_fn_equal(fn1: &Function, fn2: &Function) -> bool {
let mut map = EqMap::new();
if !is_option_equal(&fn1.def, &fn2.def, &mut map, is_instr_equal) {
diff --git a/ptx/src/translate.rs b/ptx/src/translate.rs
index fa84043..50f37fb 100644
--- a/ptx/src/translate.rs
+++ b/ptx/src/translate.rs
@@ -1206,7 +1206,7 @@ fn translate_variable<'a>(
// If it's a pointer it will be translated to a method parameter later
if let ast::Type::Pointer(..) = var_type {
is_variable = true;
- var_type.param_pointer_to(ast::LdStateSpace::Param)?
+ var_type
} else {
var_type.param_pointer_to(ast::LdStateSpace::Shared)?
}
@@ -4160,7 +4160,7 @@ fn expand_map_variables<'a, 'b>(
// If it's a pointer it will be translated to a method parameter later
if let ast::Type::Pointer(..) = var_type {
is_variable = true;
- var_type.param_pointer_to(ast::LdStateSpace::Param)?
+ var_type
} else {
var_type.param_pointer_to(ast::LdStateSpace::Shared)?
}