mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-14 00:23:44 +00:00
Teach X86ISelLowering that the second result of X86ISD::UMUL is a flags
result. This allows us to compile: void *test12(long count) { return new int[count]; } into: test12: movl $4, %ecx movq %rdi, %rax mulq %rcx movq $-1, %rdi cmovnoq %rax, %rdi jmp __Znam ## TAILCALL instead of: test12: movl $4, %ecx movq %rdi, %rax mulq %rcx seto %cl testb %cl, %cl movq $-1, %rdi cmoveq %rax, %rdi jmp __Znam Of course it would be even better if the regalloc inverted the cmov to 'cmovoq', which would eliminate the need for the 'movq %rdi, %rax'. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120936 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b20e0b1fdd
commit
9637d5b22e
@ -7207,6 +7207,9 @@ static bool isX86LogicalCmp(SDValue Op) {
|
|||||||
Opc == X86ISD::AND))
|
Opc == X86ISD::AND))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (Op.getResNo() == 2 && Opc == X86ISD::UMUL)
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,4 +178,26 @@ define i64 @test11a(i64 %x, i64 %y) nounwind readnone ssp noredzone {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
declare noalias i8* @_Znam(i64) noredzone
|
||||||
|
|
||||||
|
define noalias i8* @test12(i64 %count) nounwind ssp noredzone {
|
||||||
|
entry:
|
||||||
|
%A = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %count, i64 4)
|
||||||
|
%B = extractvalue { i64, i1 } %A, 1
|
||||||
|
%C = extractvalue { i64, i1 } %A, 0
|
||||||
|
%D = select i1 %B, i64 -1, i64 %C
|
||||||
|
%call = tail call noalias i8* @_Znam(i64 %D) nounwind noredzone
|
||||||
|
ret i8* %call
|
||||||
|
; CHECK: test12:
|
||||||
|
; CHECK: mulq
|
||||||
|
; CHECK: movq $-1, %rdi
|
||||||
|
; CHECK: cmovnoq %rax, %rdi
|
||||||
|
; CHECK: jmp __Znam
|
||||||
|
}
|
||||||
|
|
||||||
|
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) nounwind readnone
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user