<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/162915>162915</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[HLSL] Result of integer-vector and integer-vector multiplication is negated when one of the integer vectors is logical NOT'd
</td>
</tr>
<tr>
<th>Labels</th>
<td>
HLSL
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Icohedron
</td>
</tr>
</table>
<pre>
Result of integer-vector and integer-vector multiplication is incorrectly negated when one of the integer vectors is logical NOT'd (`!`).
## Reproduction
https://godbolt.org/z/n8zYee3W1
Given the following HLSL:
```hlsl
export uint32_t2 foo(uint32_t2 a, uint32_t2 b) {
return a * !b;
}
export uint32_t2 bar(uint32_t2 a, uint32_t2 b) {
return a * !bool2(b);
}
```
You would expect `foo` and `bar` to be equivalent. However, Clang produces the following IR:
```llvm
; RUN: clang-dxc -T lib_6_7 -Xclang -emit-llvm %s
define noundef <2 x i32> @foo(unsigned int vector[2], unsigned int vector[2])(<2 x i32> noundef %0, <2 x i32> noundef %1) local_unnamed_addr #0 {
%3 = icmp eq <2 x i32> %1, zeroinitializer
%4 = sub <2 x i32> zeroinitializer, %0
%5 = select <2 x i1> %3, <2 x i32> %4, <2 x i32> zeroinitializer
ret <2 x i32> %5
}
define noundef <2 x i32> @bar(unsigned int vector[2], unsigned int vector[2])(<2 x i32> noundef %0, <2 x i32> noundef %1) local_unnamed_addr #0 {
%3 = icmp eq <2 x i32> %1, zeroinitializer
%4 = select <2 x i1> %3, <2 x i32> %0, <2 x i32> zeroinitializer
ret <2 x i32> %4
}
attributes #0 = { alwaysinline mustprogress nofree norecurse nosync nounwind willreturn memory(none) "frame-pointer"="all" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcVU2P2zYT_jXjy0CGNLRk--CDd_36TYAgBbYp2pwWlDiy2VKkQlL27v76grKzH96k2za3AoJtcZ5nvp4xR4agd5Z5BeUVlJuJHOLe-dX7xu1ZeWcntVP3qxsOg4noWtQ28o59duAmOo_SqsujbjBR90Y3MmpnUQfUtnHecxPNPVreycgKj3u26Cwnn3HPX53gyUlINON2upEGP_70CWiuEGgBVQ5UjJ_LKeTr9JAAEnjDvXdqaFLMk2EfYx9ArIG2QNudU7Uzcer8Dmj7ALS1i4fPzOLX4gT_vz6wHVNpnTHuqO0O3334-UPykK9TyPHZm2AgX_Nd73zEQdso6DYSts4BLZ7eJdD1M3MNtESYX0G-RkT0HAdvUSLQGoGKGkQywXxzSuaV-1r6H3HvnCGgRYK9iPS1qlPUz27AoxuMQr7ruYkIVZ7qqvJRZ6jylEaVY3RYM_KXQR-kYRun-M4d-cA-ZXVtpN3hSQ0OFx19f3PRT2MOXXoXV3jzy0cQa2wSP1N3DWaf0Oj6trqdY_bbeIwZdzpmiYRAZTjlrbjVltG6wSpuEcQ14R1qQSD-hzDLz9rYcdLHeT2PGZRXBOVm7OVfWJdp8l44fQxFZZ7Y37UWSRjjGmluB2tlx-pWKuURSOSPggGVAkFsUDddj_zlsoLRzTU-sHfa6qil0Q_sExWonI3MMNQXrEt0yjJlew5YnmhsRp3PzOIcTryuKUV6ffqNlNLwveaWz6f7Lb3Ow_4f1OuZYP-k89_I-W93fva88zJGr-shcjhXJDapKpTmKO-Dtibp0g0h9t7tPIeA1rWek1aem8GH9Cvc22bs2VFbhUdtzPm-6bhz_h5oYZ3l8UYiar3sOOtdut89EIHYAJE0BoiS3bpM2zZkbZ91Mu4fEdEP_ASx0r4FOY1DlvryFjR62ffa7r6LCVE2f2S9d3EcrKwe2pZ9FvQDP8IXI_blNTpRK6GWYiknvCrmVV7QfD6vJvtVtZjNSOTzcr6s5rVSs7ZaiNlMNMtl0ZbFYqJXlFNZ5EVOOVFZTZVoVFU3ZdFWS6maAmY5d1Kbabr70hab6BAGXhUVLYtyYmTNJoxLnGhcW5T-CxO_SvisHnYBZrnRIYYnD1FHMy7-kVBu8MfW_L9f7ZPBm9XFvtZxP9TTxnVA23FJnL6SKr9zE4G2YwMC0Pbcg8OK_gwAAP__YcOmbA">