<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/81753>81753</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SPIRV] OpExecutionMode Entry Point <id> is not the Entry Point operand of an OpEntryPoint
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
VyacheslavLevytskyy
</td>
</tr>
</table>
<pre>
SPIRV-V Backend generates unnecessary OpExecutionMode records, putting into the <id>'s which are not the Entry Point operands of an OpEntryPoint and thus violating specification requirements (https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpExecutionMode).
Example of the code that causes one more, unnecessary OpExecutionMode record in addition to a required one is the following:
```
@GV = linkonce_odr addrspace(1) global [3 x i32] zeroinitializer, align 4
define spir_kernel void @k() {
entry:
%call = call spir_func i32 @square(i32 2)
ret void
}
define linkonce_odr dso_local spir_func i32 @square(i32 %in) {
entry:
%in.addr = alloca i32, align 4
store i32 %in, i32* %in.addr, align 4
%0 = load i32, i32* %in.addr, align 4
%1 = load i32, i32* %in.addr, align 4
%mul = mul nsw i32 %0, %1
ret i32 %mul
}
```
In the output there will be two OpExecutionMode instructions with just one OpEntryPoint:
```
...
OpEntryPoint Kernel %14 "k" %12
OpExecutionMode %14 ContractionOff
OpExecutionMode %17 ContractionOff
...
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU1v4zYQ_TXUZRBBoqSVfdAhieNi0Ra7aAFfA5ocSVzTpJYfdry_viBlp4432BQNAsnEcN68N6TeMOfkoBE70jyQZpWx4Edju82J8RGdYoc_8HDybnc6ZVsjTt3fXz__tbnbwAPjO9QCBtRomUcHQWvk6ByzJ_gyPb0gD14a_acRCBa5scIR-ghT8F7qAaT2BvyIQKpHKUj1RGjr4DhKPgKzCNr4FH7S3p7gq5Hag5nQMi0cmB6YjlVicI4xLcCPwcFBGsVSCTchl73kLPIAi9-DtLhH7R0Quhi9nxyp7gldE7q2OEjn7SnfjdZo43JjB0LXUe7dhtB1xHKEroOWvURRnmObfPR7RWh1o5jQZU6KFSnu5-fTC9tPCiPxKIrHpviReeAsOHRgNMLeWIwd-riRIDUwIWTS5Q2wiziRgKRLRXqjlDlKPUSRV1zIp-L8Py_r4rcNkGoFSuqd0RyfjbAR37qJcSR0URK6hEGZLVNAmocKXkBWlDQr-IHWSC29ZEr-QBvpMyUHDfV1RYG91AhukvZ5h1ajgoORAkhd7AhdRHTSPsx7MR7pK2MAQhvOlEoE04-E0gfNI4cI4b4HFju3iGtK6PKSatGnOmcq7eodTm80C2eeleHsoyKENlJ_xFrqPPYwEWcqwqam3XYIwHljEa5wH-eN91co76QR2hTzsRkmLtD_MbH8v4n7MJ9EfGt3vLAu4u6Ie936c2wf1O0B3FzA9Pys06U1wU8hffkW4SiVgi2CP5qfvgSpnbeBx7WDo_QjfAvOp_t_7Qu_vvt5nl8Yz39vLOX3-apGXTUQSneEJkUl_SnpDbU54dFob1ki-KXvP85o3814ZfjKPBNdJZbVkmXYlW3RLmlb0yIbO9FUdc1oyxuGy2K5qHnVFAssF8Wn7ULwKpMdLWhd0LIuP5VtUeRl2Tdl03BesH5bYUPqAvdMqlypwz46YCadC9gtyrapMsW2qFwaFJRqPEIKEhqNILNdzLnbhsGRulDSefcvipdepQmTLDP6xm0Drl3-MhCij_1iCrwzBLJgVffW1wfpx7DNudkTuo6Ezq-7yZpvyD2h6yQjenuS-U8AAAD__wEdLLE">