<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/152220>152220</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DirectX] Vector `mad` operations not being scalarized for integer types
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kmpeng
</td>
</tr>
</table>
<pre>
Discovered while running the offload-test-suite.
https://godbolt.org/z/TMEKbMaYP
``` hlsl
// RUN: %clang-dxc -T cs_6_5 -enable-16bit-types %s
StructuredBuffer<int16_t4> M0 : register(t0);
StructuredBuffer<int16_t4> A0 : register(t1);
StructuredBuffer<int16_t4> B0 : register(t2);
RWStructuredBuffer<int16_t4> Out0 : register(u3);
[numthreads(1,1,1)]
void main() {
Out0[0] = mad(M0[0], A0[0], B0[0]);
}
```
```
# .---command stderr------------
# | error: Cannot create IMad operation: Invalid overload type
# | These should never be used!!!
# | UNREACHABLE executed at E:/llvm-project/llvm/lib/Target/DirectX/DXILWriter/DXILBitcodeWriter.cpp:1025!
```
The llvm ir shows that the mad instruction `%dx.imad.i = tail call <4 x i16> @llvm.dx.imad.v4i16(<4 x i16> %17, <4 x i16> %27, <4 x i16> %37)` is not being scalarized when it should be. This is happening with all bit sizes of `int` and `uint`.
Fix is to add `dx_imad` and `dx_umad` here:
https://github.com/llvm/llvm-project/blob/64eba6ef9610a4a82e1610ecd806b8488144bad0/llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp#L58-L59
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVd9zozYQ_mvklx0YIRDGDzxgO55mmlw7qa93fcoItIBakDyScHz56zvCzsU9t3PXDBlL--Njl-_TSjinOo1YEr4mfLsQk--NLf8aD6i7RW3kl3KrXGOOaFHCS68GBDtprXQHvkcwbTsYISOPzkduUh5jQitCq977gyNpRdiOsF1nZG0GHxvbEbZ7JWy3f7z7uX4Uf_wawnN6fqAf3BAMcxI8ffxA0goI480gdBfJUwPRHhr3nD9ziFCLesAoyWvlI__lgC6EuvP7f_N2avxkUa6ntkVL0o3SPsmffUbSO3ikEKAtdsp5tIQVnhK2Iun6-7nVbW7yo7nr21z2NZfQ6unTdwB-mfwNxJReQxC-1tPoe4tCOsKKhLDN5X9F-JbQ6miUhFEoTVhB2ArIMqQCwIxO-JoSvgWSbmEUkrDi8c1G2Aaq6836ffNWwHJ7zei3a5ZCHEVRY8ZRaAnOS7Q2uvq7BJHlBtBaY0OrG6G18dBYFB7h_lFIMAe0wiujg_9eH8WgJASVBjVCEMMV0L5Hh-B6Mw0SNB7RQo0wOZSEJZfnPfrjh6e7avNTtX64AzxhM3mUIDzcndU8DMcxOljzJzb-sg0_qg6iFrbDYN0qi43_HFaf7x8-WTUTNW_WyjdG4tkWN4cDSauEMn4p4vpj0WrfI4Q3gLKh_hcHvhd-PnmjkKC0m9WijIaQw7g8xWoUMlYzfV6oARoxDEDSTQYnUEkeREQyGlDjt-hjFhys-CaK8WQZWL4xs383p8sgg5yCchAIqzGMCdeIQVj1Os8P1KD8GxU1xrDvlQvxvTgccB4rL8r3EGquQ6R6RQemDe0p7QN40A3J6XTeXsbNTp0Cijcg5OyWp-fQ2lWCPD1PF0uPFgObN2NK-X6q48aMV8z-k-96MIHpPMNa5Niu8oSKTBQMkzyh2MiC5nWRFUWSZbWQ9EcUcl6dPXsrtGuNHe91a2Z1sPSBF9EDXy1kmcpVuhILLJMlz7KUs7xY9GWTt1mStplkDV9mtcxXTUFXghXLhK9ayRaqZJRxWlDOUrrMijgp2qJuMG0p0owvBckojkIN8awKY7uFcm7CMuGMMboYRI2Dm68IxjS-wOwljIUbw5bzF6qnzgVZKefdO4xXfpjvlrd2-RZ-x8YbGxi5sPH1LP-HalpjQWmPHdr5ZLvFZIfyfzM3F-0I2126Opbs7wAAAP__eS8caQ">