diff options
author | Andrzej Janik <[email protected]> | 2020-11-19 00:35:06 +0100 |
---|---|---|
committer | Andrzej Janik <[email protected]> | 2020-11-19 00:35:06 +0100 |
commit | a4ef12947d552af77b1d564747afb9c78b536913 (patch) | |
tree | d373e4136a1509a9ccf7c3ebcbae3f11807226c3 | |
parent | c4437762915fc99754f778be0f65289249917a06 (diff) | |
download | ZLUDA-a4ef12947d552af77b1d564747afb9c78b536913.tar.gz ZLUDA-a4ef12947d552af77b1d564747afb9c78b536913.zip |
Fix bugs
-rw-r--r-- | ptx/src/test/spirv_run/atom_inc.spvtxt | 170 | ||||
-rw-r--r-- | ptx/src/test/spirv_run/extern_shared_call.spvtxt | 84 | ||||
-rw-r--r-- | ptx/src/test/spirv_run/mod.rs | 15 | ||||
-rw-r--r-- | ptx/src/translate.rs | 4 |
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)?
}
|