brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 5ebb115 Raw
136 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumbv7k-linux-gnu | FileCheck %s3 4declare {<2 x i64>, <2 x i1>} @llvm.uadd.with.overflow.v2i64(<2 x i64>, <2 x i64>)5declare {<2 x i64>, <2 x i1>} @llvm.usub.with.overflow.v2i64(<2 x i64>, <2 x i64>)6declare {<2 x i64>, <2 x i1>} @llvm.sadd.with.overflow.v2i64(<2 x i64>, <2 x i64>)7declare {<2 x i64>, <2 x i1>} @llvm.ssub.with.overflow.v2i64(<2 x i64>, <2 x i64>)8 9define <2 x i1> @uaddo(ptr %ptr, ptr %ptr2) {10; CHECK-LABEL: uaddo:11; CHECK:       @ %bb.0:12; CHECK-NEXT:    push {r4, r5, r6, r7, lr}13; CHECK-NEXT:    vld1.64 {d18, d19}, [r0]14; CHECK-NEXT:    vld1.64 {d16, d17}, [r1]15; CHECK-NEXT:    vmov r3, r2, d1816; CHECK-NEXT:    vadd.i64 q8, q9, q817; CHECK-NEXT:    movs r1, #018; CHECK-NEXT:    vmov r6, r7, d1919; CHECK-NEXT:    vmov lr, r12, d1620; CHECK-NEXT:    vmov r4, r5, d1721; CHECK-NEXT:    subs.w r3, lr, r322; CHECK-NEXT:    sbcs.w r2, r12, r223; CHECK-NEXT:    mov.w r2, #024; CHECK-NEXT:    it lo25; CHECK-NEXT:    movlo r2, #126; CHECK-NEXT:    cmp r2, #027; CHECK-NEXT:    it ne28; CHECK-NEXT:    movne.w r2, #-129; CHECK-NEXT:    subs r3, r4, r630; CHECK-NEXT:    sbcs.w r3, r5, r731; CHECK-NEXT:    it lo32; CHECK-NEXT:    movlo r1, #133; CHECK-NEXT:    cmp r1, #034; CHECK-NEXT:    it ne35; CHECK-NEXT:    movne.w r1, #-136; CHECK-NEXT:    vst1.64 {d16, d17}, [r0]37; CHECK-NEXT:    mov r0, r238; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}39  %x = load <2 x i64>, ptr %ptr, align 840  %y = load <2 x i64>, ptr %ptr2, align 841  %s = call {<2 x i64>, <2 x i1>} @llvm.uadd.with.overflow.v2i64(<2 x i64> %x, <2 x i64> %y)42  %m = extractvalue {<2 x i64>, <2 x i1>} %s, 043  %o = extractvalue {<2 x i64>, <2 x i1>} %s, 144  store <2 x i64> %m, ptr %ptr45  ret <2 x i1> %o46}47 48define <2 x i1> @usubo(ptr %ptr, ptr %ptr2) {49; CHECK-LABEL: usubo:50; CHECK:       @ %bb.0:51; CHECK-NEXT:    push {r4, r5, r6, r7, lr}52; CHECK-NEXT:    vld1.64 {d16, d17}, [r1]53; CHECK-NEXT:    movs r1, #054; CHECK-NEXT:    vld1.64 {d18, d19}, [r0]55; CHECK-NEXT:    vsub.i64 q8, q9, q856; CHECK-NEXT:    vmov lr, r12, d1857; CHECK-NEXT:    vmov r4, r5, d1958; CHECK-NEXT:    vmov r3, r2, d1659; CHECK-NEXT:    vmov r6, r7, d1760; CHECK-NEXT:    subs.w r3, lr, r361; CHECK-NEXT:    sbcs.w r2, r12, r262; CHECK-NEXT:    mov.w r2, #063; CHECK-NEXT:    it lo64; CHECK-NEXT:    movlo r2, #165; CHECK-NEXT:    cmp r2, #066; CHECK-NEXT:    it ne67; CHECK-NEXT:    movne.w r2, #-168; CHECK-NEXT:    subs r3, r4, r669; CHECK-NEXT:    sbcs.w r3, r5, r770; CHECK-NEXT:    it lo71; CHECK-NEXT:    movlo r1, #172; CHECK-NEXT:    cmp r1, #073; CHECK-NEXT:    it ne74; CHECK-NEXT:    movne.w r1, #-175; CHECK-NEXT:    vst1.64 {d16, d17}, [r0]76; CHECK-NEXT:    mov r0, r277; CHECK-NEXT:    pop {r4, r5, r6, r7, pc}78  %x = load <2 x i64>, ptr %ptr, align 879  %y = load <2 x i64>, ptr %ptr2, align 880  %s = call {<2 x i64>, <2 x i1>} @llvm.usub.with.overflow.v2i64(<2 x i64> %x, <2 x i64> %y)81  %m = extractvalue {<2 x i64>, <2 x i1>} %s, 082  %o = extractvalue {<2 x i64>, <2 x i1>} %s, 183  store <2 x i64> %m, ptr %ptr84  ret <2 x i1> %o85}86 87define <2 x i1> @saddo(ptr %ptr, ptr %ptr2) {88; CHECK-LABEL: saddo:89; CHECK:       @ %bb.0:90; CHECK-NEXT:    vld1.64 {d16, d17}, [r1]91; CHECK-NEXT:    vld1.64 {d18, d19}, [r0]92; CHECK-NEXT:    vqadd.s64 q10, q9, q893; CHECK-NEXT:    vadd.i64 q8, q9, q894; CHECK-NEXT:    vceq.i32 q9, q8, q1095; CHECK-NEXT:    vst1.64 {d16, d17}, [r0]96; CHECK-NEXT:    vrev64.32 q10, q997; CHECK-NEXT:    vand q9, q9, q1098; CHECK-NEXT:    vmvn q9, q999; CHECK-NEXT:    vmovn.i64 d18, q9100; CHECK-NEXT:    vmov r2, r1, d18101; CHECK-NEXT:    mov r0, r2102; CHECK-NEXT:    bx lr103  %x = load <2 x i64>, ptr %ptr, align 8104  %y = load <2 x i64>, ptr %ptr2, align 8105  %s = call {<2 x i64>, <2 x i1>} @llvm.sadd.with.overflow.v2i64(<2 x i64> %x, <2 x i64> %y)106  %m = extractvalue {<2 x i64>, <2 x i1>} %s, 0107  %o = extractvalue {<2 x i64>, <2 x i1>} %s, 1108  store <2 x i64> %m, ptr %ptr109  ret <2 x i1> %o110}111 112define <2 x i1> @ssubo(ptr %ptr, ptr %ptr2) {113; CHECK-LABEL: ssubo:114; CHECK:       @ %bb.0:115; CHECK-NEXT:    vld1.64 {d16, d17}, [r1]116; CHECK-NEXT:    vld1.64 {d18, d19}, [r0]117; CHECK-NEXT:    vqsub.s64 q10, q9, q8118; CHECK-NEXT:    vsub.i64 q8, q9, q8119; CHECK-NEXT:    vceq.i32 q9, q8, q10120; CHECK-NEXT:    vst1.64 {d16, d17}, [r0]121; CHECK-NEXT:    vrev64.32 q10, q9122; CHECK-NEXT:    vand q9, q9, q10123; CHECK-NEXT:    vmvn q9, q9124; CHECK-NEXT:    vmovn.i64 d18, q9125; CHECK-NEXT:    vmov r2, r1, d18126; CHECK-NEXT:    mov r0, r2127; CHECK-NEXT:    bx lr128  %x = load <2 x i64>, ptr %ptr, align 8129  %y = load <2 x i64>, ptr %ptr2, align 8130  %s = call {<2 x i64>, <2 x i1>} @llvm.ssub.with.overflow.v2i64(<2 x i64> %x, <2 x i64> %y)131  %m = extractvalue {<2 x i64>, <2 x i1>} %s, 0132  %o = extractvalue {<2 x i64>, <2 x i1>} %s, 1133  store <2 x i64> %m, ptr %ptr134  ret <2 x i1> %o135}136