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 7define i64 @madd1(i32 %a, i32 %b, i32 %c) nounwind readnone { 8entry: 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 19define i64 @madd2(i32 %a, i32 %b, i32 %c) nounwind readnone { 20entry: 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 31define i64 @madd3(i32 %a, i32 %b, i64 %c) nounwind readnone { 32entry: 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 42define i64 @msub1(i32 %a, i32 %b, i32 %c) nounwind readnone { 43entry: 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 54define i64 @msub2(i32 %a, i32 %b, i32 %c) nounwind readnone { 55entry: 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 66define i64 @msub3(i32 %a, i32 %b, i64 %c) nounwind readnone { 67entry: 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