1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el < %s | FileCheck %s -check-prefixes=CHECK,CHECK64 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mul5_32: 5*9880d681SAndroid Build Coastguard Worker; CHECK: sll $[[R0:[0-9]+]], $4, 2 6*9880d681SAndroid Build Coastguard Worker; CHECK: addu ${{[0-9]+}}, $[[R0]], $4 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine i32 @mul5_32(i32 signext %a) { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i32 %a, 5 11*9880d681SAndroid Build Coastguard Worker ret i32 %mul 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mul27_32: 15*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: sll $[[R0:[0-9]+]], $4, 2 16*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: addu $[[R1:[0-9]+]], $[[R0]], $4 17*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: sll $[[R2:[0-9]+]], $4, 5 18*9880d681SAndroid Build Coastguard Worker; CHECK: subu ${{[0-9]+}}, $[[R2]], $[[R1]] 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i32 @mul27_32(i32 signext %a) { 21*9880d681SAndroid Build Coastguard Workerentry: 22*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i32 %a, 27 23*9880d681SAndroid Build Coastguard Worker ret i32 %mul 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: muln2147483643_32: 27*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: sll $[[R0:[0-9]+]], $4, 2 28*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: addu $[[R1:[0-9]+]], $[[R0]], $4 29*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: sll $[[R2:[0-9]+]], $4, 31 30*9880d681SAndroid Build Coastguard Worker; CHECK: addu ${{[0-9]+}}, $[[R2]], $[[R1]] 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine i32 @muln2147483643_32(i32 signext %a) { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i32 %a, -2147483643 35*9880d681SAndroid Build Coastguard Worker ret i32 %mul 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; CHECK64-LABEL: muln9223372036854775805_64: 39*9880d681SAndroid Build Coastguard Worker; CHECK64-DAG: dsll $[[R0:[0-9]+]], $4, 1 40*9880d681SAndroid Build Coastguard Worker; CHECK64-DAG: daddu $[[R1:[0-9]+]], $[[R0]], $4 41*9880d681SAndroid Build Coastguard Worker; CHECK64-DAG: dsll $[[R2:[0-9]+]], $4, 63 42*9880d681SAndroid Build Coastguard Worker; CHECK64: daddu ${{[0-9]+}}, $[[R2]], $[[R1]] 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine i64 @muln9223372036854775805_64(i64 signext %a) { 45*9880d681SAndroid Build Coastguard Workerentry: 46*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %a, -9223372036854775805 47*9880d681SAndroid Build Coastguard Worker ret i64 %mul 48*9880d681SAndroid Build Coastguard Worker} 49