[Intrinsic] Give "is.constant" the "convergent" attribute
authorBill Wendling <isanbard@gmail.com>
Mon, 30 Mar 2020 18:45:58 +0000 (11:45 -0700)
committerBill Wendling <isanbard@gmail.com>
Mon, 30 Mar 2020 18:47:12 +0000 (11:47 -0700)
commitfa496ce3c6774097080c8a9cb808da56f383b938
tree65ba5deb3cb4abaed719bb13ebb7529fab17c0e2
parent24485aec4750255574a9a8211b3aef1ce00e83b6
[Intrinsic] Give "is.constant" the "convergent" attribute

Summary:
Code frequently relies upon the results of "is.constant" intrinsics to
DCE invalid code paths. We don't want the intrinsic to be made control-
dependent on any additional values. For instance, we can't split a PHI
into a "constant" and "non-constant" part via jump threading in order
to "optimize" the constant part, because the "is.constant" intrinsic is
meant to return "false".

Reviewers: wmi, kazu, MaskRay

Reviewed By: kazu

Subscribers: jdoerfert, efriedma, joerg, lebedev.ri, nikic, xbolva00, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D75799
llvm/include/llvm/IR/Intrinsics.td
llvm/test/Transforms/JumpThreading/is_constant.ll [new file with mode: 0644]