Fix computeKnownBits for ARMISD::CMOV
authorPirama Arumuga Nainar <pirama@google.com>
Thu, 23 Mar 2017 16:47:47 +0000 (16:47 +0000)
committerSylvestre Ledru <sylvestre@debian.org>
Fri, 13 Oct 2017 21:42:29 +0000 (22:42 +0100)
commitf8fccbd6e8b63d4b309baa96b6e22300922d62a9
treecebe368eca16c1a30c1180716c9e8815d143c904
parent907a62c236008b3562d72aa4cad0817869c113b8
Fix computeKnownBits for ARMISD::CMOV

Summary:
The true and false operands for the CMOV are operands 0 and 1.
ARMISelLowering.cpp::computeKnownBits was looking at operands 1 and 2
instead.  This can cause CMOV instructions to be incorrectly folded into
BFI if value set by the CMOV is another CMOV, whose known bits are
computed incorrectly.

This patch fixes the issue and adds a test case.

Reviewers: kristof.beyls, jmolloy

Subscribers: llvm-commits, aemerson, srhines, rengolin

Differential Revision: https://reviews.llvm.org/D31265

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298624 91177308-0d34-0410-b5e6-96231b3b80d8

Gbp-Pq: Name rust-0032-Fix-computeKnownBits-for-ARMISD-CMOV.patch
lib/Target/ARM/ARMISelLowering.cpp
test/CodeGen/ARM/no-cmov2bfi.ll [new file with mode: 0644]