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