Nemanja Ivanovic via llvm-dev
2018-Jan-06 00:02 UTC
[llvm-dev] RFC: Legalize input operand to ATOMIC_CMP_SWAP* by zero-extending
I've already posted a patch (https://reviews.llvm.org/D41791) to do this, but here's a bit of a background. When the operands of an ISD::ATOMIC_CMP_SWAP{_WITH_SUCCESS} are legalized by promoting to a larger type, they're extended without specifying whether it's a sign or zero extension. However, an analogous node (SETCC) is legalized by zero-extending when the comparison code is for an equality comparison. The current legalization scheme leads to a bug in the PPC back end when the input is a negative constant. Namely, the unspecified extension causes the constant to be materialized with a sign-extending instruction. However, the atomic load instruction is a zero-extending instruction. Then the comparison is done on a wider register, leading to a bug. Of course, this can be fixed in the PPC codegen, but I think it makes more sense to change how this is legalized since the underlying comparison is indeed an equality comparison. Please let me know what you think. Also, if this is a direction we want to go in, I would appreciate it if people can review the changed test cases. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180106/a61b9914/attachment.html>