X86 supports i8/i16 overflow ops (except i8 multiplies), we should
authorChris Lattner <sabre@nondot.org>
Sun, 19 Dec 2010 20:03:11 +0000 (20:03 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 19 Dec 2010 20:03:11 +0000 (20:03 +0000)
commita34b3cf953867b0802f3c19ee57e574277003cd7
tree56f9c7fe78c4d8b1e7f953ef6da98a456de9ff7e
parent8dd34173849aae00afd9c1c7880dc0acbce4ade8
X86 supports i8/i16 overflow ops (except i8 multiplies), we should
generate them.

Now we compile:

define zeroext i8 @X(i8 signext %a, i8 signext %b) nounwind ssp {
entry:
  %0 = tail call %0 @llvm.sadd.with.overflow.i8(i8 %a, i8 %b)
  %cmp = extractvalue %0 %0, 1
  br i1 %cmp, label %if.then, label %if.end

into:

_X:                                     ## @X
## BB#0:                                ## %entry
subl $12, %esp
movb 16(%esp), %al
addb 20(%esp), %al
jo LBB0_2

Before we were generating:

_X:                                     ## @X
## BB#0:                                ## %entry
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movb 12(%ebp), %al
testb %al, %al
setge %cl
movb 8(%ebp), %dl
testb %dl, %dl
setge %ah
cmpb %cl, %ah
sete %cl
addb %al, %dl
testb %dl, %dl
setge %al
cmpb %al, %ah
setne %al
andb %cl, %al
testb %al, %al
jne LBB0_2

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122186 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86ISelLowering.cpp
test/Transforms/InstCombine/intrinsics.ll