<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149722>149722</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SPIRV][Vulkan] Invalid SPIRV generation for HLSL `sign`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:SPIR-V,
clang:HLSL:SPIRV
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
llvm-beanz
</td>
</tr>
</table>
<pre>
Given the following code:
```hlsl
StructuredBuffer<int4> In1 : register(t0);
RWStructuredBuffer<int4> Out1 : register(u4);
[numthreads(1,1,1)]
void main() {
// int
Out1[0] = sign(In1[0]);
int4 Tmp = {sign(In1[0].xyz), sign(In1[0].w)};
Out1[1] = Tmp;
Out1[2].xy = sign(In1[0].xy);
}
```
[Compiler Explorer](https://godbolt.org/z/48Y1j64x8)
The generated SPIRV contains an invalid `OpVectorShuffle` instruction:
```spirv
%69 = OpVectorShuffle %4 %66 %33 0 1 -1 -1
```
[Compiler Explorer](https://godbolt.org/z/6ceMx9731)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVE1v4zYQ_TWjCxGDGurDPOjgj3UbYIstNkGKHmlpZHGXIgWS8jr59QVlJ1skRU8LjGmIwzdP895QKgR9skQNlFso95ma4-B8Y8x5vDuSsi_Z0XXPzW_6TJbFgVjvjHE_tD2x1nUEYgN8iYpfYzDBAN88RD-3cfbUbee-Jw9ip20sQHxi9zZnIDbM00mHSB5wHTmgBLEFvvn61_9Av8zxA3Yu3rApyq2dxzh4Ul0AXOeAu9tPQrkHvjk73bFRaQu4BpQM6gRlDPAAeGDaxuUxUUG55VDuGYg9SzIBru_t6-4bK0uYgj2O03IQ6u2Hs6vL80s6j7uPdVY_Uqbevxa7EeevxI_j9C6F14r__Vqry_NPPer9v615U2jnxkkb8uzTZTLOk1_aWQ8xTiE5uihxct3Rmbhy_gR4eAE8FOu_829VcUmyXWs9DsROZMmrSB17-PP-6xNrnY1K28CUZdqeldEdg4p_mZ6ojc4_DHPfG4KKM23DYrV29uMchUn7c9rAspJLq-8qMMCySEtVpVUIxlnO7lL8yqarlv64yFqkAcq6RnRSSJVRk9el4CilrLOhkYp4z4UiyXneUyepbGXbFSjrLs8lz3SDHEteI8-rohL1an1sO6GICpmXbV9IKDiNSptVunmJPtMhzNTkhawRM6OOZMJySRGPqv1OtgOxSYrfPQEi4A4QW6PsCcTm988Pn2_ZJVnus9crPZ8CFNzoEMNPqqijWb4AV0S5h3L7NJvvyqYhvL-ZeLX3Zrd2lvXOs0SV7F3msOLZ7E3zTlIdh_m4at0IeEiUt7-7ybtv1EbAw9JqADzcuj03-E8AAAD__6jAVEg">