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 'a' 3 4 ; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s 5 ; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s 6 7 ; It should fail to compile without fp64. 8 ; RUN: not llc -march=mips -mattr=+msa < %s 2>&1 | \ 9 ; RUN: FileCheck -check-prefix=FP32ERROR %s 10 ; FP32ERROR: LLVM ERROR: MSA requires a 64-bit FPU register file (FR=1 mode). 11 12 @llvm_mips_add_a_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 13 @llvm_mips_add_a_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 14 @llvm_mips_add_a_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 15 16 define void @llvm_mips_add_a_b_test() nounwind { 17 entry: 18 %0 = load <16 x i8>* @llvm_mips_add_a_b_ARG1 19 %1 = load <16 x i8>* @llvm_mips_add_a_b_ARG2 20 %2 = tail call <16 x i8> @llvm.mips.add.a.b(<16 x i8> %0, <16 x i8> %1) 21 store <16 x i8> %2, <16 x i8>* @llvm_mips_add_a_b_RES 22 ret void 23 } 24 25 declare <16 x i8> @llvm.mips.add.a.b(<16 x i8>, <16 x i8>) nounwind 26 27 ; CHECK: llvm_mips_add_a_b_test: 28 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_add_a_b_ARG1) 29 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_add_a_b_ARG2) 30 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 31 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 32 ; CHECK-DAG: add_a.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 33 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_add_a_b_RES) 34 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 35 ; CHECK: .size llvm_mips_add_a_b_test 36 ; 37 @llvm_mips_add_a_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 38 @llvm_mips_add_a_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 39 @llvm_mips_add_a_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 40 41 define void @llvm_mips_add_a_h_test() nounwind { 42 entry: 43 %0 = load <8 x i16>* @llvm_mips_add_a_h_ARG1 44 %1 = load <8 x i16>* @llvm_mips_add_a_h_ARG2 45 %2 = tail call <8 x i16> @llvm.mips.add.a.h(<8 x i16> %0, <8 x i16> %1) 46 store <8 x i16> %2, <8 x i16>* @llvm_mips_add_a_h_RES 47 ret void 48 } 49 50 declare <8 x i16> @llvm.mips.add.a.h(<8 x i16>, <8 x i16>) nounwind 51 52 ; CHECK: llvm_mips_add_a_h_test: 53 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_add_a_h_ARG1) 54 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_add_a_h_ARG2) 55 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 56 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 57 ; CHECK-DAG: add_a.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 58 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_add_a_h_RES) 59 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 60 ; CHECK: .size llvm_mips_add_a_h_test 61 ; 62 @llvm_mips_add_a_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 63 @llvm_mips_add_a_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 64 @llvm_mips_add_a_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 65 66 define void @llvm_mips_add_a_w_test() nounwind { 67 entry: 68 %0 = load <4 x i32>* @llvm_mips_add_a_w_ARG1 69 %1 = load <4 x i32>* @llvm_mips_add_a_w_ARG2 70 %2 = tail call <4 x i32> @llvm.mips.add.a.w(<4 x i32> %0, <4 x i32> %1) 71 store <4 x i32> %2, <4 x i32>* @llvm_mips_add_a_w_RES 72 ret void 73 } 74 75 declare <4 x i32> @llvm.mips.add.a.w(<4 x i32>, <4 x i32>) nounwind 76 77 ; CHECK: llvm_mips_add_a_w_test: 78 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_add_a_w_ARG1) 79 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_add_a_w_ARG2) 80 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 81 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 82 ; CHECK-DAG: add_a.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 83 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_add_a_w_RES) 84 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 85 ; CHECK: .size llvm_mips_add_a_w_test 86 ; 87 @llvm_mips_add_a_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 88 @llvm_mips_add_a_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 89 @llvm_mips_add_a_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 90 91 define void @llvm_mips_add_a_d_test() nounwind { 92 entry: 93 %0 = load <2 x i64>* @llvm_mips_add_a_d_ARG1 94 %1 = load <2 x i64>* @llvm_mips_add_a_d_ARG2 95 %2 = tail call <2 x i64> @llvm.mips.add.a.d(<2 x i64> %0, <2 x i64> %1) 96 store <2 x i64> %2, <2 x i64>* @llvm_mips_add_a_d_RES 97 ret void 98 } 99 100 declare <2 x i64> @llvm.mips.add.a.d(<2 x i64>, <2 x i64>) nounwind 101 102 ; CHECK: llvm_mips_add_a_d_test: 103 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_add_a_d_ARG1) 104 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_add_a_d_ARG2) 105 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 106 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 107 ; CHECK-DAG: add_a.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 108 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_add_a_d_RES) 109 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 110 ; CHECK: .size llvm_mips_add_a_d_test 111 ; 112 @llvm_mips_adds_a_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 113 @llvm_mips_adds_a_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 114 @llvm_mips_adds_a_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 115 116 define void @llvm_mips_adds_a_b_test() nounwind { 117 entry: 118 %0 = load <16 x i8>* @llvm_mips_adds_a_b_ARG1 119 %1 = load <16 x i8>* @llvm_mips_adds_a_b_ARG2 120 %2 = tail call <16 x i8> @llvm.mips.adds.a.b(<16 x i8> %0, <16 x i8> %1) 121 store <16 x i8> %2, <16 x i8>* @llvm_mips_adds_a_b_RES 122 ret void 123 } 124 125 declare <16 x i8> @llvm.mips.adds.a.b(<16 x i8>, <16 x i8>) nounwind 126 127 ; CHECK: llvm_mips_adds_a_b_test: 128 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_a_b_ARG1) 129 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_a_b_ARG2) 130 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 131 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 132 ; CHECK-DAG: adds_a.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 133 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_a_b_RES) 134 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 135 ; CHECK: .size llvm_mips_adds_a_b_test 136 ; 137 @llvm_mips_adds_a_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 138 @llvm_mips_adds_a_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 139 @llvm_mips_adds_a_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 140 141 define void @llvm_mips_adds_a_h_test() nounwind { 142 entry: 143 %0 = load <8 x i16>* @llvm_mips_adds_a_h_ARG1 144 %1 = load <8 x i16>* @llvm_mips_adds_a_h_ARG2 145 %2 = tail call <8 x i16> @llvm.mips.adds.a.h(<8 x i16> %0, <8 x i16> %1) 146 store <8 x i16> %2, <8 x i16>* @llvm_mips_adds_a_h_RES 147 ret void 148 } 149 150 declare <8 x i16> @llvm.mips.adds.a.h(<8 x i16>, <8 x i16>) nounwind 151 152 ; CHECK: llvm_mips_adds_a_h_test: 153 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_a_h_ARG1) 154 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_a_h_ARG2) 155 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 156 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 157 ; CHECK-DAG: adds_a.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 158 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_a_h_RES) 159 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 160 ; CHECK: .size llvm_mips_adds_a_h_test 161 ; 162 @llvm_mips_adds_a_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 163 @llvm_mips_adds_a_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 164 @llvm_mips_adds_a_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 165 166 define void @llvm_mips_adds_a_w_test() nounwind { 167 entry: 168 %0 = load <4 x i32>* @llvm_mips_adds_a_w_ARG1 169 %1 = load <4 x i32>* @llvm_mips_adds_a_w_ARG2 170 %2 = tail call <4 x i32> @llvm.mips.adds.a.w(<4 x i32> %0, <4 x i32> %1) 171 store <4 x i32> %2, <4 x i32>* @llvm_mips_adds_a_w_RES 172 ret void 173 } 174 175 declare <4 x i32> @llvm.mips.adds.a.w(<4 x i32>, <4 x i32>) nounwind 176 177 ; CHECK: llvm_mips_adds_a_w_test: 178 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_a_w_ARG1) 179 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_a_w_ARG2) 180 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 181 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 182 ; CHECK-DAG: adds_a.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 183 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_a_w_RES) 184 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 185 ; CHECK: .size llvm_mips_adds_a_w_test 186 ; 187 @llvm_mips_adds_a_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 188 @llvm_mips_adds_a_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 189 @llvm_mips_adds_a_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 190 191 define void @llvm_mips_adds_a_d_test() nounwind { 192 entry: 193 %0 = load <2 x i64>* @llvm_mips_adds_a_d_ARG1 194 %1 = load <2 x i64>* @llvm_mips_adds_a_d_ARG2 195 %2 = tail call <2 x i64> @llvm.mips.adds.a.d(<2 x i64> %0, <2 x i64> %1) 196 store <2 x i64> %2, <2 x i64>* @llvm_mips_adds_a_d_RES 197 ret void 198 } 199 200 declare <2 x i64> @llvm.mips.adds.a.d(<2 x i64>, <2 x i64>) nounwind 201 202 ; CHECK: llvm_mips_adds_a_d_test: 203 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_a_d_ARG1) 204 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_a_d_ARG2) 205 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 206 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 207 ; CHECK-DAG: adds_a.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 208 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_a_d_RES) 209 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 210 ; CHECK: .size llvm_mips_adds_a_d_test 211 ; 212 @llvm_mips_adds_s_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 213 @llvm_mips_adds_s_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 214 @llvm_mips_adds_s_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 215 216 define void @llvm_mips_adds_s_b_test() nounwind { 217 entry: 218 %0 = load <16 x i8>* @llvm_mips_adds_s_b_ARG1 219 %1 = load <16 x i8>* @llvm_mips_adds_s_b_ARG2 220 %2 = tail call <16 x i8> @llvm.mips.adds.s.b(<16 x i8> %0, <16 x i8> %1) 221 store <16 x i8> %2, <16 x i8>* @llvm_mips_adds_s_b_RES 222 ret void 223 } 224 225 declare <16 x i8> @llvm.mips.adds.s.b(<16 x i8>, <16 x i8>) nounwind 226 227 ; CHECK: llvm_mips_adds_s_b_test: 228 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_s_b_ARG1) 229 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_s_b_ARG2) 230 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 231 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 232 ; CHECK-DAG: adds_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 233 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_s_b_RES) 234 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 235 ; CHECK: .size llvm_mips_adds_s_b_test 236 ; 237 @llvm_mips_adds_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 238 @llvm_mips_adds_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 239 @llvm_mips_adds_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 240 241 define void @llvm_mips_adds_s_h_test() nounwind { 242 entry: 243 %0 = load <8 x i16>* @llvm_mips_adds_s_h_ARG1 244 %1 = load <8 x i16>* @llvm_mips_adds_s_h_ARG2 245 %2 = tail call <8 x i16> @llvm.mips.adds.s.h(<8 x i16> %0, <8 x i16> %1) 246 store <8 x i16> %2, <8 x i16>* @llvm_mips_adds_s_h_RES 247 ret void 248 } 249 250 declare <8 x i16> @llvm.mips.adds.s.h(<8 x i16>, <8 x i16>) nounwind 251 252 ; CHECK: llvm_mips_adds_s_h_test: 253 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_s_h_ARG1) 254 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_s_h_ARG2) 255 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 256 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 257 ; CHECK-DAG: adds_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 258 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_s_h_RES) 259 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 260 ; CHECK: .size llvm_mips_adds_s_h_test 261 ; 262 @llvm_mips_adds_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 263 @llvm_mips_adds_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 264 @llvm_mips_adds_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 265 266 define void @llvm_mips_adds_s_w_test() nounwind { 267 entry: 268 %0 = load <4 x i32>* @llvm_mips_adds_s_w_ARG1 269 %1 = load <4 x i32>* @llvm_mips_adds_s_w_ARG2 270 %2 = tail call <4 x i32> @llvm.mips.adds.s.w(<4 x i32> %0, <4 x i32> %1) 271 store <4 x i32> %2, <4 x i32>* @llvm_mips_adds_s_w_RES 272 ret void 273 } 274 275 declare <4 x i32> @llvm.mips.adds.s.w(<4 x i32>, <4 x i32>) nounwind 276 277 ; CHECK: llvm_mips_adds_s_w_test: 278 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_s_w_ARG1) 279 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_s_w_ARG2) 280 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 281 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 282 ; CHECK-DAG: adds_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 283 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_s_w_RES) 284 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 285 ; CHECK: .size llvm_mips_adds_s_w_test 286 ; 287 @llvm_mips_adds_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 288 @llvm_mips_adds_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 289 @llvm_mips_adds_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 290 291 define void @llvm_mips_adds_s_d_test() nounwind { 292 entry: 293 %0 = load <2 x i64>* @llvm_mips_adds_s_d_ARG1 294 %1 = load <2 x i64>* @llvm_mips_adds_s_d_ARG2 295 %2 = tail call <2 x i64> @llvm.mips.adds.s.d(<2 x i64> %0, <2 x i64> %1) 296 store <2 x i64> %2, <2 x i64>* @llvm_mips_adds_s_d_RES 297 ret void 298 } 299 300 declare <2 x i64> @llvm.mips.adds.s.d(<2 x i64>, <2 x i64>) nounwind 301 302 ; CHECK: llvm_mips_adds_s_d_test: 303 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_s_d_ARG1) 304 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_s_d_ARG2) 305 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 306 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 307 ; CHECK-DAG: adds_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 308 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_s_d_RES) 309 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 310 ; CHECK: .size llvm_mips_adds_s_d_test 311 ; 312 @llvm_mips_adds_u_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 313 @llvm_mips_adds_u_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 314 @llvm_mips_adds_u_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 315 316 define void @llvm_mips_adds_u_b_test() nounwind { 317 entry: 318 %0 = load <16 x i8>* @llvm_mips_adds_u_b_ARG1 319 %1 = load <16 x i8>* @llvm_mips_adds_u_b_ARG2 320 %2 = tail call <16 x i8> @llvm.mips.adds.u.b(<16 x i8> %0, <16 x i8> %1) 321 store <16 x i8> %2, <16 x i8>* @llvm_mips_adds_u_b_RES 322 ret void 323 } 324 325 declare <16 x i8> @llvm.mips.adds.u.b(<16 x i8>, <16 x i8>) nounwind 326 327 ; CHECK: llvm_mips_adds_u_b_test: 328 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_u_b_ARG1) 329 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_u_b_ARG2) 330 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 331 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 332 ; CHECK-DAG: adds_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 333 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_u_b_RES) 334 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 335 ; CHECK: .size llvm_mips_adds_u_b_test 336 ; 337 @llvm_mips_adds_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 338 @llvm_mips_adds_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 339 @llvm_mips_adds_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 340 341 define void @llvm_mips_adds_u_h_test() nounwind { 342 entry: 343 %0 = load <8 x i16>* @llvm_mips_adds_u_h_ARG1 344 %1 = load <8 x i16>* @llvm_mips_adds_u_h_ARG2 345 %2 = tail call <8 x i16> @llvm.mips.adds.u.h(<8 x i16> %0, <8 x i16> %1) 346 store <8 x i16> %2, <8 x i16>* @llvm_mips_adds_u_h_RES 347 ret void 348 } 349 350 declare <8 x i16> @llvm.mips.adds.u.h(<8 x i16>, <8 x i16>) nounwind 351 352 ; CHECK: llvm_mips_adds_u_h_test: 353 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_u_h_ARG1) 354 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_u_h_ARG2) 355 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 356 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 357 ; CHECK-DAG: adds_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 358 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_u_h_RES) 359 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 360 ; CHECK: .size llvm_mips_adds_u_h_test 361 ; 362 @llvm_mips_adds_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 363 @llvm_mips_adds_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 364 @llvm_mips_adds_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 365 366 define void @llvm_mips_adds_u_w_test() nounwind { 367 entry: 368 %0 = load <4 x i32>* @llvm_mips_adds_u_w_ARG1 369 %1 = load <4 x i32>* @llvm_mips_adds_u_w_ARG2 370 %2 = tail call <4 x i32> @llvm.mips.adds.u.w(<4 x i32> %0, <4 x i32> %1) 371 store <4 x i32> %2, <4 x i32>* @llvm_mips_adds_u_w_RES 372 ret void 373 } 374 375 declare <4 x i32> @llvm.mips.adds.u.w(<4 x i32>, <4 x i32>) nounwind 376 377 ; CHECK: llvm_mips_adds_u_w_test: 378 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_u_w_ARG1) 379 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_u_w_ARG2) 380 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 381 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 382 ; CHECK-DAG: adds_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 383 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_u_w_RES) 384 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 385 ; CHECK: .size llvm_mips_adds_u_w_test 386 ; 387 @llvm_mips_adds_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 388 @llvm_mips_adds_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 389 @llvm_mips_adds_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 390 391 define void @llvm_mips_adds_u_d_test() nounwind { 392 entry: 393 %0 = load <2 x i64>* @llvm_mips_adds_u_d_ARG1 394 %1 = load <2 x i64>* @llvm_mips_adds_u_d_ARG2 395 %2 = tail call <2 x i64> @llvm.mips.adds.u.d(<2 x i64> %0, <2 x i64> %1) 396 store <2 x i64> %2, <2 x i64>* @llvm_mips_adds_u_d_RES 397 ret void 398 } 399 400 declare <2 x i64> @llvm.mips.adds.u.d(<2 x i64>, <2 x i64>) nounwind 401 402 ; CHECK: llvm_mips_adds_u_d_test: 403 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_adds_u_d_ARG1) 404 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_adds_u_d_ARG2) 405 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 406 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 407 ; CHECK-DAG: adds_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 408 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_adds_u_d_RES) 409 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 410 ; CHECK: .size llvm_mips_adds_u_d_test 411 ; 412 @llvm_mips_addv_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 413 @llvm_mips_addv_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 414 @llvm_mips_addv_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 415 416 define void @llvm_mips_addv_b_test() nounwind { 417 entry: 418 %0 = load <16 x i8>* @llvm_mips_addv_b_ARG1 419 %1 = load <16 x i8>* @llvm_mips_addv_b_ARG2 420 %2 = tail call <16 x i8> @llvm.mips.addv.b(<16 x i8> %0, <16 x i8> %1) 421 store <16 x i8> %2, <16 x i8>* @llvm_mips_addv_b_RES 422 ret void 423 } 424 425 declare <16 x i8> @llvm.mips.addv.b(<16 x i8>, <16 x i8>) nounwind 426 427 ; CHECK: llvm_mips_addv_b_test: 428 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_b_ARG1) 429 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_b_ARG2) 430 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 431 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 432 ; CHECK-DAG: addv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 433 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_b_RES) 434 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 435 ; CHECK: .size llvm_mips_addv_b_test 436 ; 437 @llvm_mips_addv_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 438 @llvm_mips_addv_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 439 @llvm_mips_addv_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 440 441 define void @llvm_mips_addv_h_test() nounwind { 442 entry: 443 %0 = load <8 x i16>* @llvm_mips_addv_h_ARG1 444 %1 = load <8 x i16>* @llvm_mips_addv_h_ARG2 445 %2 = tail call <8 x i16> @llvm.mips.addv.h(<8 x i16> %0, <8 x i16> %1) 446 store <8 x i16> %2, <8 x i16>* @llvm_mips_addv_h_RES 447 ret void 448 } 449 450 declare <8 x i16> @llvm.mips.addv.h(<8 x i16>, <8 x i16>) nounwind 451 452 ; CHECK: llvm_mips_addv_h_test: 453 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_h_ARG1) 454 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_h_ARG2) 455 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 456 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 457 ; CHECK-DAG: addv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 458 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_h_RES) 459 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 460 ; CHECK: .size llvm_mips_addv_h_test 461 ; 462 @llvm_mips_addv_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 463 @llvm_mips_addv_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 464 @llvm_mips_addv_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 465 466 define void @llvm_mips_addv_w_test() nounwind { 467 entry: 468 %0 = load <4 x i32>* @llvm_mips_addv_w_ARG1 469 %1 = load <4 x i32>* @llvm_mips_addv_w_ARG2 470 %2 = tail call <4 x i32> @llvm.mips.addv.w(<4 x i32> %0, <4 x i32> %1) 471 store <4 x i32> %2, <4 x i32>* @llvm_mips_addv_w_RES 472 ret void 473 } 474 475 declare <4 x i32> @llvm.mips.addv.w(<4 x i32>, <4 x i32>) nounwind 476 477 ; CHECK: llvm_mips_addv_w_test: 478 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_w_ARG1) 479 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_w_ARG2) 480 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 481 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 482 ; CHECK-DAG: addv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 483 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_w_RES) 484 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 485 ; CHECK: .size llvm_mips_addv_w_test 486 ; 487 @llvm_mips_addv_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 488 @llvm_mips_addv_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 489 @llvm_mips_addv_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 490 491 define void @llvm_mips_addv_d_test() nounwind { 492 entry: 493 %0 = load <2 x i64>* @llvm_mips_addv_d_ARG1 494 %1 = load <2 x i64>* @llvm_mips_addv_d_ARG2 495 %2 = tail call <2 x i64> @llvm.mips.addv.d(<2 x i64> %0, <2 x i64> %1) 496 store <2 x i64> %2, <2 x i64>* @llvm_mips_addv_d_RES 497 ret void 498 } 499 500 declare <2 x i64> @llvm.mips.addv.d(<2 x i64>, <2 x i64>) nounwind 501 502 ; CHECK: llvm_mips_addv_d_test: 503 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_d_ARG1) 504 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_d_ARG2) 505 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 506 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 507 ; CHECK-DAG: addv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 508 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_d_RES) 509 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 510 ; CHECK: .size llvm_mips_addv_d_test 511 ; 512 513 define void @addv_b_test() nounwind { 514 entry: 515 %0 = load <16 x i8>* @llvm_mips_addv_b_ARG1 516 %1 = load <16 x i8>* @llvm_mips_addv_b_ARG2 517 %2 = add <16 x i8> %0, %1 518 store <16 x i8> %2, <16 x i8>* @llvm_mips_addv_b_RES 519 ret void 520 } 521 522 ; CHECK: addv_b_test: 523 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_b_ARG1) 524 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_b_ARG2) 525 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 526 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 527 ; CHECK-DAG: addv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 528 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_b_RES) 529 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 530 ; CHECK: .size addv_b_test 531 ; 532 533 define void @addv_h_test() nounwind { 534 entry: 535 %0 = load <8 x i16>* @llvm_mips_addv_h_ARG1 536 %1 = load <8 x i16>* @llvm_mips_addv_h_ARG2 537 %2 = add <8 x i16> %0, %1 538 store <8 x i16> %2, <8 x i16>* @llvm_mips_addv_h_RES 539 ret void 540 } 541 542 ; CHECK: addv_h_test: 543 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_h_ARG1) 544 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_h_ARG2) 545 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 546 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 547 ; CHECK-DAG: addv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 548 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_h_RES) 549 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 550 ; CHECK: .size addv_h_test 551 ; 552 553 define void @addv_w_test() nounwind { 554 entry: 555 %0 = load <4 x i32>* @llvm_mips_addv_w_ARG1 556 %1 = load <4 x i32>* @llvm_mips_addv_w_ARG2 557 %2 = add <4 x i32> %0, %1 558 store <4 x i32> %2, <4 x i32>* @llvm_mips_addv_w_RES 559 ret void 560 } 561 562 ; CHECK: addv_w_test: 563 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_w_ARG1) 564 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_w_ARG2) 565 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 566 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 567 ; CHECK-DAG: addv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 568 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_w_RES) 569 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 570 ; CHECK: .size addv_w_test 571 ; 572 573 define void @addv_d_test() nounwind { 574 entry: 575 %0 = load <2 x i64>* @llvm_mips_addv_d_ARG1 576 %1 = load <2 x i64>* @llvm_mips_addv_d_ARG2 577 %2 = add <2 x i64> %0, %1 578 store <2 x i64> %2, <2 x i64>* @llvm_mips_addv_d_RES 579 ret void 580 } 581 582 ; CHECK: addv_d_test: 583 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_addv_d_ARG1) 584 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_addv_d_ARG2) 585 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 586 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 587 ; CHECK-DAG: addv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 588 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_addv_d_RES) 589 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 590 ; CHECK: .size addv_d_test 591 ; 592 @llvm_mips_asub_s_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 593 @llvm_mips_asub_s_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 594 @llvm_mips_asub_s_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 595 596 define void @llvm_mips_asub_s_b_test() nounwind { 597 entry: 598 %0 = load <16 x i8>* @llvm_mips_asub_s_b_ARG1 599 %1 = load <16 x i8>* @llvm_mips_asub_s_b_ARG2 600 %2 = tail call <16 x i8> @llvm.mips.asub.s.b(<16 x i8> %0, <16 x i8> %1) 601 store <16 x i8> %2, <16 x i8>* @llvm_mips_asub_s_b_RES 602 ret void 603 } 604 605 declare <16 x i8> @llvm.mips.asub.s.b(<16 x i8>, <16 x i8>) nounwind 606 607 ; CHECK: llvm_mips_asub_s_b_test: 608 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_s_b_ARG1) 609 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_s_b_ARG2) 610 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 611 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 612 ; CHECK-DAG: asub_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 613 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_s_b_RES) 614 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 615 ; CHECK: .size llvm_mips_asub_s_b_test 616 ; 617 @llvm_mips_asub_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 618 @llvm_mips_asub_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 619 @llvm_mips_asub_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 620 621 define void @llvm_mips_asub_s_h_test() nounwind { 622 entry: 623 %0 = load <8 x i16>* @llvm_mips_asub_s_h_ARG1 624 %1 = load <8 x i16>* @llvm_mips_asub_s_h_ARG2 625 %2 = tail call <8 x i16> @llvm.mips.asub.s.h(<8 x i16> %0, <8 x i16> %1) 626 store <8 x i16> %2, <8 x i16>* @llvm_mips_asub_s_h_RES 627 ret void 628 } 629 630 declare <8 x i16> @llvm.mips.asub.s.h(<8 x i16>, <8 x i16>) nounwind 631 632 ; CHECK: llvm_mips_asub_s_h_test: 633 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_s_h_ARG1) 634 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_s_h_ARG2) 635 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 636 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 637 ; CHECK-DAG: asub_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 638 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_s_h_RES) 639 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 640 ; CHECK: .size llvm_mips_asub_s_h_test 641 ; 642 @llvm_mips_asub_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 643 @llvm_mips_asub_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 644 @llvm_mips_asub_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 645 646 define void @llvm_mips_asub_s_w_test() nounwind { 647 entry: 648 %0 = load <4 x i32>* @llvm_mips_asub_s_w_ARG1 649 %1 = load <4 x i32>* @llvm_mips_asub_s_w_ARG2 650 %2 = tail call <4 x i32> @llvm.mips.asub.s.w(<4 x i32> %0, <4 x i32> %1) 651 store <4 x i32> %2, <4 x i32>* @llvm_mips_asub_s_w_RES 652 ret void 653 } 654 655 declare <4 x i32> @llvm.mips.asub.s.w(<4 x i32>, <4 x i32>) nounwind 656 657 ; CHECK: llvm_mips_asub_s_w_test: 658 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_s_w_ARG1) 659 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_s_w_ARG2) 660 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 661 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 662 ; CHECK-DAG: asub_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 663 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_s_w_RES) 664 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 665 ; CHECK: .size llvm_mips_asub_s_w_test 666 ; 667 @llvm_mips_asub_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 668 @llvm_mips_asub_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 669 @llvm_mips_asub_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 670 671 define void @llvm_mips_asub_s_d_test() nounwind { 672 entry: 673 %0 = load <2 x i64>* @llvm_mips_asub_s_d_ARG1 674 %1 = load <2 x i64>* @llvm_mips_asub_s_d_ARG2 675 %2 = tail call <2 x i64> @llvm.mips.asub.s.d(<2 x i64> %0, <2 x i64> %1) 676 store <2 x i64> %2, <2 x i64>* @llvm_mips_asub_s_d_RES 677 ret void 678 } 679 680 declare <2 x i64> @llvm.mips.asub.s.d(<2 x i64>, <2 x i64>) nounwind 681 682 ; CHECK: llvm_mips_asub_s_d_test: 683 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_s_d_ARG1) 684 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_s_d_ARG2) 685 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 686 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 687 ; CHECK-DAG: asub_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 688 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_s_d_RES) 689 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 690 ; CHECK: .size llvm_mips_asub_s_d_test 691 ; 692 @llvm_mips_asub_u_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 693 @llvm_mips_asub_u_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 694 @llvm_mips_asub_u_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 695 696 define void @llvm_mips_asub_u_b_test() nounwind { 697 entry: 698 %0 = load <16 x i8>* @llvm_mips_asub_u_b_ARG1 699 %1 = load <16 x i8>* @llvm_mips_asub_u_b_ARG2 700 %2 = tail call <16 x i8> @llvm.mips.asub.u.b(<16 x i8> %0, <16 x i8> %1) 701 store <16 x i8> %2, <16 x i8>* @llvm_mips_asub_u_b_RES 702 ret void 703 } 704 705 declare <16 x i8> @llvm.mips.asub.u.b(<16 x i8>, <16 x i8>) nounwind 706 707 ; CHECK: llvm_mips_asub_u_b_test: 708 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_u_b_ARG1) 709 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_u_b_ARG2) 710 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 711 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 712 ; CHECK-DAG: asub_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 713 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_u_b_RES) 714 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 715 ; CHECK: .size llvm_mips_asub_u_b_test 716 ; 717 @llvm_mips_asub_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 718 @llvm_mips_asub_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 719 @llvm_mips_asub_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 720 721 define void @llvm_mips_asub_u_h_test() nounwind { 722 entry: 723 %0 = load <8 x i16>* @llvm_mips_asub_u_h_ARG1 724 %1 = load <8 x i16>* @llvm_mips_asub_u_h_ARG2 725 %2 = tail call <8 x i16> @llvm.mips.asub.u.h(<8 x i16> %0, <8 x i16> %1) 726 store <8 x i16> %2, <8 x i16>* @llvm_mips_asub_u_h_RES 727 ret void 728 } 729 730 declare <8 x i16> @llvm.mips.asub.u.h(<8 x i16>, <8 x i16>) nounwind 731 732 ; CHECK: llvm_mips_asub_u_h_test: 733 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_u_h_ARG1) 734 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_u_h_ARG2) 735 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 736 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 737 ; CHECK-DAG: asub_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 738 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_u_h_RES) 739 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 740 ; CHECK: .size llvm_mips_asub_u_h_test 741 ; 742 @llvm_mips_asub_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 743 @llvm_mips_asub_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 744 @llvm_mips_asub_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 745 746 define void @llvm_mips_asub_u_w_test() nounwind { 747 entry: 748 %0 = load <4 x i32>* @llvm_mips_asub_u_w_ARG1 749 %1 = load <4 x i32>* @llvm_mips_asub_u_w_ARG2 750 %2 = tail call <4 x i32> @llvm.mips.asub.u.w(<4 x i32> %0, <4 x i32> %1) 751 store <4 x i32> %2, <4 x i32>* @llvm_mips_asub_u_w_RES 752 ret void 753 } 754 755 declare <4 x i32> @llvm.mips.asub.u.w(<4 x i32>, <4 x i32>) nounwind 756 757 ; CHECK: llvm_mips_asub_u_w_test: 758 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_u_w_ARG1) 759 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_u_w_ARG2) 760 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 761 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 762 ; CHECK-DAG: asub_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 763 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_u_w_RES) 764 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 765 ; CHECK: .size llvm_mips_asub_u_w_test 766 ; 767 @llvm_mips_asub_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 768 @llvm_mips_asub_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 769 @llvm_mips_asub_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 770 771 define void @llvm_mips_asub_u_d_test() nounwind { 772 entry: 773 %0 = load <2 x i64>* @llvm_mips_asub_u_d_ARG1 774 %1 = load <2 x i64>* @llvm_mips_asub_u_d_ARG2 775 %2 = tail call <2 x i64> @llvm.mips.asub.u.d(<2 x i64> %0, <2 x i64> %1) 776 store <2 x i64> %2, <2 x i64>* @llvm_mips_asub_u_d_RES 777 ret void 778 } 779 780 declare <2 x i64> @llvm.mips.asub.u.d(<2 x i64>, <2 x i64>) nounwind 781 782 ; CHECK: llvm_mips_asub_u_d_test: 783 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_asub_u_d_ARG1) 784 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_asub_u_d_ARG2) 785 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 786 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 787 ; CHECK-DAG: asub_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 788 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_asub_u_d_RES) 789 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 790 ; CHECK: .size llvm_mips_asub_u_d_test 791 ; 792 @llvm_mips_ave_s_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 793 @llvm_mips_ave_s_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 794 @llvm_mips_ave_s_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 795 796 define void @llvm_mips_ave_s_b_test() nounwind { 797 entry: 798 %0 = load <16 x i8>* @llvm_mips_ave_s_b_ARG1 799 %1 = load <16 x i8>* @llvm_mips_ave_s_b_ARG2 800 %2 = tail call <16 x i8> @llvm.mips.ave.s.b(<16 x i8> %0, <16 x i8> %1) 801 store <16 x i8> %2, <16 x i8>* @llvm_mips_ave_s_b_RES 802 ret void 803 } 804 805 declare <16 x i8> @llvm.mips.ave.s.b(<16 x i8>, <16 x i8>) nounwind 806 807 ; CHECK: llvm_mips_ave_s_b_test: 808 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_s_b_ARG1) 809 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_s_b_ARG2) 810 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 811 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 812 ; CHECK-DAG: ave_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 813 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_s_b_RES) 814 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 815 ; CHECK: .size llvm_mips_ave_s_b_test 816 ; 817 @llvm_mips_ave_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 818 @llvm_mips_ave_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 819 @llvm_mips_ave_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 820 821 define void @llvm_mips_ave_s_h_test() nounwind { 822 entry: 823 %0 = load <8 x i16>* @llvm_mips_ave_s_h_ARG1 824 %1 = load <8 x i16>* @llvm_mips_ave_s_h_ARG2 825 %2 = tail call <8 x i16> @llvm.mips.ave.s.h(<8 x i16> %0, <8 x i16> %1) 826 store <8 x i16> %2, <8 x i16>* @llvm_mips_ave_s_h_RES 827 ret void 828 } 829 830 declare <8 x i16> @llvm.mips.ave.s.h(<8 x i16>, <8 x i16>) nounwind 831 832 ; CHECK: llvm_mips_ave_s_h_test: 833 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_s_h_ARG1) 834 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_s_h_ARG2) 835 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 836 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 837 ; CHECK-DAG: ave_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 838 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_s_h_RES) 839 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 840 ; CHECK: .size llvm_mips_ave_s_h_test 841 ; 842 @llvm_mips_ave_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 843 @llvm_mips_ave_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 844 @llvm_mips_ave_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 845 846 define void @llvm_mips_ave_s_w_test() nounwind { 847 entry: 848 %0 = load <4 x i32>* @llvm_mips_ave_s_w_ARG1 849 %1 = load <4 x i32>* @llvm_mips_ave_s_w_ARG2 850 %2 = tail call <4 x i32> @llvm.mips.ave.s.w(<4 x i32> %0, <4 x i32> %1) 851 store <4 x i32> %2, <4 x i32>* @llvm_mips_ave_s_w_RES 852 ret void 853 } 854 855 declare <4 x i32> @llvm.mips.ave.s.w(<4 x i32>, <4 x i32>) nounwind 856 857 ; CHECK: llvm_mips_ave_s_w_test: 858 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_s_w_ARG1) 859 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_s_w_ARG2) 860 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 861 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 862 ; CHECK-DAG: ave_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 863 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_s_w_RES) 864 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 865 ; CHECK: .size llvm_mips_ave_s_w_test 866 ; 867 @llvm_mips_ave_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 868 @llvm_mips_ave_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 869 @llvm_mips_ave_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 870 871 define void @llvm_mips_ave_s_d_test() nounwind { 872 entry: 873 %0 = load <2 x i64>* @llvm_mips_ave_s_d_ARG1 874 %1 = load <2 x i64>* @llvm_mips_ave_s_d_ARG2 875 %2 = tail call <2 x i64> @llvm.mips.ave.s.d(<2 x i64> %0, <2 x i64> %1) 876 store <2 x i64> %2, <2 x i64>* @llvm_mips_ave_s_d_RES 877 ret void 878 } 879 880 declare <2 x i64> @llvm.mips.ave.s.d(<2 x i64>, <2 x i64>) nounwind 881 882 ; CHECK: llvm_mips_ave_s_d_test: 883 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_s_d_ARG1) 884 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_s_d_ARG2) 885 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 886 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 887 ; CHECK-DAG: ave_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 888 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_s_d_RES) 889 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 890 ; CHECK: .size llvm_mips_ave_s_d_test 891 ; 892 @llvm_mips_ave_u_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 893 @llvm_mips_ave_u_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 894 @llvm_mips_ave_u_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 895 896 define void @llvm_mips_ave_u_b_test() nounwind { 897 entry: 898 %0 = load <16 x i8>* @llvm_mips_ave_u_b_ARG1 899 %1 = load <16 x i8>* @llvm_mips_ave_u_b_ARG2 900 %2 = tail call <16 x i8> @llvm.mips.ave.u.b(<16 x i8> %0, <16 x i8> %1) 901 store <16 x i8> %2, <16 x i8>* @llvm_mips_ave_u_b_RES 902 ret void 903 } 904 905 declare <16 x i8> @llvm.mips.ave.u.b(<16 x i8>, <16 x i8>) nounwind 906 907 ; CHECK: llvm_mips_ave_u_b_test: 908 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_u_b_ARG1) 909 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_u_b_ARG2) 910 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 911 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 912 ; CHECK-DAG: ave_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 913 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_u_b_RES) 914 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 915 ; CHECK: .size llvm_mips_ave_u_b_test 916 ; 917 @llvm_mips_ave_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 918 @llvm_mips_ave_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 919 @llvm_mips_ave_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 920 921 define void @llvm_mips_ave_u_h_test() nounwind { 922 entry: 923 %0 = load <8 x i16>* @llvm_mips_ave_u_h_ARG1 924 %1 = load <8 x i16>* @llvm_mips_ave_u_h_ARG2 925 %2 = tail call <8 x i16> @llvm.mips.ave.u.h(<8 x i16> %0, <8 x i16> %1) 926 store <8 x i16> %2, <8 x i16>* @llvm_mips_ave_u_h_RES 927 ret void 928 } 929 930 declare <8 x i16> @llvm.mips.ave.u.h(<8 x i16>, <8 x i16>) nounwind 931 932 ; CHECK: llvm_mips_ave_u_h_test: 933 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_u_h_ARG1) 934 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_u_h_ARG2) 935 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 936 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 937 ; CHECK-DAG: ave_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 938 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_u_h_RES) 939 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 940 ; CHECK: .size llvm_mips_ave_u_h_test 941 ; 942 @llvm_mips_ave_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 943 @llvm_mips_ave_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 944 @llvm_mips_ave_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 945 946 define void @llvm_mips_ave_u_w_test() nounwind { 947 entry: 948 %0 = load <4 x i32>* @llvm_mips_ave_u_w_ARG1 949 %1 = load <4 x i32>* @llvm_mips_ave_u_w_ARG2 950 %2 = tail call <4 x i32> @llvm.mips.ave.u.w(<4 x i32> %0, <4 x i32> %1) 951 store <4 x i32> %2, <4 x i32>* @llvm_mips_ave_u_w_RES 952 ret void 953 } 954 955 declare <4 x i32> @llvm.mips.ave.u.w(<4 x i32>, <4 x i32>) nounwind 956 957 ; CHECK: llvm_mips_ave_u_w_test: 958 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_u_w_ARG1) 959 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_u_w_ARG2) 960 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 961 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 962 ; CHECK-DAG: ave_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 963 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_u_w_RES) 964 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 965 ; CHECK: .size llvm_mips_ave_u_w_test 966 ; 967 @llvm_mips_ave_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 968 @llvm_mips_ave_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 969 @llvm_mips_ave_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 970 971 define void @llvm_mips_ave_u_d_test() nounwind { 972 entry: 973 %0 = load <2 x i64>* @llvm_mips_ave_u_d_ARG1 974 %1 = load <2 x i64>* @llvm_mips_ave_u_d_ARG2 975 %2 = tail call <2 x i64> @llvm.mips.ave.u.d(<2 x i64> %0, <2 x i64> %1) 976 store <2 x i64> %2, <2 x i64>* @llvm_mips_ave_u_d_RES 977 ret void 978 } 979 980 declare <2 x i64> @llvm.mips.ave.u.d(<2 x i64>, <2 x i64>) nounwind 981 982 ; CHECK: llvm_mips_ave_u_d_test: 983 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_ave_u_d_ARG1) 984 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_ave_u_d_ARG2) 985 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 986 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 987 ; CHECK-DAG: ave_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 988 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_ave_u_d_RES) 989 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 990 ; CHECK: .size llvm_mips_ave_u_d_test 991 ; 992 @llvm_mips_aver_s_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 993 @llvm_mips_aver_s_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 994 @llvm_mips_aver_s_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 995 996 define void @llvm_mips_aver_s_b_test() nounwind { 997 entry: 998 %0 = load <16 x i8>* @llvm_mips_aver_s_b_ARG1 999 %1 = load <16 x i8>* @llvm_mips_aver_s_b_ARG2 1000 %2 = tail call <16 x i8> @llvm.mips.aver.s.b(<16 x i8> %0, <16 x i8> %1) 1001 store <16 x i8> %2, <16 x i8>* @llvm_mips_aver_s_b_RES 1002 ret void 1003 } 1004 1005 declare <16 x i8> @llvm.mips.aver.s.b(<16 x i8>, <16 x i8>) nounwind 1006 1007 ; CHECK: llvm_mips_aver_s_b_test: 1008 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_s_b_ARG1) 1009 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_s_b_ARG2) 1010 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 1011 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 1012 ; CHECK-DAG: aver_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1013 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_s_b_RES) 1014 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 1015 ; CHECK: .size llvm_mips_aver_s_b_test 1016 ; 1017 @llvm_mips_aver_s_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 1018 @llvm_mips_aver_s_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 1019 @llvm_mips_aver_s_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 1020 1021 define void @llvm_mips_aver_s_h_test() nounwind { 1022 entry: 1023 %0 = load <8 x i16>* @llvm_mips_aver_s_h_ARG1 1024 %1 = load <8 x i16>* @llvm_mips_aver_s_h_ARG2 1025 %2 = tail call <8 x i16> @llvm.mips.aver.s.h(<8 x i16> %0, <8 x i16> %1) 1026 store <8 x i16> %2, <8 x i16>* @llvm_mips_aver_s_h_RES 1027 ret void 1028 } 1029 1030 declare <8 x i16> @llvm.mips.aver.s.h(<8 x i16>, <8 x i16>) nounwind 1031 1032 ; CHECK: llvm_mips_aver_s_h_test: 1033 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_s_h_ARG1) 1034 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_s_h_ARG2) 1035 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 1036 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 1037 ; CHECK-DAG: aver_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1038 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_s_h_RES) 1039 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 1040 ; CHECK: .size llvm_mips_aver_s_h_test 1041 ; 1042 @llvm_mips_aver_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 1043 @llvm_mips_aver_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 1044 @llvm_mips_aver_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 1045 1046 define void @llvm_mips_aver_s_w_test() nounwind { 1047 entry: 1048 %0 = load <4 x i32>* @llvm_mips_aver_s_w_ARG1 1049 %1 = load <4 x i32>* @llvm_mips_aver_s_w_ARG2 1050 %2 = tail call <4 x i32> @llvm.mips.aver.s.w(<4 x i32> %0, <4 x i32> %1) 1051 store <4 x i32> %2, <4 x i32>* @llvm_mips_aver_s_w_RES 1052 ret void 1053 } 1054 1055 declare <4 x i32> @llvm.mips.aver.s.w(<4 x i32>, <4 x i32>) nounwind 1056 1057 ; CHECK: llvm_mips_aver_s_w_test: 1058 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_s_w_ARG1) 1059 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_s_w_ARG2) 1060 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 1061 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 1062 ; CHECK-DAG: aver_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1063 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_s_w_RES) 1064 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 1065 ; CHECK: .size llvm_mips_aver_s_w_test 1066 ; 1067 @llvm_mips_aver_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 1068 @llvm_mips_aver_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 1069 @llvm_mips_aver_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 1070 1071 define void @llvm_mips_aver_s_d_test() nounwind { 1072 entry: 1073 %0 = load <2 x i64>* @llvm_mips_aver_s_d_ARG1 1074 %1 = load <2 x i64>* @llvm_mips_aver_s_d_ARG2 1075 %2 = tail call <2 x i64> @llvm.mips.aver.s.d(<2 x i64> %0, <2 x i64> %1) 1076 store <2 x i64> %2, <2 x i64>* @llvm_mips_aver_s_d_RES 1077 ret void 1078 } 1079 1080 declare <2 x i64> @llvm.mips.aver.s.d(<2 x i64>, <2 x i64>) nounwind 1081 1082 ; CHECK: llvm_mips_aver_s_d_test: 1083 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_s_d_ARG1) 1084 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_s_d_ARG2) 1085 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1086 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1087 ; CHECK-DAG: aver_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1088 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_s_d_RES) 1089 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 1090 ; CHECK: .size llvm_mips_aver_s_d_test 1091 ; 1092 @llvm_mips_aver_u_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 1093 @llvm_mips_aver_u_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 1094 @llvm_mips_aver_u_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 1095 1096 define void @llvm_mips_aver_u_b_test() nounwind { 1097 entry: 1098 %0 = load <16 x i8>* @llvm_mips_aver_u_b_ARG1 1099 %1 = load <16 x i8>* @llvm_mips_aver_u_b_ARG2 1100 %2 = tail call <16 x i8> @llvm.mips.aver.u.b(<16 x i8> %0, <16 x i8> %1) 1101 store <16 x i8> %2, <16 x i8>* @llvm_mips_aver_u_b_RES 1102 ret void 1103 } 1104 1105 declare <16 x i8> @llvm.mips.aver.u.b(<16 x i8>, <16 x i8>) nounwind 1106 1107 ; CHECK: llvm_mips_aver_u_b_test: 1108 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_u_b_ARG1) 1109 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_u_b_ARG2) 1110 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 1111 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 1112 ; CHECK-DAG: aver_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1113 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_u_b_RES) 1114 ; CHECK-DAG: st.b [[WD]], 0([[R3]]) 1115 ; CHECK: .size llvm_mips_aver_u_b_test 1116 ; 1117 @llvm_mips_aver_u_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 1118 @llvm_mips_aver_u_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 1119 @llvm_mips_aver_u_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 1120 1121 define void @llvm_mips_aver_u_h_test() nounwind { 1122 entry: 1123 %0 = load <8 x i16>* @llvm_mips_aver_u_h_ARG1 1124 %1 = load <8 x i16>* @llvm_mips_aver_u_h_ARG2 1125 %2 = tail call <8 x i16> @llvm.mips.aver.u.h(<8 x i16> %0, <8 x i16> %1) 1126 store <8 x i16> %2, <8 x i16>* @llvm_mips_aver_u_h_RES 1127 ret void 1128 } 1129 1130 declare <8 x i16> @llvm.mips.aver.u.h(<8 x i16>, <8 x i16>) nounwind 1131 1132 ; CHECK: llvm_mips_aver_u_h_test: 1133 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_u_h_ARG1) 1134 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_u_h_ARG2) 1135 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 1136 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 1137 ; CHECK-DAG: aver_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1138 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_u_h_RES) 1139 ; CHECK-DAG: st.h [[WD]], 0([[R3]]) 1140 ; CHECK: .size llvm_mips_aver_u_h_test 1141 ; 1142 @llvm_mips_aver_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 1143 @llvm_mips_aver_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 1144 @llvm_mips_aver_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 1145 1146 define void @llvm_mips_aver_u_w_test() nounwind { 1147 entry: 1148 %0 = load <4 x i32>* @llvm_mips_aver_u_w_ARG1 1149 %1 = load <4 x i32>* @llvm_mips_aver_u_w_ARG2 1150 %2 = tail call <4 x i32> @llvm.mips.aver.u.w(<4 x i32> %0, <4 x i32> %1) 1151 store <4 x i32> %2, <4 x i32>* @llvm_mips_aver_u_w_RES 1152 ret void 1153 } 1154 1155 declare <4 x i32> @llvm.mips.aver.u.w(<4 x i32>, <4 x i32>) nounwind 1156 1157 ; CHECK: llvm_mips_aver_u_w_test: 1158 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_u_w_ARG1) 1159 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_u_w_ARG2) 1160 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 1161 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 1162 ; CHECK-DAG: aver_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1163 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_u_w_RES) 1164 ; CHECK-DAG: st.w [[WD]], 0([[R3]]) 1165 ; CHECK: .size llvm_mips_aver_u_w_test 1166 ; 1167 @llvm_mips_aver_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 1168 @llvm_mips_aver_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 1169 @llvm_mips_aver_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 1170 1171 define void @llvm_mips_aver_u_d_test() nounwind { 1172 entry: 1173 %0 = load <2 x i64>* @llvm_mips_aver_u_d_ARG1 1174 %1 = load <2 x i64>* @llvm_mips_aver_u_d_ARG2 1175 %2 = tail call <2 x i64> @llvm.mips.aver.u.d(<2 x i64> %0, <2 x i64> %1) 1176 store <2 x i64> %2, <2 x i64>* @llvm_mips_aver_u_d_RES 1177 ret void 1178 } 1179 1180 declare <2 x i64> @llvm.mips.aver.u.d(<2 x i64>, <2 x i64>) nounwind 1181 1182 ; CHECK: llvm_mips_aver_u_d_test: 1183 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_aver_u_d_ARG1) 1184 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_aver_u_d_ARG2) 1185 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1186 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1187 ; CHECK-DAG: aver_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1188 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_aver_u_d_RES) 1189 ; CHECK-DAG: st.d [[WD]], 0([[R3]]) 1190 ; CHECK: .size llvm_mips_aver_u_d_test 1191 ; 1192