mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
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
This commit is contained in:
@@ -80,6 +80,15 @@ define i1 @uaddtest6(i8 %A, i8 %B) {
|
||||
; CHECK-NEXT: ret i1 %z
|
||||
}
|
||||
|
||||
define i8 @uaddtest7(i8 %A, i8 %B) {
|
||||
%x = call %overflow.result @llvm.uadd.with.overflow.i8(i8 %A, i8 %B)
|
||||
%z = extractvalue %overflow.result %x, 0
|
||||
ret i8 %z
|
||||
; CHECK: @uaddtest7
|
||||
; CHECK-NEXT: %z = add i8 %A, %B
|
||||
; CHECK-NEXT: ret i8 %z
|
||||
}
|
||||
|
||||
|
||||
define i8 @umultest1(i8 %A, i1* %overflowPtr) {
|
||||
%x = call %overflow.result @llvm.umul.with.overflow.i8(i8 0, i8 %A)
|
||||
|
Reference in New Issue
Block a user