OSDN Git Service

X86: optimize generated code for integer ABS
authorManman Ren <mren@apple.com>
Thu, 7 Jun 2012 22:39:10 +0000 (22:39 +0000)
committerManman Ren <mren@apple.com>
Thu, 7 Jun 2012 22:39:10 +0000 (22:39 +0000)
commit9236362a64ce1609222512fe3f17eeb886a3ddea
treecb91606183c09759e1c7b415ea72c4665025cc7c
parentfa371eaff3c06b4d5a5ff5706a552f519b469756
X86: optimize generated code for integer ABS

This patch will generate the following for integer ABS:
      movl    %edi, %eax
      negl    %eax
      cmovll  %edi, %eax
INSTEAD OF
      movl    %edi, %ecx
      sarl    $31, %ecx
      leal    (%rdi,%rcx), %eax
      xorl    %ecx, %eax

There exists a target-independent DAG combine for integer ABS, which converts
integer ABS to sar+add+xor. For X86, we match this pattern back to neg+cmov.
This is implemented in PerformXorCombine.

rdar://10695237

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158175 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/iabs.ll