1bb16282fSAmara Emerson; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2bb16282fSAmara Emerson; RUN: llc < %s -mtriple=x86_64-apple-darwin -verify-machineinstrs | FileCheck %s --check-prefix=CHECK 3bb16282fSAmara Emerson 4bb16282fSAmara Emersondefine i1 @saddo_not_i32(i32 %v1, i32 %v2) { 5bb16282fSAmara Emerson; CHECK-LABEL: saddo_not_i32: 6*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 7bb16282fSAmara Emerson; CHECK-NEXT: addl %esi, %edi 87d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 9bb16282fSAmara Emerson; CHECK-NEXT: retq 10bb16282fSAmara Emersonentry: 11bb16282fSAmara Emerson %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %v1, i32 %v2) 12bb16282fSAmara Emerson %obit = extractvalue {i32, i1} %t, 1 13bb16282fSAmara Emerson %ret = xor i1 %obit, true 14bb16282fSAmara Emerson ret i1 %ret 15bb16282fSAmara Emerson} 16bb16282fSAmara Emerson 17bb16282fSAmara Emersondefine i1 @saddo_not_i64(i64 %v1, i64 %v2) { 18bb16282fSAmara Emerson; CHECK-LABEL: saddo_not_i64: 19*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 20bb16282fSAmara Emerson; CHECK-NEXT: addq %rsi, %rdi 217d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 22bb16282fSAmara Emerson; CHECK-NEXT: retq 23bb16282fSAmara Emersonentry: 24bb16282fSAmara Emerson %t = call {i64, i1} @llvm.sadd.with.overflow.i64(i64 %v1, i64 %v2) 25bb16282fSAmara Emerson %obit = extractvalue {i64, i1} %t, 1 26bb16282fSAmara Emerson %ret = xor i1 %obit, true 27bb16282fSAmara Emerson ret i1 %ret 28bb16282fSAmara Emerson} 29bb16282fSAmara Emerson 30bb16282fSAmara Emersondefine i1 @uaddo_not_i32(i32 %v1, i32 %v2) { 31bb16282fSAmara Emerson; CHECK-LABEL: uaddo_not_i32: 32*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 33bb16282fSAmara Emerson; CHECK-NEXT: addl %esi, %edi 347d6c55f8SAmara Emerson; CHECK-NEXT: setae %al 35bb16282fSAmara Emerson; CHECK-NEXT: retq 36bb16282fSAmara Emersonentry: 37bb16282fSAmara Emerson %t = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %v1, i32 %v2) 38bb16282fSAmara Emerson %obit = extractvalue {i32, i1} %t, 1 39bb16282fSAmara Emerson %ret = xor i1 %obit, true 40bb16282fSAmara Emerson ret i1 %ret 41bb16282fSAmara Emerson} 42bb16282fSAmara Emerson 43bb16282fSAmara Emersondefine i1 @uaddo_not_i64(i64 %v1, i64 %v2) { 44bb16282fSAmara Emerson; CHECK-LABEL: uaddo_not_i64: 45*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 46bb16282fSAmara Emerson; CHECK-NEXT: addq %rsi, %rdi 477d6c55f8SAmara Emerson; CHECK-NEXT: setae %al 48bb16282fSAmara Emerson; CHECK-NEXT: retq 49bb16282fSAmara Emersonentry: 50bb16282fSAmara Emerson %t = call {i64, i1} @llvm.uadd.with.overflow.i64(i64 %v1, i64 %v2) 51bb16282fSAmara Emerson %obit = extractvalue {i64, i1} %t, 1 52bb16282fSAmara Emerson %ret = xor i1 %obit, true 53bb16282fSAmara Emerson ret i1 %ret 54bb16282fSAmara Emerson} 55bb16282fSAmara Emerson 56bb16282fSAmara Emersondefine i1 @ssubo_not_i32(i32 %v1, i32 %v2) { 57bb16282fSAmara Emerson; CHECK-LABEL: ssubo_not_i32: 58*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 59bb16282fSAmara Emerson; CHECK-NEXT: cmpl %esi, %edi 607d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 61bb16282fSAmara Emerson; CHECK-NEXT: retq 62bb16282fSAmara Emersonentry: 63bb16282fSAmara Emerson %t = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %v1, i32 %v2) 64bb16282fSAmara Emerson %obit = extractvalue {i32, i1} %t, 1 65bb16282fSAmara Emerson %ret = xor i1 %obit, true 66bb16282fSAmara Emerson ret i1 %ret 67bb16282fSAmara Emerson} 68bb16282fSAmara Emerson 69bb16282fSAmara Emersondefine i1 @ssub_not_i64(i64 %v1, i64 %v2) { 70bb16282fSAmara Emerson; CHECK-LABEL: ssub_not_i64: 71*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 72bb16282fSAmara Emerson; CHECK-NEXT: cmpq %rsi, %rdi 737d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 74bb16282fSAmara Emerson; CHECK-NEXT: retq 75bb16282fSAmara Emersonentry: 76bb16282fSAmara Emerson %t = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %v1, i64 %v2) 77bb16282fSAmara Emerson %obit = extractvalue {i64, i1} %t, 1 78bb16282fSAmara Emerson %ret = xor i1 %obit, true 79bb16282fSAmara Emerson ret i1 %ret 80bb16282fSAmara Emerson} 81bb16282fSAmara Emerson 82bb16282fSAmara Emersondefine i1 @usubo_not_i32(i32 %v1, i32 %v2) { 83bb16282fSAmara Emerson; CHECK-LABEL: usubo_not_i32: 84*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 85bb16282fSAmara Emerson; CHECK-NEXT: cmpl %esi, %edi 867d6c55f8SAmara Emerson; CHECK-NEXT: setae %al 87bb16282fSAmara Emerson; CHECK-NEXT: retq 88bb16282fSAmara Emersonentry: 89bb16282fSAmara Emerson %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %v1, i32 %v2) 90bb16282fSAmara Emerson %obit = extractvalue {i32, i1} %t, 1 91bb16282fSAmara Emerson %ret = xor i1 %obit, true 92bb16282fSAmara Emerson ret i1 %ret 93bb16282fSAmara Emerson} 94bb16282fSAmara Emerson 95bb16282fSAmara Emersondefine i1 @usubo_not_i64(i64 %v1, i64 %v2) { 96bb16282fSAmara Emerson; CHECK-LABEL: usubo_not_i64: 97*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 98bb16282fSAmara Emerson; CHECK-NEXT: cmpq %rsi, %rdi 997d6c55f8SAmara Emerson; CHECK-NEXT: setae %al 100bb16282fSAmara Emerson; CHECK-NEXT: retq 101bb16282fSAmara Emersonentry: 102bb16282fSAmara Emerson %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 %v1, i64 %v2) 103bb16282fSAmara Emerson %obit = extractvalue {i64, i1} %t, 1 104bb16282fSAmara Emerson %ret = xor i1 %obit, true 105bb16282fSAmara Emerson ret i1 %ret 106bb16282fSAmara Emerson} 107bb16282fSAmara Emerson 108bb16282fSAmara Emersondefine i1 @smulo_not_i32(i32 %v1, i32 %v2) { 109bb16282fSAmara Emerson; CHECK-LABEL: smulo_not_i32: 110*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 111bb16282fSAmara Emerson; CHECK-NEXT: imull %esi, %edi 1127d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 113bb16282fSAmara Emerson; CHECK-NEXT: retq 114bb16282fSAmara Emersonentry: 115bb16282fSAmara Emerson %t = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %v1, i32 %v2) 116bb16282fSAmara Emerson %obit = extractvalue {i32, i1} %t, 1 117bb16282fSAmara Emerson %ret = xor i1 %obit, true 118bb16282fSAmara Emerson ret i1 %ret 119bb16282fSAmara Emerson} 120bb16282fSAmara Emerson 121bb16282fSAmara Emersondefine i1 @smulo_not_i64(i64 %v1, i64 %v2) { 122bb16282fSAmara Emerson; CHECK-LABEL: smulo_not_i64: 123*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 124bb16282fSAmara Emerson; CHECK-NEXT: imulq %rsi, %rdi 1257d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 126bb16282fSAmara Emerson; CHECK-NEXT: retq 127bb16282fSAmara Emersonentry: 128bb16282fSAmara Emerson %t = call {i64, i1} @llvm.smul.with.overflow.i64(i64 %v1, i64 %v2) 129bb16282fSAmara Emerson %obit = extractvalue {i64, i1} %t, 1 130bb16282fSAmara Emerson %ret = xor i1 %obit, true 131bb16282fSAmara Emerson ret i1 %ret 132bb16282fSAmara Emerson} 133bb16282fSAmara Emerson 134bb16282fSAmara Emersondefine i1 @umulo_not_i32(i32 %v1, i32 %v2) { 135bb16282fSAmara Emerson; CHECK-LABEL: umulo_not_i32: 136*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 137bb16282fSAmara Emerson; CHECK-NEXT: movl %edi, %eax 138bb16282fSAmara Emerson; CHECK-NEXT: mull %esi 1397d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 140bb16282fSAmara Emerson; CHECK-NEXT: retq 141bb16282fSAmara Emersonentry: 142bb16282fSAmara Emerson %t = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %v1, i32 %v2) 143bb16282fSAmara Emerson %obit = extractvalue {i32, i1} %t, 1 144bb16282fSAmara Emerson %ret = xor i1 %obit, true 145bb16282fSAmara Emerson ret i1 %ret 146bb16282fSAmara Emerson} 147bb16282fSAmara Emerson 148bb16282fSAmara Emersondefine i1 @umulo_not_i64(i64 %v1, i64 %v2) { 149bb16282fSAmara Emerson; CHECK-LABEL: umulo_not_i64: 150*25528d6dSFrancis Visoiu Mistrih; CHECK: ## %bb.0: ## %entry 151bb16282fSAmara Emerson; CHECK-NEXT: movq %rdi, %rax 152bb16282fSAmara Emerson; CHECK-NEXT: mulq %rsi 1537d6c55f8SAmara Emerson; CHECK-NEXT: setno %al 154bb16282fSAmara Emerson; CHECK-NEXT: retq 155bb16282fSAmara Emersonentry: 156bb16282fSAmara Emerson %t = call {i64, i1} @llvm.umul.with.overflow.i64(i64 %v1, i64 %v2) 157bb16282fSAmara Emerson %obit = extractvalue {i64, i1} %t, 1 158bb16282fSAmara Emerson %ret = xor i1 %obit, true 159bb16282fSAmara Emerson ret i1 %ret 160bb16282fSAmara Emerson} 161bb16282fSAmara Emerson 162bb16282fSAmara Emersondeclare {i32, i1} @llvm.sadd.with.overflow.i32(i32, i32) nounwind readnone 163bb16282fSAmara Emersondeclare {i64, i1} @llvm.sadd.with.overflow.i64(i64, i64) nounwind readnone 164bb16282fSAmara Emersondeclare {i32, i1} @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone 165bb16282fSAmara Emersondeclare {i64, i1} @llvm.uadd.with.overflow.i64(i64, i64) nounwind readnone 166bb16282fSAmara Emersondeclare {i32, i1} @llvm.ssub.with.overflow.i32(i32, i32) nounwind readnone 167bb16282fSAmara Emersondeclare {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone 168bb16282fSAmara Emersondeclare {i32, i1} @llvm.usub.with.overflow.i32(i32, i32) nounwind readnone 169bb16282fSAmara Emersondeclare {i64, i1} @llvm.usub.with.overflow.i64(i64, i64) nounwind readnone 170bb16282fSAmara Emersondeclare {i32, i1} @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone 171bb16282fSAmara Emersondeclare {i64, i1} @llvm.smul.with.overflow.i64(i64, i64) nounwind readnone 172bb16282fSAmara Emersondeclare {i32, i1} @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone 173bb16282fSAmara Emersondeclare {i64, i1} @llvm.umul.with.overflow.i64(i64, i64) nounwind readnone 174bb16282fSAmara Emerson 175