1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; Check generated signed and unsigned multiply accumulate long. 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i64 @MACLongTest1(i32 %a, i32 %b, i64 %c) { 5*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: MACLongTest1: 6*9880d681SAndroid Build Coastguard Worker;CHECK: umlal 7*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %a to i64 8*9880d681SAndroid Build Coastguard Worker %conv1 = zext i32 %b to i64 9*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %conv1, %conv 10*9880d681SAndroid Build Coastguard Worker %add = add i64 %mul, %c 11*9880d681SAndroid Build Coastguard Worker ret i64 %add 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine i64 @MACLongTest2(i32 %a, i32 %b, i64 %c) { 15*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: MACLongTest2: 16*9880d681SAndroid Build Coastguard Worker;CHECK: smlal 17*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %a to i64 18*9880d681SAndroid Build Coastguard Worker %conv1 = sext i32 %b to i64 19*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv1, %conv 20*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %c 21*9880d681SAndroid Build Coastguard Worker ret i64 %add 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i64 @MACLongTest3(i32 %a, i32 %b, i32 %c) { 25*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: MACLongTest3: 26*9880d681SAndroid Build Coastguard Worker;CHECK: umlal 27*9880d681SAndroid Build Coastguard Worker %conv = zext i32 %b to i64 28*9880d681SAndroid Build Coastguard Worker %conv1 = zext i32 %a to i64 29*9880d681SAndroid Build Coastguard Worker %mul = mul i64 %conv, %conv1 30*9880d681SAndroid Build Coastguard Worker %conv2 = zext i32 %c to i64 31*9880d681SAndroid Build Coastguard Worker %add = add i64 %mul, %conv2 32*9880d681SAndroid Build Coastguard Worker ret i64 %add 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine i64 @MACLongTest4(i32 %a, i32 %b, i32 %c) { 36*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: MACLongTest4: 37*9880d681SAndroid Build Coastguard Worker;CHECK: smlal 38*9880d681SAndroid Build Coastguard Worker %conv = sext i32 %b to i64 39*9880d681SAndroid Build Coastguard Worker %conv1 = sext i32 %a to i64 40*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %conv, %conv1 41*9880d681SAndroid Build Coastguard Worker %conv2 = sext i32 %c to i64 42*9880d681SAndroid Build Coastguard Worker %add = add nsw i64 %mul, %conv2 43*9880d681SAndroid Build Coastguard Worker ret i64 %add 44*9880d681SAndroid Build Coastguard Worker} 45