diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-03-03 00:35:56 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-03-03 00:35:56 +0000 |
commit | 7d9f2b93a356aa89186522bd61c5c565718ff555 (patch) | |
tree | 23c53369693ff5b3457349e0240ee4753c504bc6 /lib/CodeGen/MachineInstr.cpp | |
parent | a43398283dcb34568d2283dafbdfe0fa66b05033 (diff) |
This test case:
long test(long x) { return (x & 123124) | 3; }
Currently compiles to:
_test:
orl $3, %edi
movq %rdi, %rax
andq $123127, %rax
ret
This is because instruction and DAG combiners canonicalize
(or (and x, C), D) -> (and (or, D), (C | D))
However, this is only profitable if (C & D) != 0. It gets in the way of the
3-addressification because the input bits are known to be zero.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97616 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineInstr.cpp')
0 files changed, 0 insertions, 0 deletions