| Daniel Sanders | 2d999eb | 2013-08-28 10:02:29 +0000 | [diff] [blame] | 1 | ; Test the MSA intrinsics that are encoded with the 3R instruction format. | 
|  | 2 | ; There are lots of these so this covers those beginning with 'v' | 
|  | 3 |  | 
| Jack Carter | d12e837 | 2013-08-15 14:22:07 +0000 | [diff] [blame] | 4 | ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck %s | 
|  | 5 |  | 
|  | 6 | @llvm_mips_vshf_b_ARG1 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>, align 16 | 
|  | 7 | @llvm_mips_vshf_b_ARG2 = global <16 x i8> <i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, align 16 | 
|  | 8 | @llvm_mips_vshf_b_RES  = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, align 16 | 
|  | 9 |  | 
|  | 10 | define void @llvm_mips_vshf_b_test() nounwind { | 
|  | 11 | entry: | 
|  | 12 | %0 = load <16 x i8>* @llvm_mips_vshf_b_ARG1 | 
|  | 13 | %1 = load <16 x i8>* @llvm_mips_vshf_b_ARG2 | 
|  | 14 | %2 = tail call <16 x i8> @llvm.mips.vshf.b(<16 x i8> %0, <16 x i8> %1) | 
|  | 15 | store <16 x i8> %2, <16 x i8>* @llvm_mips_vshf_b_RES | 
|  | 16 | ret void | 
|  | 17 | } | 
|  | 18 |  | 
|  | 19 | declare <16 x i8> @llvm.mips.vshf.b(<16 x i8>, <16 x i8>) nounwind | 
|  | 20 |  | 
|  | 21 | ; CHECK: llvm_mips_vshf_b_test: | 
|  | 22 | ; CHECK: ld.b | 
|  | 23 | ; CHECK: ld.b | 
|  | 24 | ; CHECK: vshf.b | 
|  | 25 | ; CHECK: st.b | 
|  | 26 | ; CHECK: .size llvm_mips_vshf_b_test | 
|  | 27 | ; | 
|  | 28 | @llvm_mips_vshf_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 | 
|  | 29 | @llvm_mips_vshf_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 | 
|  | 30 | @llvm_mips_vshf_h_RES  = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 | 
|  | 31 |  | 
|  | 32 | define void @llvm_mips_vshf_h_test() nounwind { | 
|  | 33 | entry: | 
|  | 34 | %0 = load <8 x i16>* @llvm_mips_vshf_h_ARG1 | 
|  | 35 | %1 = load <8 x i16>* @llvm_mips_vshf_h_ARG2 | 
|  | 36 | %2 = tail call <8 x i16> @llvm.mips.vshf.h(<8 x i16> %0, <8 x i16> %1) | 
|  | 37 | store <8 x i16> %2, <8 x i16>* @llvm_mips_vshf_h_RES | 
|  | 38 | ret void | 
|  | 39 | } | 
|  | 40 |  | 
|  | 41 | declare <8 x i16> @llvm.mips.vshf.h(<8 x i16>, <8 x i16>) nounwind | 
|  | 42 |  | 
|  | 43 | ; CHECK: llvm_mips_vshf_h_test: | 
|  | 44 | ; CHECK: ld.h | 
|  | 45 | ; CHECK: ld.h | 
|  | 46 | ; CHECK: vshf.h | 
|  | 47 | ; CHECK: st.h | 
|  | 48 | ; CHECK: .size llvm_mips_vshf_h_test | 
|  | 49 | ; | 
|  | 50 | @llvm_mips_vshf_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 | 
|  | 51 | @llvm_mips_vshf_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 | 
|  | 52 | @llvm_mips_vshf_w_RES  = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 | 
|  | 53 |  | 
|  | 54 | define void @llvm_mips_vshf_w_test() nounwind { | 
|  | 55 | entry: | 
|  | 56 | %0 = load <4 x i32>* @llvm_mips_vshf_w_ARG1 | 
|  | 57 | %1 = load <4 x i32>* @llvm_mips_vshf_w_ARG2 | 
|  | 58 | %2 = tail call <4 x i32> @llvm.mips.vshf.w(<4 x i32> %0, <4 x i32> %1) | 
|  | 59 | store <4 x i32> %2, <4 x i32>* @llvm_mips_vshf_w_RES | 
|  | 60 | ret void | 
|  | 61 | } | 
|  | 62 |  | 
|  | 63 | declare <4 x i32> @llvm.mips.vshf.w(<4 x i32>, <4 x i32>) nounwind | 
|  | 64 |  | 
|  | 65 | ; CHECK: llvm_mips_vshf_w_test: | 
|  | 66 | ; CHECK: ld.w | 
|  | 67 | ; CHECK: ld.w | 
|  | 68 | ; CHECK: vshf.w | 
|  | 69 | ; CHECK: st.w | 
|  | 70 | ; CHECK: .size llvm_mips_vshf_w_test | 
|  | 71 | ; | 
|  | 72 | @llvm_mips_vshf_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 | 
|  | 73 | @llvm_mips_vshf_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 | 
|  | 74 | @llvm_mips_vshf_d_RES  = global <2 x i64> <i64 0, i64 0>, align 16 | 
|  | 75 |  | 
|  | 76 | define void @llvm_mips_vshf_d_test() nounwind { | 
|  | 77 | entry: | 
|  | 78 | %0 = load <2 x i64>* @llvm_mips_vshf_d_ARG1 | 
|  | 79 | %1 = load <2 x i64>* @llvm_mips_vshf_d_ARG2 | 
|  | 80 | %2 = tail call <2 x i64> @llvm.mips.vshf.d(<2 x i64> %0, <2 x i64> %1) | 
|  | 81 | store <2 x i64> %2, <2 x i64>* @llvm_mips_vshf_d_RES | 
|  | 82 | ret void | 
|  | 83 | } | 
|  | 84 |  | 
|  | 85 | declare <2 x i64> @llvm.mips.vshf.d(<2 x i64>, <2 x i64>) nounwind | 
|  | 86 |  | 
|  | 87 | ; CHECK: llvm_mips_vshf_d_test: | 
|  | 88 | ; CHECK: ld.d | 
|  | 89 | ; CHECK: ld.d | 
|  | 90 | ; CHECK: vshf.d | 
|  | 91 | ; CHECK: st.d | 
|  | 92 | ; CHECK: .size llvm_mips_vshf_d_test | 
|  | 93 | ; |