Fix a minor bug in two-address pass. It was missing a commute opportunity.
authorEvan Cheng <evan.cheng@apple.com>
Tue, 14 Dec 2010 21:34:53 +0000 (21:34 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 14 Dec 2010 21:34:53 +0000 (21:34 +0000)
commitbbc726d6240f1d8480b312832eba5f7dd914fa4d
tree8caa8c34390a993f938bf109dbe5805040f1afff
parent8d6d7d6e30f3c90f92c5a12522d1500ca92299bf
Fix a minor bug in two-address pass. It was missing a commute opportunity.
regB = move RCX
regA = op regB, regC
RAX  = move regA
where both regB and regC are killed. If regB is constrainted to non-compatible
physical registers but regC is not constrainted at all, then it's better to
commute the instruction.
       movl    %edi, %eax
       shlq    $32, %rcx
       leaq    (%rcx,%rax), %rax
=>
       movl    %edi, %eax
       shlq    $32, %rcx
       orq     %rcx, %rax
rdar://8762995

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121793 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/TwoAddressInstructionPass.cpp
test/CodeGen/X86/commute-two-addr.ll