brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 85a1e35 Raw
97 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s3 4declare i32 @printf(ptr, ...) nounwind5declare {i32, i1} @llvm.ssub.with.overflow.i32(i32, i32)6declare {i32, i1} @llvm.usub.with.overflow.i32(i32, i32)7 8@ok = internal constant [4 x i8] c"%d\0A\00"9@no = internal constant [4 x i8] c"no\0A\00"10 11define i1 @func1(i32 %v1, i32 %v2) nounwind {12; CHECK-LABEL: func1:13; CHECK:       ; %bb.0: ; %entry14; CHECK-NEXT:    suba.l #12, %sp15; CHECK-NEXT:    move.l (16,%sp), %d016; CHECK-NEXT:    sub.l (20,%sp), %d017; CHECK-NEXT:    bvc .LBB0_118; CHECK-NEXT:  ; %bb.2: ; %overflow19; CHECK-NEXT:    lea (no,%pc), %a020; CHECK-NEXT:    move.l %a0, (%sp)21; CHECK-NEXT:    jsr printf22; CHECK-NEXT:    moveq #0, %d023; CHECK-NEXT:    adda.l #12, %sp24; CHECK-NEXT:    rts25; CHECK-NEXT:  .LBB0_1: ; %normal26; CHECK-NEXT:    move.l %d0, (4,%sp)27; CHECK-NEXT:    lea (ok,%pc), %a028; CHECK-NEXT:    move.l %a0, (%sp)29; CHECK-NEXT:    jsr printf30; CHECK-NEXT:    moveq #1, %d031; CHECK-NEXT:    adda.l #12, %sp32; CHECK-NEXT:    rts33entry:34  %t = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %v1, i32 %v2)35  %sum = extractvalue {i32, i1} %t, 036  %obit = extractvalue {i32, i1} %t, 137  br i1 %obit, label %overflow, label %normal38 39normal:40  %t1 = tail call i32 (ptr, ...) @printf( ptr @ok, i32 %sum ) nounwind41  ret i1 true42 43overflow:44  %t2 = tail call i32 (ptr, ...) @printf( ptr @no ) nounwind45  ret i1 false46}47 48define i1 @func2(i32 %v1, i32 %v2) nounwind {49; CHECK-LABEL: func2:50; CHECK:       ; %bb.0: ; %entry51; CHECK-NEXT:    suba.l #12, %sp52; CHECK-NEXT:    move.l (16,%sp), %d053; CHECK-NEXT:    sub.l (20,%sp), %d054; CHECK-NEXT:    bcc .LBB1_155; CHECK-NEXT:  ; %bb.2: ; %carry56; CHECK-NEXT:    lea (no,%pc), %a057; CHECK-NEXT:    move.l %a0, (%sp)58; CHECK-NEXT:    jsr printf59; CHECK-NEXT:    moveq #0, %d060; CHECK-NEXT:    adda.l #12, %sp61; CHECK-NEXT:    rts62; CHECK-NEXT:  .LBB1_1: ; %normal63; CHECK-NEXT:    move.l %d0, (4,%sp)64; CHECK-NEXT:    lea (ok,%pc), %a065; CHECK-NEXT:    move.l %a0, (%sp)66; CHECK-NEXT:    jsr printf67; CHECK-NEXT:    moveq #1, %d068; CHECK-NEXT:    adda.l #12, %sp69; CHECK-NEXT:    rts70entry:71  %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %v1, i32 %v2)72  %sum = extractvalue {i32, i1} %t, 073  %obit = extractvalue {i32, i1} %t, 174  br i1 %obit, label %carry, label %normal75 76normal:77  %t1 = tail call i32 (ptr, ...) @printf( ptr @ok, i32 %sum ) nounwind78  ret i1 true79 80carry:81  %t2 = tail call i32 (ptr, ...) @printf( ptr @no ) nounwind82  ret i1 false83}84 85define i1 @func3(i32 %x) nounwind {86; CHECK-LABEL: func3:87; CHECK:       ; %bb.0: ; %entry88; CHECK-NEXT:    moveq #-1, %d089; CHECK-NEXT:    add.l (4,%sp), %d090; CHECK-NEXT:    svs %d091; CHECK-NEXT:    rts92entry:93  %t = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %x, i32 1)94  %obit = extractvalue {i32, i1} %t, 195  ret i1 %obit96}97