Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clang, due to some ABI constraints needs to generate llvm.trap intrinsics. According to the LangRef documentation a trap instruction is lowered to a target's trap instruction or to an abort() function if the target doesn't have a trap instruction. SPIRV has neither a trap nor an abort instruction and no current opcode has the semantics of an abort/trap. Currently the IR to SPIRV translator is crashing when it finds an llvm.trap intrinsic. The solution will require some thoughts on the SPIRV side to decide how to implement an abort instruction. This patch changes the translator so it doesn't crash. This will be revised when a decision is taken. NOTE: clang could eventually not generate an llvm.trap instruction in the current case (non-base destructor of an abstract class needs to be emmitted) but keep in mind that clang might generate an llvm.trap intrinsic some other ways and we might stumble into this issue again. An alternative to this, could be to add an LLVM pass that will get rid of the llvm.trap intrisincs in the code before the SPIRV translator. But having the translator solve this issue is a preferred solution.
- Loading branch information