summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2015-09-25 23:21:38 +0000
committerSanjay Patel <spatel@rotateright.com>2015-09-25 23:21:38 +0000
commite1b09caaafc32398cdbbd62a77619162ec975707 (patch)
tree4786832f470ce09511f1d55555bcdf31be8d928c /llvm/lib/Analysis/ScalarEvolution.cpp
parent15ea016346d90d52d7ae308a1259da39af1f0dbd (diff)
downloadbcm5719-llvm-e1b09caaafc32398cdbbd62a77619162ec975707.tar.gz
bcm5719-llvm-e1b09caaafc32398cdbbd62a77619162ec975707.zip
[InstCombine] match De Morgan's Law hidden by zext ops (PR22723)
This is a fix for PR22723: https://llvm.org/bugs/show_bug.cgi?id=22723 My first attempt at this was to change what I thought was the root problem: xor (zext i1 X to i32), 1 --> zext (xor i1 X, true) to i32 ...but we create the opposite pattern in InstCombiner::visitZExt(), so infinite loop! My next idea was to fix the matchIfNot() implementation in PatternMatch, but that would mean potentially returning a different size for the match than what was input. I think this would require all users of m_Not to check the size of the returned match, so I abandoned that idea. I settled on just fixing the exact case presented in the PR. This patch does allow the 2 functions in PR22723 to compile identically (x86): bool test(bool x, bool y) { return !x | !y; } bool test(bool x, bool y) { return !x || !y; } ... andb %sil, %dil xorb $1, %dil movb %dil, %al retq Differential Revision: http://reviews.llvm.org/D12705 llvm-svn: 248634
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud