brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 1f26933 Raw
175 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -verify-machineinstrs | FileCheck %s --check-prefix=CHECK3 4define i1 @saddo_not_i32(i32 %v1, i32 %v2) {5; CHECK-LABEL: saddo_not_i32:6; CHECK:       ## %bb.0: ## %entry7; CHECK-NEXT:    addl %esi, %edi8; CHECK-NEXT:    setno %al9; CHECK-NEXT:    retq10entry:11  %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %v1, i32 %v2)12  %obit = extractvalue {i32, i1} %t, 113  %ret = xor i1 %obit, true14  ret i1 %ret15}16 17define i1 @saddo_not_i64(i64 %v1, i64 %v2) {18; CHECK-LABEL: saddo_not_i64:19; CHECK:       ## %bb.0: ## %entry20; CHECK-NEXT:    addq %rsi, %rdi21; CHECK-NEXT:    setno %al22; CHECK-NEXT:    retq23entry:24  %t = call {i64, i1} @llvm.sadd.with.overflow.i64(i64 %v1, i64 %v2)25  %obit = extractvalue {i64, i1} %t, 126  %ret = xor i1 %obit, true27  ret i1 %ret28}29 30define i1 @uaddo_not_i32(i32 %v1, i32 %v2) {31; CHECK-LABEL: uaddo_not_i32:32; CHECK:       ## %bb.0: ## %entry33; CHECK-NEXT:    addl %esi, %edi34; CHECK-NEXT:    setae %al35; CHECK-NEXT:    retq36entry:37  %t = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %v1, i32 %v2)38  %obit = extractvalue {i32, i1} %t, 139  %ret = xor i1 %obit, true40  ret i1 %ret41}42 43define i1 @uaddo_not_i64(i64 %v1, i64 %v2) {44; CHECK-LABEL: uaddo_not_i64:45; CHECK:       ## %bb.0: ## %entry46; CHECK-NEXT:    addq %rsi, %rdi47; CHECK-NEXT:    setae %al48; CHECK-NEXT:    retq49entry:50  %t = call {i64, i1} @llvm.uadd.with.overflow.i64(i64 %v1, i64 %v2)51  %obit = extractvalue {i64, i1} %t, 152  %ret = xor i1 %obit, true53  ret i1 %ret54}55 56define i1 @ssubo_not_i32(i32 %v1, i32 %v2) {57; CHECK-LABEL: ssubo_not_i32:58; CHECK:       ## %bb.0: ## %entry59; CHECK-NEXT:    cmpl %esi, %edi60; CHECK-NEXT:    setno %al61; CHECK-NEXT:    retq62entry:63  %t = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %v1, i32 %v2)64  %obit = extractvalue {i32, i1} %t, 165  %ret = xor i1 %obit, true66  ret i1 %ret67}68 69define i1 @ssub_not_i64(i64 %v1, i64 %v2) {70; CHECK-LABEL: ssub_not_i64:71; CHECK:       ## %bb.0: ## %entry72; CHECK-NEXT:    cmpq %rsi, %rdi73; CHECK-NEXT:    setno %al74; CHECK-NEXT:    retq75entry:76  %t = call {i64, i1} @llvm.ssub.with.overflow.i64(i64 %v1, i64 %v2)77  %obit = extractvalue {i64, i1} %t, 178  %ret = xor i1 %obit, true79  ret i1 %ret80}81 82define i1 @usubo_not_i32(i32 %v1, i32 %v2) {83; CHECK-LABEL: usubo_not_i32:84; CHECK:       ## %bb.0: ## %entry85; CHECK-NEXT:    cmpl %esi, %edi86; CHECK-NEXT:    setae %al87; CHECK-NEXT:    retq88entry:89  %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %v1, i32 %v2)90  %obit = extractvalue {i32, i1} %t, 191  %ret = xor i1 %obit, true92  ret i1 %ret93}94 95define i1 @usubo_not_i64(i64 %v1, i64 %v2) {96; CHECK-LABEL: usubo_not_i64:97; CHECK:       ## %bb.0: ## %entry98; CHECK-NEXT:    cmpq %rsi, %rdi99; CHECK-NEXT:    setae %al100; CHECK-NEXT:    retq101entry:102  %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 %v1, i64 %v2)103  %obit = extractvalue {i64, i1} %t, 1104  %ret = xor i1 %obit, true105  ret i1 %ret106}107 108define i1 @smulo_not_i32(i32 %v1, i32 %v2) {109; CHECK-LABEL: smulo_not_i32:110; CHECK:       ## %bb.0: ## %entry111; CHECK-NEXT:    imull %esi, %edi112; CHECK-NEXT:    setno %al113; CHECK-NEXT:    retq114entry:115  %t = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %v1, i32 %v2)116  %obit = extractvalue {i32, i1} %t, 1117  %ret = xor i1 %obit, true118  ret i1 %ret119}120 121define i1 @smulo_not_i64(i64 %v1, i64 %v2) {122; CHECK-LABEL: smulo_not_i64:123; CHECK:       ## %bb.0: ## %entry124; CHECK-NEXT:    imulq %rsi, %rdi125; CHECK-NEXT:    setno %al126; CHECK-NEXT:    retq127entry:128  %t = call {i64, i1} @llvm.smul.with.overflow.i64(i64 %v1, i64 %v2)129  %obit = extractvalue {i64, i1} %t, 1130  %ret = xor i1 %obit, true131  ret i1 %ret132}133 134define i1 @umulo_not_i32(i32 %v1, i32 %v2) {135; CHECK-LABEL: umulo_not_i32:136; CHECK:       ## %bb.0: ## %entry137; CHECK-NEXT:    movl %edi, %eax138; CHECK-NEXT:    mull %esi139; CHECK-NEXT:    setno %al140; CHECK-NEXT:    retq141entry:142  %t = call {i32, i1} @llvm.umul.with.overflow.i32(i32 %v1, i32 %v2)143  %obit = extractvalue {i32, i1} %t, 1144  %ret = xor i1 %obit, true145  ret i1 %ret146}147 148define i1 @umulo_not_i64(i64 %v1, i64 %v2) {149; CHECK-LABEL: umulo_not_i64:150; CHECK:       ## %bb.0: ## %entry151; CHECK-NEXT:    movq %rdi, %rax152; CHECK-NEXT:    mulq %rsi153; CHECK-NEXT:    setno %al154; CHECK-NEXT:    retq155entry:156  %t = call {i64, i1} @llvm.umul.with.overflow.i64(i64 %v1, i64 %v2)157  %obit = extractvalue {i64, i1} %t, 1158  %ret = xor i1 %obit, true159  ret i1 %ret160}161 162declare {i32, i1} @llvm.sadd.with.overflow.i32(i32, i32) nounwind readnone163declare {i64, i1} @llvm.sadd.with.overflow.i64(i64, i64) nounwind readnone164declare {i32, i1} @llvm.uadd.with.overflow.i32(i32, i32) nounwind readnone165declare {i64, i1} @llvm.uadd.with.overflow.i64(i64, i64) nounwind readnone166declare {i32, i1} @llvm.ssub.with.overflow.i32(i32, i32) nounwind readnone167declare {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) nounwind readnone168declare {i32, i1} @llvm.usub.with.overflow.i32(i32, i32) nounwind readnone169declare {i64, i1} @llvm.usub.with.overflow.i64(i64, i64) nounwind readnone170declare {i32, i1} @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone171declare {i64, i1} @llvm.smul.with.overflow.i64(i64, i64) nounwind readnone172declare {i32, i1} @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone173declare {i64, i1} @llvm.umul.with.overflow.i64(i64, i64) nounwind readnone174 175