Open Jasper-Bekkers opened 3 years ago
Noticed a few comments other things in the codebase yesterday:
llvm.expect
: https://github.com/EmbarkStudios/rust-gpu/blob/17814d69d1b2ddf6976357bd5a313e849883b7d6/rustc_codegen_spirv/src/builder/mod.rs#L386-L390llvm.sideeffects
: https://github.com/EmbarkStudios/rust-gpu/blob/17814d69d1b2ddf6976357bd5a313e849883b7d6/rustc_codegen_spirv/src/builder/mod.rs#L391-L395llvm.assume
: https://github.com/EmbarkStudios/rust-gpu/blob/17814d69d1b2ddf6976357bd5a313e849883b7d6/rustc_codegen_spirv/src/builder/mod.rs#L382-L385For the "equivalent of llvm.*
", there are a lot of these, those are just the ones that have been hit so far - I've just been JITting them into the codebase. For a reasonably full list, look at this file - for example, llvm.expect.i1
(sym::likely
/sym::unlikely
), llvm.debugtrap
(sym::breakpoint
), and so forth. (including llvm.trap
(sym::abort
), which was already mentioned at the start of this thread)
* Potentially request OpControlBarrier for non-uniform controlflow (useful for #29)
To clarify, for #29 the thinking is that OpControlBarrier without undefined behavior may be useful. This would be done by making the behavior a guaranteed hang when it's not executed in uniform control flow...
@khyperia not only is this legal spir-v, it is unspecified what the return value is (like, it's not specified as undefined, it's unspecified)
%f_ = OpFunction %int None %7
%9 = OpLabel
%x = OpVariable %_ptr_Function_int Function
%12 = OpLoad %int %x
OpReturnValue %12
OpFunctionEnd
can we get this fixed in the spec, please? this is equivalent to the glsl
int f() {
int x; // explicitly uninitialized
return x;
}
Tracking issue for features we think are missing or useful in to have in SPIR-V
OpTrap
: trigger a breakpoint