1 ; RUN: llc -march=mips < %s | FileCheck %s -check-prefix=32 2 ; RUN: llc -march=mips -mattr=dsp < %s | FileCheck %s -check-prefix=DSP 3 ; RUN: llc -march=mips -mcpu=mips16 < %s 4 5 ; 32: madd ${{[0-9]+}} 6 ; DSP: madd $ac 7 define i64 @madd1(i32 %a, i32 %b, i32 %c) nounwind readnone { 8 entry: 9 %conv = sext i32 %a to i64 10 %conv2 = sext i32 %b to i64 11 %mul = mul nsw i64 %conv2, %conv 12 %conv4 = sext i32 %c to i64 13 %add = add nsw i64 %mul, %conv4 14 ret i64 %add 15 } 16 17 ; 32: maddu ${{[0-9]+}} 18 ; DSP: maddu $ac 19 define i64 @madd2(i32 %a, i32 %b, i32 %c) nounwind readnone { 20 entry: 21 %conv = zext i32 %a to i64 22 %conv2 = zext i32 %b to i64 23 %mul = mul nsw i64 %conv2, %conv 24 %conv4 = zext i32 %c to i64 25 %add = add nsw i64 %mul, %conv4 26 ret i64 %add 27 } 28 29 ; 32: madd ${{[0-9]+}} 30 ; DSP: madd $ac 31 define i64 @madd3(i32 %a, i32 %b, i64 %c) nounwind readnone { 32 entry: 33 %conv = sext i32 %a to i64 34 %conv2 = sext i32 %b to i64 35 %mul = mul nsw i64 %conv2, %conv 36 %add = add nsw i64 %mul, %c 37 ret i64 %add 38 } 39 40 ; 32: msub ${{[0-9]+}} 41 ; DSP: msub $ac 42 define i64 @msub1(i32 %a, i32 %b, i32 %c) nounwind readnone { 43 entry: 44 %conv = sext i32 %c to i64 45 %conv2 = sext i32 %a to i64 46 %conv4 = sext i32 %b to i64 47 %mul = mul nsw i64 %conv4, %conv2 48 %sub = sub nsw i64 %conv, %mul 49 ret i64 %sub 50 } 51 52 ; 32: msubu ${{[0-9]+}} 53 ; DSP: msubu $ac 54 define i64 @msub2(i32 %a, i32 %b, i32 %c) nounwind readnone { 55 entry: 56 %conv = zext i32 %c to i64 57 %conv2 = zext i32 %a to i64 58 %conv4 = zext i32 %b to i64 59 %mul = mul nsw i64 %conv4, %conv2 60 %sub = sub nsw i64 %conv, %mul 61 ret i64 %sub 62 } 63 64 ; 32: msub ${{[0-9]+}} 65 ; DSP: msub $ac 66 define i64 @msub3(i32 %a, i32 %b, i64 %c) nounwind readnone { 67 entry: 68 %conv = sext i32 %a to i64 69 %conv3 = sext i32 %b to i64 70 %mul = mul nsw i64 %conv3, %conv 71 %sub = sub nsw i64 %c, %mul 72 ret i64 %sub 73 } 74