1*9880d681SAndroid Build Coastguard Worker; Test the MSA intrinsics that are encoded with the SPECIAL instruction format. 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | \ 4*9880d681SAndroid Build Coastguard Worker; RUN: FileCheck %s --check-prefix=MIPS32 5*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -mcpu=mips64r2 -mattr=+msa,+fp64 < %s | \ 6*9880d681SAndroid Build Coastguard Worker; RUN: FileCheck %s --check-prefix=MIPS64 7*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mcpu=mips32r6 -mattr=+msa < %s | \ 8*9880d681SAndroid Build Coastguard Worker; RUN: FileCheck %s --check-prefix=MIPS32 9*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64 -mcpu=mips64r6 -mattr=+msa < %s | \ 10*9880d681SAndroid Build Coastguard Worker; RUN: FileCheck %s --check-prefix=MIPS64 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine i32 @llvm_mips_lsa_test(i32 %a, i32 %b) nounwind { 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker %0 = tail call i32 @llvm.mips.lsa(i32 %a, i32 %b, i32 2) 15*9880d681SAndroid Build Coastguard Worker ret i32 %0 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.mips.lsa(i32, i32, i32) nounwind 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; MIPS32: llvm_mips_lsa_test: 21*9880d681SAndroid Build Coastguard Worker; MIPS32: lsa {{\$[0-9]+}}, $5, $4, 2 22*9880d681SAndroid Build Coastguard Worker; MIPS32: .size llvm_mips_lsa_test 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i32 @lsa_test(i32 %a, i32 %b) nounwind { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker %0 = shl i32 %b, 2 27*9880d681SAndroid Build Coastguard Worker %1 = add i32 %a, %0 28*9880d681SAndroid Build Coastguard Worker ret i32 %1 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; MIPS32: lsa_test: 32*9880d681SAndroid Build Coastguard Worker; MIPS32: lsa {{\$[0-9]+}}, $5, $4, 2 33*9880d681SAndroid Build Coastguard Worker; MIPS32: .size lsa_test 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine i64 @llvm_mips_dlsa_test(i64 %a, i64 %b) nounwind { 36*9880d681SAndroid Build Coastguard Workerentry: 37*9880d681SAndroid Build Coastguard Worker %0 = tail call i64 @llvm.mips.dlsa(i64 %a, i64 %b, i32 2) 38*9880d681SAndroid Build Coastguard Worker ret i64 %0 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.mips.dlsa(i64, i64, i32) nounwind 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker; MIPS64: llvm_mips_dlsa_test: 44*9880d681SAndroid Build Coastguard Worker; MIPS64: dlsa {{\$[0-9]+}}, $5, $4, 2 45*9880d681SAndroid Build Coastguard Worker; MIPS64: .size llvm_mips_dlsa_test 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i64 @dlsa_test(i64 %a, i64 %b) nounwind { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker %0 = shl i64 %b, 2 50*9880d681SAndroid Build Coastguard Worker %1 = add i64 %a, %0 51*9880d681SAndroid Build Coastguard Worker ret i64 %1 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; MIPS64: dlsa_test: 55*9880d681SAndroid Build Coastguard Worker; MIPS64: dlsa {{\$[0-9]+}}, $5, $4, 2 56*9880d681SAndroid Build Coastguard Worker; MIPS64: .size dlsa_test 57