<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98481>98481</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Redundant masks for umull and umaddl
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nikic
</td>
</tr>
</table>
<pre>
See https://llvm.godbolt.org/z/Gbe8xPzd9:
```llvm
define i64 @umull(i64 %x) {
%lo = and i64 %x, u0xffffffff
%hi = lshr i64 %x, 32
%mul = mul i64 %lo, %hi
ret i64 %mul
}
define i64 @umull_no_mask(i64 %x, i64 %y) {
%lo = and i64 %x, u0xffffffff
%hi = and i64 %y, u0xffffffff
%mul = mul i64 %lo, %hi
ret i64 %mul
}
define i64 @umaddl(i64 %x, i64 %a) {
%lo = and i64 %x, u0xffffffff
%hi = lshr i64 %x, 32
%mul = mul i64 %lo, %hi
%add = add i64 %a, %mul
ret i64 %add
}
define i64 @umaddl2(i64 %x, i64 %y, i64 %a) {
%lo = and i64 %x, u0xffffffff
%hi = and i64 %y, u0xffffffff
%mul = mul i64 %lo, %hi
%add = add i64 %a, %mul
ret i64 %add
}
```
Produces:
```asm
umull: // @umull
lsr x8, x0, #32
and x9, x0, #0xffffffff
umull x0, w9, w8
ret
.Lfunc_end0:
umull_no_mask: // @umull_no_mask
umull x0, w0, w1
ret
.Lfunc_end1:
umaddl: // @umaddl
lsr x8, x0, #32
and x9, x0, #0xffffffff
umaddl x0, w9, w8, x1
ret
.Lfunc_end2:
umaddl2: // @umaddl2
and x8, x0, #0xffffffff
and x9, x1, #0xffffffff
umaddl x0, w8, w9, x2
ret
.Lfunc_end3:
```
The masking is redundant in all cases. Note that it does get omitted for umull if *both* operands are mask, but not if only one is. And for umaddl it does not happen even if both are masked.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8Vl9vq7gT_TTmxSoyY0jggYfcRvm9_LS62t33yuAheGvsCJvetJ9-ZSB_SNPurrZ3raoQc2Z8zvF4ZOGc2hvEkmTfSLaNxOBb25dGPas6qqx8LX9DpK33B0f4hsCOwE7rly7eW1lZ7WPb7wns3gjs_ldhfvz-JosAZFvCNmTFpr8QMU1JbJRBqlYpJSkbukFrAvn4E7IjgYKS9bcJSikNk9pSwrdUGEkvsEc6sGMzjwW8VSNcu7Zf4DnMMAJZN-gRFJ4zRtsAGuMv6Xr0p-_doGdN6-388pGeJ2OfOuGeF7oeT4le_5XGi8Ar7OtnfvxErUJKfV-k-C828p_pC6yknBhIeUX0cSH5xgoh5d-2Aj7c8C_y5edt_peZczrw1159760canTv24Jwc1eY-gAPEkODubSG87JhaNePz2MeiB3ZRI9fF0QYwZwRVixg9ywKY1wowEfgjzHoRz5jevTTW_z_ZjD1ExrJzjqWp52fM74fN7LOMZ8Rmf4nHxNJroiMR_EzBneIjDFT9i92dsr9ztIQkywz3pEFN7Lgti6myfvE8s-J3QhI_rI0Fjryi5ojfLwv_H2hXx-H31ukYfOV2VPlaI9yMFIYT5WhQmtaC4cupr9Yj9S3wlPlqbTo6B49tZ3yHiVtbD_Xi2oogU1lfUtgQ-0Be2Gko6KfVglkq8FTY32AWqNfqQ2dy8V0Y06JRpmndQK0FYcDGoovaEJYSH9OiTKOZMllwQsRYZmsga1ZWsA6astCNIwXOfA0Xa1ZlqNkaVU1xYqnWCcFj1QJDFK2TpKE8wzWMWSNLBg2vKmzalUDSRl2Qul4vGXYfh8p5wYsizzNk0iLCrUbLysAlaif0UjCN5tNX7erlAAQeCQAnXIO5YM9eNWpN-GVNeFbto36MuR9qIa9IynTynl3Wckrr8eb0ClftqW_nvcnaHdXzodimqyLhl6XyzvSXvl2qOLadvOFaX48HHr7B9aewG7U5QjsJmkvJfwZAAD__1j7l-k">