111 lines · plain
1; RUN: llc -O1 -mtriple=armv5te-none-none-eabi %s -o - | FileCheck %s2; RUN: llc -O1 -mtriple=armv6-none-none-eabi %s -o - | FileCheck %s3; RUN: llc -O1 -mtriple=armv7-none-none-eabi %s -o - | FileCheck %s4; RUN: llc -O1 -mtriple=thumbv7-none-none-eabi %s -o - | FileCheck %s5; RUN: llc -O1 -mtriple=thumbv6t2-none-none-eabi %s -o - | FileCheck %s6; RUN: llc -O1 -mtriple=thumbv7em-none-none-eabi %s -o - | FileCheck %s7; RUN: llc -O1 -mtriple=thumbv8m.main-none-none-eabi -mattr=+dsp %s -o - | FileCheck %s8define i32 @smulbb(i32 %a, i32 %b) {9; CHECK-LABEL: smulbb10; CHECK: smulbb r0, r0, r111 %tmp = call i32 @llvm.arm.smulbb(i32 %a, i32 %b)12 ret i32 %tmp13}14 15define i32 @smulbt(i32 %a, i32 %b) {16; CHECK-LABEL: smulbt17; CHECK: smulbt r0, r0, r118 %tmp = call i32 @llvm.arm.smulbt(i32 %a, i32 %b)19 ret i32 %tmp20}21 22define i32 @smultb(i32 %a, i32 %b) {23; CHECK-LABEL: smultb24; CHECK: smultb r0, r0, r125 %tmp = call i32 @llvm.arm.smultb(i32 %a, i32 %b)26 ret i32 %tmp27}28 29define i32 @smultt(i32 %a, i32 %b) {30; CHECK-LABEL: smultt31; CHECK: smultt r0, r0, r132 %tmp = call i32 @llvm.arm.smultt(i32 %a, i32 %b)33 ret i32 %tmp34}35 36define i32 @smulwb(i32 %a, i32 %b) {37; CHECK-LABEL: smulwb38; CHECK: smulwb r0, r0, r139 %tmp = call i32 @llvm.arm.smulwb(i32 %a, i32 %b)40 ret i32 %tmp41}42 43define i32 @smulwt(i32 %a, i32 %b) {44; CHECK-LABEL: smulwt45; CHECK: smulwt r0, r0, r146 %tmp = call i32 @llvm.arm.smulwt(i32 %a, i32 %b)47 ret i32 %tmp48}49 50define i32 @acc_mults(i32 %a, i32 %b, i32 %acc) {51; CHECK-LABEL: acc_mults52; CHECK: smlabb r2, r0, r1, r253; CHECK: smlabt r2, r0, r1, r254; CHECK: smlatb r2, r0, r1, r255; CHECK: smlatt r2, r0, r1, r256; CHECK: smlawb r2, r0, r1, r257; CHECK: smlawt r0, r0, r1, r258 %acc1 = call i32 @llvm.arm.smlabb(i32 %a, i32 %b, i32 %acc)59 %acc2 = call i32 @llvm.arm.smlabt(i32 %a, i32 %b, i32 %acc1)60 %acc3 = call i32 @llvm.arm.smlatb(i32 %a, i32 %b, i32 %acc2)61 %acc4 = call i32 @llvm.arm.smlatt(i32 %a, i32 %b, i32 %acc3)62 %acc5 = call i32 @llvm.arm.smlawb(i32 %a, i32 %b, i32 %acc4)63 %acc6 = call i32 @llvm.arm.smlawt(i32 %a, i32 %b, i32 %acc5)64 ret i32 %acc665}66 67define i32 @qadd(i32 %a, i32 %b) nounwind {68; CHECK-LABEL: qadd69; CHECK: qadd r0, r0, r170 %tmp = call i32 @llvm.arm.qadd(i32 %a, i32 %b)71 ret i32 %tmp72}73 74define i32 @qsub(i32 %a, i32 %b) nounwind {75; CHECK-LABEL: qsub76; CHECK: qsub r0, r0, r177 %tmp = call i32 @llvm.arm.qsub(i32 %a, i32 %b)78 ret i32 %tmp79}80 81define i32 @qdadd(i32 %a, i32 %b) nounwind {82; CHECK-LABEL: qdadd83; CHECK: qdadd r0, r1, r084 %dbl = call i32 @llvm.arm.qadd(i32 %a, i32 %a)85 %add = call i32 @llvm.arm.qadd(i32 %dbl, i32 %b)86 ret i32 %add87}88 89define i32 @qdsub(i32 %a, i32 %b) nounwind {90; CHECK-LABEL: qdsub91; CHECK: qdsub r0, r0, r192 %dbl = call i32 @llvm.arm.qadd(i32 %b, i32 %b)93 %add = call i32 @llvm.arm.qsub(i32 %a, i32 %dbl)94 ret i32 %add95}96 97declare i32 @llvm.arm.smulbb(i32 %a, i32 %b) nounwind readnone98declare i32 @llvm.arm.smulbt(i32 %a, i32 %b) nounwind readnone99declare i32 @llvm.arm.smultb(i32 %a, i32 %b) nounwind readnone100declare i32 @llvm.arm.smultt(i32 %a, i32 %b) nounwind readnone101declare i32 @llvm.arm.smulwb(i32 %a, i32 %b) nounwind readnone102declare i32 @llvm.arm.smulwt(i32 %a, i32 %b) nounwind readnone103declare i32 @llvm.arm.smlabb(i32, i32, i32) nounwind104declare i32 @llvm.arm.smlabt(i32, i32, i32) nounwind105declare i32 @llvm.arm.smlatb(i32, i32, i32) nounwind106declare i32 @llvm.arm.smlatt(i32, i32, i32) nounwind107declare i32 @llvm.arm.smlawb(i32, i32, i32) nounwind108declare i32 @llvm.arm.smlawt(i32, i32, i32) nounwind109declare i32 @llvm.arm.qadd(i32, i32) nounwind110declare i32 @llvm.arm.qsub(i32, i32) nounwind111