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, 22 Dec 2017 10:17:30 +0000 (10:17 +0000)
commit8dab651d342f6ab43ea5ed0ba79406406f291be7
tree5cfc23d05855bc0624d59c084ca0802998a2a9a4
parenta9a864cc2fe218fe59d11369e8b0b8d29e56c951
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]