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 's' 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 @llvm_mips_sld_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 8 @llvm_mips_sld_b_ARG2 = 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 9 @llvm_mips_sld_b_ARG3 = global i32 10, align 16 10 @llvm_mips_sld_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 11 12 define void @llvm_mips_sld_b_test() nounwind { 13 entry: 14 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_sld_b_ARG1 15 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_sld_b_ARG2 16 %2 = load i32, i32* @llvm_mips_sld_b_ARG3 17 %3 = tail call <16 x i8> @llvm.mips.sld.b(<16 x i8> %0, <16 x i8> %1, i32 %2) 18 store <16 x i8> %3, <16 x i8>* @llvm_mips_sld_b_RES 19 ret void 20 } 21 22 declare <16 x i8> @llvm.mips.sld.b(<16 x i8>, <16 x i8>, i32) nounwind 23 24 ; CHECK: llvm_mips_sld_b_test: 25 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_b_ARG1) 26 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_b_ARG2) 27 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_sld_b_ARG3) 28 ; CHECK-DAG: ld.b [[WD:\$w[0-9]+]], 0([[R1]]) 29 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R2]]) 30 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R3]]) 31 ; CHECK-DAG: sld.b [[WD]], [[WS]]{{\[}}[[RT]]{{\]}} 32 ; CHECK-DAG: st.b [[WD]] 33 ; CHECK: .size llvm_mips_sld_b_test 34 ; 35 @llvm_mips_sld_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 36 @llvm_mips_sld_h_ARG2 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 37 @llvm_mips_sld_h_ARG3 = global i32 10, align 16 38 @llvm_mips_sld_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 39 40 define void @llvm_mips_sld_h_test() nounwind { 41 entry: 42 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_sld_h_ARG1 43 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_sld_h_ARG2 44 %2 = load i32, i32* @llvm_mips_sld_h_ARG3 45 %3 = tail call <8 x i16> @llvm.mips.sld.h(<8 x i16> %0, <8 x i16> %1, i32 %2) 46 store <8 x i16> %3, <8 x i16>* @llvm_mips_sld_h_RES 47 ret void 48 } 49 50 declare <8 x i16> @llvm.mips.sld.h(<8 x i16>, <8 x i16>, i32) nounwind 51 52 ; CHECK: llvm_mips_sld_h_test: 53 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_h_ARG1) 54 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_h_ARG2) 55 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_sld_h_ARG3) 56 ; CHECK-DAG: ld.h [[WD:\$w[0-9]+]], 0([[R1]]) 57 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R2]]) 58 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R3]]) 59 ; CHECK-DAG: sld.h [[WD]], [[WS]]{{\[}}[[RT]]{{\]}} 60 ; CHECK-DAG: st.h [[WD]] 61 ; CHECK: .size llvm_mips_sld_h_test 62 ; 63 @llvm_mips_sld_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 64 @llvm_mips_sld_w_ARG2 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 65 @llvm_mips_sld_w_ARG3 = global i32 10, align 16 66 @llvm_mips_sld_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 67 68 define void @llvm_mips_sld_w_test() nounwind { 69 entry: 70 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_sld_w_ARG1 71 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_sld_w_ARG2 72 %2 = load i32, i32* @llvm_mips_sld_w_ARG3 73 %3 = tail call <4 x i32> @llvm.mips.sld.w(<4 x i32> %0, <4 x i32> %1, i32 %2) 74 store <4 x i32> %3, <4 x i32>* @llvm_mips_sld_w_RES 75 ret void 76 } 77 78 declare <4 x i32> @llvm.mips.sld.w(<4 x i32>, <4 x i32>, i32) nounwind 79 80 ; CHECK: llvm_mips_sld_w_test: 81 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_w_ARG1) 82 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_w_ARG2) 83 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_sld_w_ARG3) 84 ; CHECK-DAG: ld.w [[WD:\$w[0-9]+]], 0([[R1]]) 85 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R2]]) 86 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R3]]) 87 ; CHECK-DAG: sld.w [[WD]], [[WS]]{{\[}}[[RT]]{{\]}} 88 ; CHECK-DAG: st.w [[WD]] 89 ; CHECK: .size llvm_mips_sld_w_test 90 ; 91 @llvm_mips_sld_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 92 @llvm_mips_sld_d_ARG2 = global <2 x i64> <i64 0, i64 1>, align 16 93 @llvm_mips_sld_d_ARG3 = global i32 10, align 16 94 @llvm_mips_sld_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 95 96 define void @llvm_mips_sld_d_test() nounwind { 97 entry: 98 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_sld_d_ARG1 99 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_sld_d_ARG2 100 %2 = load i32, i32* @llvm_mips_sld_d_ARG3 101 %3 = tail call <2 x i64> @llvm.mips.sld.d(<2 x i64> %0, <2 x i64> %1, i32 %2) 102 store <2 x i64> %3, <2 x i64>* @llvm_mips_sld_d_RES 103 ret void 104 } 105 106 declare <2 x i64> @llvm.mips.sld.d(<2 x i64>, <2 x i64>, i32) nounwind 107 108 ; CHECK: llvm_mips_sld_d_test: 109 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sld_d_ARG1) 110 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sld_d_ARG2) 111 ; CHECK-DAG: lw [[R3:\$[0-9]+]], %got(llvm_mips_sld_d_ARG3) 112 ; CHECK-DAG: ld.d [[WD:\$w[0-9]+]], 0([[R1]]) 113 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R2]]) 114 ; CHECK-DAG: lw [[RT:\$[0-9]+]], 0([[R3]]) 115 ; CHECK-DAG: sld.d [[WD]], [[WS]]{{\[}}[[RT]]{{\]}} 116 ; CHECK-DAG: st.d [[WD]] 117 ; CHECK: .size llvm_mips_sld_d_test 118 ; 119 @llvm_mips_sll_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 120 @llvm_mips_sll_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 121 @llvm_mips_sll_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 122 123 define void @llvm_mips_sll_b_test() nounwind { 124 entry: 125 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_sll_b_ARG1 126 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_sll_b_ARG2 127 %2 = tail call <16 x i8> @llvm.mips.sll.b(<16 x i8> %0, <16 x i8> %1) 128 store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES 129 ret void 130 } 131 132 declare <16 x i8> @llvm.mips.sll.b(<16 x i8>, <16 x i8>) nounwind 133 134 ; CHECK: llvm_mips_sll_b_test: 135 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1) 136 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2) 137 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 138 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 139 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 140 ; CHECK-DAG: st.b [[WD]] 141 ; CHECK: .size llvm_mips_sll_b_test 142 ; 143 @llvm_mips_sll_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 144 @llvm_mips_sll_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 145 @llvm_mips_sll_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 146 147 define void @llvm_mips_sll_h_test() nounwind { 148 entry: 149 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_sll_h_ARG1 150 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_sll_h_ARG2 151 %2 = tail call <8 x i16> @llvm.mips.sll.h(<8 x i16> %0, <8 x i16> %1) 152 store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES 153 ret void 154 } 155 156 declare <8 x i16> @llvm.mips.sll.h(<8 x i16>, <8 x i16>) nounwind 157 158 ; CHECK: llvm_mips_sll_h_test: 159 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1) 160 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2) 161 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 162 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 163 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 164 ; CHECK-DAG: st.h [[WD]] 165 ; CHECK: .size llvm_mips_sll_h_test 166 ; 167 @llvm_mips_sll_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 168 @llvm_mips_sll_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 169 @llvm_mips_sll_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 170 171 define void @llvm_mips_sll_w_test() nounwind { 172 entry: 173 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_sll_w_ARG1 174 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_sll_w_ARG2 175 %2 = tail call <4 x i32> @llvm.mips.sll.w(<4 x i32> %0, <4 x i32> %1) 176 store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES 177 ret void 178 } 179 180 declare <4 x i32> @llvm.mips.sll.w(<4 x i32>, <4 x i32>) nounwind 181 182 ; CHECK: llvm_mips_sll_w_test: 183 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1) 184 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2) 185 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 186 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 187 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 188 ; CHECK-DAG: st.w [[WD]] 189 ; CHECK: .size llvm_mips_sll_w_test 190 ; 191 @llvm_mips_sll_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 192 @llvm_mips_sll_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 193 @llvm_mips_sll_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 194 195 define void @llvm_mips_sll_d_test() nounwind { 196 entry: 197 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_sll_d_ARG1 198 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_sll_d_ARG2 199 %2 = tail call <2 x i64> @llvm.mips.sll.d(<2 x i64> %0, <2 x i64> %1) 200 store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES 201 ret void 202 } 203 204 declare <2 x i64> @llvm.mips.sll.d(<2 x i64>, <2 x i64>) nounwind 205 206 ; CHECK: llvm_mips_sll_d_test: 207 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1) 208 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2) 209 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 210 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 211 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 212 ; CHECK-DAG: st.d [[WD]] 213 ; CHECK: .size llvm_mips_sll_d_test 214 215 define void @sll_b_test() nounwind { 216 entry: 217 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_sll_b_ARG1 218 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_sll_b_ARG2 219 %2 = shl <16 x i8> %0, %1 220 store <16 x i8> %2, <16 x i8>* @llvm_mips_sll_b_RES 221 ret void 222 } 223 224 ; CHECK: sll_b_test: 225 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_b_ARG1) 226 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_b_ARG2) 227 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 228 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 229 ; CHECK-DAG: sll.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 230 ; CHECK-DAG: st.b [[WD]] 231 ; CHECK: .size sll_b_test 232 233 define void @sll_h_test() nounwind { 234 entry: 235 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_sll_h_ARG1 236 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_sll_h_ARG2 237 %2 = shl <8 x i16> %0, %1 238 store <8 x i16> %2, <8 x i16>* @llvm_mips_sll_h_RES 239 ret void 240 } 241 242 ; CHECK: sll_h_test: 243 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_h_ARG1) 244 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_h_ARG2) 245 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 246 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 247 ; CHECK-DAG: sll.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 248 ; CHECK-DAG: st.h [[WD]] 249 ; CHECK: .size sll_h_test 250 251 define void @sll_w_test() nounwind { 252 entry: 253 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_sll_w_ARG1 254 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_sll_w_ARG2 255 %2 = shl <4 x i32> %0, %1 256 store <4 x i32> %2, <4 x i32>* @llvm_mips_sll_w_RES 257 ret void 258 } 259 260 ; CHECK: sll_w_test: 261 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_w_ARG1) 262 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_w_ARG2) 263 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 264 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 265 ; CHECK-DAG: sll.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 266 ; CHECK-DAG: st.w [[WD]] 267 ; CHECK: .size sll_w_test 268 269 define void @sll_d_test() nounwind { 270 entry: 271 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_sll_d_ARG1 272 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_sll_d_ARG2 273 %2 = shl <2 x i64> %0, %1 274 store <2 x i64> %2, <2 x i64>* @llvm_mips_sll_d_RES 275 ret void 276 } 277 278 ; CHECK: sll_d_test: 279 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sll_d_ARG1) 280 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sll_d_ARG2) 281 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 282 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 283 ; CHECK-DAG: sll.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 284 ; CHECK-DAG: st.d [[WD]] 285 ; CHECK: .size sll_d_test 286 ; 287 @llvm_mips_sra_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 288 @llvm_mips_sra_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 289 @llvm_mips_sra_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 290 291 define void @llvm_mips_sra_b_test() nounwind { 292 entry: 293 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_sra_b_ARG1 294 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_sra_b_ARG2 295 %2 = tail call <16 x i8> @llvm.mips.sra.b(<16 x i8> %0, <16 x i8> %1) 296 store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES 297 ret void 298 } 299 300 declare <16 x i8> @llvm.mips.sra.b(<16 x i8>, <16 x i8>) nounwind 301 302 ; CHECK: llvm_mips_sra_b_test: 303 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1) 304 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2) 305 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 306 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 307 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 308 ; CHECK-DAG: st.b [[WD]] 309 ; CHECK: .size llvm_mips_sra_b_test 310 ; 311 @llvm_mips_sra_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 312 @llvm_mips_sra_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 313 @llvm_mips_sra_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 314 315 define void @llvm_mips_sra_h_test() nounwind { 316 entry: 317 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_sra_h_ARG1 318 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_sra_h_ARG2 319 %2 = tail call <8 x i16> @llvm.mips.sra.h(<8 x i16> %0, <8 x i16> %1) 320 store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES 321 ret void 322 } 323 324 declare <8 x i16> @llvm.mips.sra.h(<8 x i16>, <8 x i16>) nounwind 325 326 ; CHECK: llvm_mips_sra_h_test: 327 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1) 328 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2) 329 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 330 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 331 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 332 ; CHECK-DAG: st.h [[WD]] 333 ; CHECK: .size llvm_mips_sra_h_test 334 ; 335 @llvm_mips_sra_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 336 @llvm_mips_sra_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 337 @llvm_mips_sra_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 338 339 define void @llvm_mips_sra_w_test() nounwind { 340 entry: 341 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_sra_w_ARG1 342 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_sra_w_ARG2 343 %2 = tail call <4 x i32> @llvm.mips.sra.w(<4 x i32> %0, <4 x i32> %1) 344 store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES 345 ret void 346 } 347 348 declare <4 x i32> @llvm.mips.sra.w(<4 x i32>, <4 x i32>) nounwind 349 350 ; CHECK: llvm_mips_sra_w_test: 351 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1) 352 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2) 353 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 354 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 355 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 356 ; CHECK-DAG: st.w [[WD]] 357 ; CHECK: .size llvm_mips_sra_w_test 358 ; 359 @llvm_mips_sra_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 360 @llvm_mips_sra_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 361 @llvm_mips_sra_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 362 363 define void @llvm_mips_sra_d_test() nounwind { 364 entry: 365 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_sra_d_ARG1 366 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_sra_d_ARG2 367 %2 = tail call <2 x i64> @llvm.mips.sra.d(<2 x i64> %0, <2 x i64> %1) 368 store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES 369 ret void 370 } 371 372 declare <2 x i64> @llvm.mips.sra.d(<2 x i64>, <2 x i64>) nounwind 373 374 ; CHECK: llvm_mips_sra_d_test: 375 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1) 376 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2) 377 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 378 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 379 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 380 ; CHECK-DAG: st.d [[WD]] 381 ; CHECK: .size llvm_mips_sra_d_test 382 ; 383 384 define void @sra_b_test() nounwind { 385 entry: 386 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_sra_b_ARG1 387 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_sra_b_ARG2 388 %2 = ashr <16 x i8> %0, %1 389 store <16 x i8> %2, <16 x i8>* @llvm_mips_sra_b_RES 390 ret void 391 } 392 393 ; CHECK: sra_b_test: 394 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_b_ARG1) 395 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_b_ARG2) 396 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 397 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 398 ; CHECK-DAG: sra.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 399 ; CHECK-DAG: st.b [[WD]] 400 ; CHECK: .size sra_b_test 401 402 define void @sra_h_test() nounwind { 403 entry: 404 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_sra_h_ARG1 405 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_sra_h_ARG2 406 %2 = ashr <8 x i16> %0, %1 407 store <8 x i16> %2, <8 x i16>* @llvm_mips_sra_h_RES 408 ret void 409 } 410 411 ; CHECK: sra_h_test: 412 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_h_ARG1) 413 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_h_ARG2) 414 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 415 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 416 ; CHECK-DAG: sra.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 417 ; CHECK-DAG: st.h [[WD]] 418 ; CHECK: .size sra_h_test 419 420 define void @sra_w_test() nounwind { 421 entry: 422 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_sra_w_ARG1 423 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_sra_w_ARG2 424 %2 = ashr <4 x i32> %0, %1 425 store <4 x i32> %2, <4 x i32>* @llvm_mips_sra_w_RES 426 ret void 427 } 428 429 ; CHECK: sra_w_test: 430 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_w_ARG1) 431 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_w_ARG2) 432 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 433 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 434 ; CHECK-DAG: sra.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 435 ; CHECK-DAG: st.w [[WD]] 436 ; CHECK: .size sra_w_test 437 438 define void @sra_d_test() nounwind { 439 entry: 440 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_sra_d_ARG1 441 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_sra_d_ARG2 442 %2 = ashr <2 x i64> %0, %1 443 store <2 x i64> %2, <2 x i64>* @llvm_mips_sra_d_RES 444 ret void 445 } 446 447 ; CHECK: sra_d_test: 448 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_sra_d_ARG1) 449 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_sra_d_ARG2) 450 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 451 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 452 ; CHECK-DAG: sra.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 453 ; CHECK-DAG: st.d [[WD]] 454 ; CHECK: .size sra_d_test 455 456 @llvm_mips_srar_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 457 @llvm_mips_srar_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 458 @llvm_mips_srar_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 459 460 define void @llvm_mips_srar_b_test() nounwind { 461 entry: 462 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_srar_b_ARG1 463 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_srar_b_ARG2 464 %2 = tail call <16 x i8> @llvm.mips.srar.b(<16 x i8> %0, <16 x i8> %1) 465 store <16 x i8> %2, <16 x i8>* @llvm_mips_srar_b_RES 466 ret void 467 } 468 469 declare <16 x i8> @llvm.mips.srar.b(<16 x i8>, <16 x i8>) nounwind 470 471 ; CHECK: llvm_mips_srar_b_test: 472 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_b_ARG1) 473 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_b_ARG2) 474 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 475 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 476 ; CHECK-DAG: srar.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 477 ; CHECK-DAG: st.b [[WD]] 478 ; CHECK: .size llvm_mips_srar_b_test 479 ; 480 @llvm_mips_srar_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 481 @llvm_mips_srar_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 482 @llvm_mips_srar_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 483 484 define void @llvm_mips_srar_h_test() nounwind { 485 entry: 486 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_srar_h_ARG1 487 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_srar_h_ARG2 488 %2 = tail call <8 x i16> @llvm.mips.srar.h(<8 x i16> %0, <8 x i16> %1) 489 store <8 x i16> %2, <8 x i16>* @llvm_mips_srar_h_RES 490 ret void 491 } 492 493 declare <8 x i16> @llvm.mips.srar.h(<8 x i16>, <8 x i16>) nounwind 494 495 ; CHECK: llvm_mips_srar_h_test: 496 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_h_ARG1) 497 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_h_ARG2) 498 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 499 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 500 ; CHECK-DAG: srar.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 501 ; CHECK-DAG: st.h [[WD]] 502 ; CHECK: .size llvm_mips_srar_h_test 503 ; 504 @llvm_mips_srar_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 505 @llvm_mips_srar_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 506 @llvm_mips_srar_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 507 508 define void @llvm_mips_srar_w_test() nounwind { 509 entry: 510 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_srar_w_ARG1 511 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_srar_w_ARG2 512 %2 = tail call <4 x i32> @llvm.mips.srar.w(<4 x i32> %0, <4 x i32> %1) 513 store <4 x i32> %2, <4 x i32>* @llvm_mips_srar_w_RES 514 ret void 515 } 516 517 declare <4 x i32> @llvm.mips.srar.w(<4 x i32>, <4 x i32>) nounwind 518 519 ; CHECK: llvm_mips_srar_w_test: 520 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_w_ARG1) 521 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_w_ARG2) 522 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 523 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 524 ; CHECK-DAG: srar.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 525 ; CHECK-DAG: st.w [[WD]] 526 ; CHECK: .size llvm_mips_srar_w_test 527 ; 528 @llvm_mips_srar_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 529 @llvm_mips_srar_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 530 @llvm_mips_srar_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 531 532 define void @llvm_mips_srar_d_test() nounwind { 533 entry: 534 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_srar_d_ARG1 535 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_srar_d_ARG2 536 %2 = tail call <2 x i64> @llvm.mips.srar.d(<2 x i64> %0, <2 x i64> %1) 537 store <2 x i64> %2, <2 x i64>* @llvm_mips_srar_d_RES 538 ret void 539 } 540 541 declare <2 x i64> @llvm.mips.srar.d(<2 x i64>, <2 x i64>) nounwind 542 543 ; CHECK: llvm_mips_srar_d_test: 544 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srar_d_ARG1) 545 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srar_d_ARG2) 546 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 547 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 548 ; CHECK-DAG: srar.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 549 ; CHECK-DAG: st.d [[WD]] 550 ; CHECK: .size llvm_mips_srar_d_test 551 ; 552 @llvm_mips_srl_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 553 @llvm_mips_srl_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 554 @llvm_mips_srl_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 555 556 define void @llvm_mips_srl_b_test() nounwind { 557 entry: 558 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_srl_b_ARG1 559 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_srl_b_ARG2 560 %2 = tail call <16 x i8> @llvm.mips.srl.b(<16 x i8> %0, <16 x i8> %1) 561 store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES 562 ret void 563 } 564 565 declare <16 x i8> @llvm.mips.srl.b(<16 x i8>, <16 x i8>) nounwind 566 567 ; CHECK: llvm_mips_srl_b_test: 568 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1) 569 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2) 570 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 571 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 572 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 573 ; CHECK-DAG: st.b [[WD]] 574 ; CHECK: .size llvm_mips_srl_b_test 575 ; 576 @llvm_mips_srl_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 577 @llvm_mips_srl_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 578 @llvm_mips_srl_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 579 580 define void @llvm_mips_srl_h_test() nounwind { 581 entry: 582 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_srl_h_ARG1 583 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_srl_h_ARG2 584 %2 = tail call <8 x i16> @llvm.mips.srl.h(<8 x i16> %0, <8 x i16> %1) 585 store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES 586 ret void 587 } 588 589 declare <8 x i16> @llvm.mips.srl.h(<8 x i16>, <8 x i16>) nounwind 590 591 ; CHECK: llvm_mips_srl_h_test: 592 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1) 593 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2) 594 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 595 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 596 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 597 ; CHECK-DAG: st.h [[WD]] 598 ; CHECK: .size llvm_mips_srl_h_test 599 ; 600 @llvm_mips_srl_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 601 @llvm_mips_srl_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 602 @llvm_mips_srl_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 603 604 define void @llvm_mips_srl_w_test() nounwind { 605 entry: 606 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_srl_w_ARG1 607 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_srl_w_ARG2 608 %2 = tail call <4 x i32> @llvm.mips.srl.w(<4 x i32> %0, <4 x i32> %1) 609 store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES 610 ret void 611 } 612 613 declare <4 x i32> @llvm.mips.srl.w(<4 x i32>, <4 x i32>) nounwind 614 615 ; CHECK: llvm_mips_srl_w_test: 616 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1) 617 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2) 618 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 619 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 620 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 621 ; CHECK-DAG: st.w [[WD]] 622 ; CHECK: .size llvm_mips_srl_w_test 623 ; 624 @llvm_mips_srl_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 625 @llvm_mips_srl_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 626 @llvm_mips_srl_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 627 628 define void @llvm_mips_srl_d_test() nounwind { 629 entry: 630 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_srl_d_ARG1 631 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_srl_d_ARG2 632 %2 = tail call <2 x i64> @llvm.mips.srl.d(<2 x i64> %0, <2 x i64> %1) 633 store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES 634 ret void 635 } 636 637 declare <2 x i64> @llvm.mips.srl.d(<2 x i64>, <2 x i64>) nounwind 638 639 ; CHECK: llvm_mips_srl_d_test: 640 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1) 641 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2) 642 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 643 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 644 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 645 ; CHECK-DAG: st.d [[WD]] 646 ; CHECK: .size llvm_mips_srl_d_test 647 ; 648 @llvm_mips_srlr_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 649 @llvm_mips_srlr_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 650 @llvm_mips_srlr_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 651 652 define void @llvm_mips_srlr_b_test() nounwind { 653 entry: 654 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_srlr_b_ARG1 655 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_srlr_b_ARG2 656 %2 = tail call <16 x i8> @llvm.mips.srlr.b(<16 x i8> %0, <16 x i8> %1) 657 store <16 x i8> %2, <16 x i8>* @llvm_mips_srlr_b_RES 658 ret void 659 } 660 661 declare <16 x i8> @llvm.mips.srlr.b(<16 x i8>, <16 x i8>) nounwind 662 663 ; CHECK: llvm_mips_srlr_b_test: 664 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG1) 665 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_b_ARG2) 666 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 667 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 668 ; CHECK-DAG: srlr.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 669 ; CHECK-DAG: st.b [[WD]] 670 ; CHECK: .size llvm_mips_srlr_b_test 671 ; 672 @llvm_mips_srlr_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 673 @llvm_mips_srlr_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 674 @llvm_mips_srlr_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 675 676 define void @llvm_mips_srlr_h_test() nounwind { 677 entry: 678 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_srlr_h_ARG1 679 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_srlr_h_ARG2 680 %2 = tail call <8 x i16> @llvm.mips.srlr.h(<8 x i16> %0, <8 x i16> %1) 681 store <8 x i16> %2, <8 x i16>* @llvm_mips_srlr_h_RES 682 ret void 683 } 684 685 declare <8 x i16> @llvm.mips.srlr.h(<8 x i16>, <8 x i16>) nounwind 686 687 ; CHECK: llvm_mips_srlr_h_test: 688 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG1) 689 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_h_ARG2) 690 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 691 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 692 ; CHECK-DAG: srlr.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 693 ; CHECK-DAG: st.h [[WD]] 694 ; CHECK: .size llvm_mips_srlr_h_test 695 ; 696 @llvm_mips_srlr_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 697 @llvm_mips_srlr_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 698 @llvm_mips_srlr_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 699 700 define void @llvm_mips_srlr_w_test() nounwind { 701 entry: 702 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_srlr_w_ARG1 703 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_srlr_w_ARG2 704 %2 = tail call <4 x i32> @llvm.mips.srlr.w(<4 x i32> %0, <4 x i32> %1) 705 store <4 x i32> %2, <4 x i32>* @llvm_mips_srlr_w_RES 706 ret void 707 } 708 709 declare <4 x i32> @llvm.mips.srlr.w(<4 x i32>, <4 x i32>) nounwind 710 711 ; CHECK: llvm_mips_srlr_w_test: 712 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG1) 713 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_w_ARG2) 714 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 715 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 716 ; CHECK-DAG: srlr.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 717 ; CHECK-DAG: st.w [[WD]] 718 ; CHECK: .size llvm_mips_srlr_w_test 719 ; 720 @llvm_mips_srlr_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 721 @llvm_mips_srlr_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 722 @llvm_mips_srlr_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 723 724 define void @llvm_mips_srlr_d_test() nounwind { 725 entry: 726 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_srlr_d_ARG1 727 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_srlr_d_ARG2 728 %2 = tail call <2 x i64> @llvm.mips.srlr.d(<2 x i64> %0, <2 x i64> %1) 729 store <2 x i64> %2, <2 x i64>* @llvm_mips_srlr_d_RES 730 ret void 731 } 732 733 declare <2 x i64> @llvm.mips.srlr.d(<2 x i64>, <2 x i64>) nounwind 734 735 ; CHECK: llvm_mips_srlr_d_test: 736 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG1) 737 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srlr_d_ARG2) 738 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 739 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 740 ; CHECK-DAG: srlr.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 741 ; CHECK-DAG: st.d [[WD]] 742 ; CHECK: .size llvm_mips_srlr_d_test 743 ; 744 745 define void @srl_b_test() nounwind { 746 entry: 747 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_srl_b_ARG1 748 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_srl_b_ARG2 749 %2 = lshr <16 x i8> %0, %1 750 store <16 x i8> %2, <16 x i8>* @llvm_mips_srl_b_RES 751 ret void 752 } 753 754 ; CHECK: srl_b_test: 755 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_b_ARG1) 756 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_b_ARG2) 757 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 758 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 759 ; CHECK-DAG: srl.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 760 ; CHECK-DAG: st.b [[WD]] 761 ; CHECK: .size srl_b_test 762 763 define void @srl_h_test() nounwind { 764 entry: 765 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_srl_h_ARG1 766 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_srl_h_ARG2 767 %2 = lshr <8 x i16> %0, %1 768 store <8 x i16> %2, <8 x i16>* @llvm_mips_srl_h_RES 769 ret void 770 } 771 772 ; CHECK: srl_h_test: 773 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_h_ARG1) 774 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_h_ARG2) 775 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 776 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 777 ; CHECK-DAG: srl.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 778 ; CHECK-DAG: st.h [[WD]] 779 ; CHECK: .size srl_h_test 780 781 define void @srl_w_test() nounwind { 782 entry: 783 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_srl_w_ARG1 784 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_srl_w_ARG2 785 %2 = lshr <4 x i32> %0, %1 786 store <4 x i32> %2, <4 x i32>* @llvm_mips_srl_w_RES 787 ret void 788 } 789 790 ; CHECK: srl_w_test: 791 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_w_ARG1) 792 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_w_ARG2) 793 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 794 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 795 ; CHECK-DAG: srl.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 796 ; CHECK-DAG: st.w [[WD]] 797 ; CHECK: .size srl_w_test 798 799 define void @srl_d_test() nounwind { 800 entry: 801 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_srl_d_ARG1 802 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_srl_d_ARG2 803 %2 = lshr <2 x i64> %0, %1 804 store <2 x i64> %2, <2 x i64>* @llvm_mips_srl_d_RES 805 ret void 806 } 807 808 ; CHECK: srl_d_test: 809 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_srl_d_ARG1) 810 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_srl_d_ARG2) 811 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 812 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 813 ; CHECK-DAG: srl.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 814 ; CHECK-DAG: st.d [[WD]] 815 ; CHECK: .size srl_d_test 816 817 @llvm_mips_subs_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 818 @llvm_mips_subs_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 819 @llvm_mips_subs_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 820 821 define void @llvm_mips_subs_s_b_test() nounwind { 822 entry: 823 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_subs_s_b_ARG1 824 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_subs_s_b_ARG2 825 %2 = tail call <16 x i8> @llvm.mips.subs.s.b(<16 x i8> %0, <16 x i8> %1) 826 store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_s_b_RES 827 ret void 828 } 829 830 declare <16 x i8> @llvm.mips.subs.s.b(<16 x i8>, <16 x i8>) nounwind 831 832 ; CHECK: llvm_mips_subs_s_b_test: 833 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG1) 834 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_b_ARG2) 835 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 836 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 837 ; CHECK-DAG: subs_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 838 ; CHECK-DAG: st.b [[WD]] 839 ; CHECK: .size llvm_mips_subs_s_b_test 840 ; 841 @llvm_mips_subs_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 842 @llvm_mips_subs_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 843 @llvm_mips_subs_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 844 845 define void @llvm_mips_subs_s_h_test() nounwind { 846 entry: 847 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_subs_s_h_ARG1 848 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_subs_s_h_ARG2 849 %2 = tail call <8 x i16> @llvm.mips.subs.s.h(<8 x i16> %0, <8 x i16> %1) 850 store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_s_h_RES 851 ret void 852 } 853 854 declare <8 x i16> @llvm.mips.subs.s.h(<8 x i16>, <8 x i16>) nounwind 855 856 ; CHECK: llvm_mips_subs_s_h_test: 857 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG1) 858 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_h_ARG2) 859 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 860 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 861 ; CHECK-DAG: subs_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 862 ; CHECK-DAG: st.h [[WD]] 863 ; CHECK: .size llvm_mips_subs_s_h_test 864 ; 865 @llvm_mips_subs_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 866 @llvm_mips_subs_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 867 @llvm_mips_subs_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 868 869 define void @llvm_mips_subs_s_w_test() nounwind { 870 entry: 871 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_subs_s_w_ARG1 872 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_subs_s_w_ARG2 873 %2 = tail call <4 x i32> @llvm.mips.subs.s.w(<4 x i32> %0, <4 x i32> %1) 874 store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_s_w_RES 875 ret void 876 } 877 878 declare <4 x i32> @llvm.mips.subs.s.w(<4 x i32>, <4 x i32>) nounwind 879 880 ; CHECK: llvm_mips_subs_s_w_test: 881 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG1) 882 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_w_ARG2) 883 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 884 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 885 ; CHECK-DAG: subs_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 886 ; CHECK-DAG: st.w [[WD]] 887 ; CHECK: .size llvm_mips_subs_s_w_test 888 ; 889 @llvm_mips_subs_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 890 @llvm_mips_subs_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 891 @llvm_mips_subs_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 892 893 define void @llvm_mips_subs_s_d_test() nounwind { 894 entry: 895 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_subs_s_d_ARG1 896 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_subs_s_d_ARG2 897 %2 = tail call <2 x i64> @llvm.mips.subs.s.d(<2 x i64> %0, <2 x i64> %1) 898 store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_s_d_RES 899 ret void 900 } 901 902 declare <2 x i64> @llvm.mips.subs.s.d(<2 x i64>, <2 x i64>) nounwind 903 904 ; CHECK: llvm_mips_subs_s_d_test: 905 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG1) 906 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_s_d_ARG2) 907 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 908 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 909 ; CHECK-DAG: subs_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 910 ; CHECK-DAG: st.d [[WD]] 911 ; CHECK: .size llvm_mips_subs_s_d_test 912 ; 913 @llvm_mips_subs_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 914 @llvm_mips_subs_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 915 @llvm_mips_subs_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 916 917 define void @llvm_mips_subs_u_b_test() nounwind { 918 entry: 919 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_subs_u_b_ARG1 920 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_subs_u_b_ARG2 921 %2 = tail call <16 x i8> @llvm.mips.subs.u.b(<16 x i8> %0, <16 x i8> %1) 922 store <16 x i8> %2, <16 x i8>* @llvm_mips_subs_u_b_RES 923 ret void 924 } 925 926 declare <16 x i8> @llvm.mips.subs.u.b(<16 x i8>, <16 x i8>) nounwind 927 928 ; CHECK: llvm_mips_subs_u_b_test: 929 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG1) 930 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_b_ARG2) 931 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 932 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 933 ; CHECK-DAG: subs_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 934 ; CHECK-DAG: st.b [[WD]] 935 ; CHECK: .size llvm_mips_subs_u_b_test 936 ; 937 @llvm_mips_subs_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 938 @llvm_mips_subs_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 939 @llvm_mips_subs_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 940 941 define void @llvm_mips_subs_u_h_test() nounwind { 942 entry: 943 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_subs_u_h_ARG1 944 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_subs_u_h_ARG2 945 %2 = tail call <8 x i16> @llvm.mips.subs.u.h(<8 x i16> %0, <8 x i16> %1) 946 store <8 x i16> %2, <8 x i16>* @llvm_mips_subs_u_h_RES 947 ret void 948 } 949 950 declare <8 x i16> @llvm.mips.subs.u.h(<8 x i16>, <8 x i16>) nounwind 951 952 ; CHECK: llvm_mips_subs_u_h_test: 953 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG1) 954 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_h_ARG2) 955 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 956 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 957 ; CHECK-DAG: subs_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 958 ; CHECK-DAG: st.h [[WD]] 959 ; CHECK: .size llvm_mips_subs_u_h_test 960 ; 961 @llvm_mips_subs_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 962 @llvm_mips_subs_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 963 @llvm_mips_subs_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 964 965 define void @llvm_mips_subs_u_w_test() nounwind { 966 entry: 967 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_subs_u_w_ARG1 968 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_subs_u_w_ARG2 969 %2 = tail call <4 x i32> @llvm.mips.subs.u.w(<4 x i32> %0, <4 x i32> %1) 970 store <4 x i32> %2, <4 x i32>* @llvm_mips_subs_u_w_RES 971 ret void 972 } 973 974 declare <4 x i32> @llvm.mips.subs.u.w(<4 x i32>, <4 x i32>) nounwind 975 976 ; CHECK: llvm_mips_subs_u_w_test: 977 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG1) 978 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_w_ARG2) 979 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 980 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 981 ; CHECK-DAG: subs_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 982 ; CHECK-DAG: st.w [[WD]] 983 ; CHECK: .size llvm_mips_subs_u_w_test 984 ; 985 @llvm_mips_subs_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 986 @llvm_mips_subs_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 987 @llvm_mips_subs_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 988 989 define void @llvm_mips_subs_u_d_test() nounwind { 990 entry: 991 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_subs_u_d_ARG1 992 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_subs_u_d_ARG2 993 %2 = tail call <2 x i64> @llvm.mips.subs.u.d(<2 x i64> %0, <2 x i64> %1) 994 store <2 x i64> %2, <2 x i64>* @llvm_mips_subs_u_d_RES 995 ret void 996 } 997 998 declare <2 x i64> @llvm.mips.subs.u.d(<2 x i64>, <2 x i64>) nounwind 999 1000 ; CHECK: llvm_mips_subs_u_d_test: 1001 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG1) 1002 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subs_u_d_ARG2) 1003 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1004 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1005 ; CHECK-DAG: subs_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1006 ; CHECK-DAG: st.d [[WD]] 1007 ; CHECK: .size llvm_mips_subs_u_d_test 1008 ; 1009 @llvm_mips_subsus_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 1010 @llvm_mips_subsus_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 1011 @llvm_mips_subsus_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 1012 1013 define void @llvm_mips_subsus_u_b_test() nounwind { 1014 entry: 1015 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_subsus_u_b_ARG1 1016 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_subsus_u_b_ARG2 1017 %2 = tail call <16 x i8> @llvm.mips.subsus.u.b(<16 x i8> %0, <16 x i8> %1) 1018 store <16 x i8> %2, <16 x i8>* @llvm_mips_subsus_u_b_RES 1019 ret void 1020 } 1021 1022 declare <16 x i8> @llvm.mips.subsus.u.b(<16 x i8>, <16 x i8>) nounwind 1023 1024 ; CHECK: llvm_mips_subsus_u_b_test: 1025 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG1) 1026 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_b_ARG2) 1027 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 1028 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 1029 ; CHECK-DAG: subsus_u.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1030 ; CHECK-DAG: st.b [[WD]] 1031 ; CHECK: .size llvm_mips_subsus_u_b_test 1032 ; 1033 @llvm_mips_subsus_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 1034 @llvm_mips_subsus_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 1035 @llvm_mips_subsus_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 1036 1037 define void @llvm_mips_subsus_u_h_test() nounwind { 1038 entry: 1039 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_subsus_u_h_ARG1 1040 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_subsus_u_h_ARG2 1041 %2 = tail call <8 x i16> @llvm.mips.subsus.u.h(<8 x i16> %0, <8 x i16> %1) 1042 store <8 x i16> %2, <8 x i16>* @llvm_mips_subsus_u_h_RES 1043 ret void 1044 } 1045 1046 declare <8 x i16> @llvm.mips.subsus.u.h(<8 x i16>, <8 x i16>) nounwind 1047 1048 ; CHECK: llvm_mips_subsus_u_h_test: 1049 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG1) 1050 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_h_ARG2) 1051 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 1052 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 1053 ; CHECK-DAG: subsus_u.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1054 ; CHECK-DAG: st.h [[WD]] 1055 ; CHECK: .size llvm_mips_subsus_u_h_test 1056 ; 1057 @llvm_mips_subsus_u_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 1058 @llvm_mips_subsus_u_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 1059 @llvm_mips_subsus_u_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 1060 1061 define void @llvm_mips_subsus_u_w_test() nounwind { 1062 entry: 1063 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_subsus_u_w_ARG1 1064 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_subsus_u_w_ARG2 1065 %2 = tail call <4 x i32> @llvm.mips.subsus.u.w(<4 x i32> %0, <4 x i32> %1) 1066 store <4 x i32> %2, <4 x i32>* @llvm_mips_subsus_u_w_RES 1067 ret void 1068 } 1069 1070 declare <4 x i32> @llvm.mips.subsus.u.w(<4 x i32>, <4 x i32>) nounwind 1071 1072 ; CHECK: llvm_mips_subsus_u_w_test: 1073 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG1) 1074 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_w_ARG2) 1075 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 1076 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 1077 ; CHECK-DAG: subsus_u.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1078 ; CHECK-DAG: st.w [[WD]] 1079 ; CHECK: .size llvm_mips_subsus_u_w_test 1080 ; 1081 @llvm_mips_subsus_u_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 1082 @llvm_mips_subsus_u_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 1083 @llvm_mips_subsus_u_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 1084 1085 define void @llvm_mips_subsus_u_d_test() nounwind { 1086 entry: 1087 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_subsus_u_d_ARG1 1088 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_subsus_u_d_ARG2 1089 %2 = tail call <2 x i64> @llvm.mips.subsus.u.d(<2 x i64> %0, <2 x i64> %1) 1090 store <2 x i64> %2, <2 x i64>* @llvm_mips_subsus_u_d_RES 1091 ret void 1092 } 1093 1094 declare <2 x i64> @llvm.mips.subsus.u.d(<2 x i64>, <2 x i64>) nounwind 1095 1096 ; CHECK: llvm_mips_subsus_u_d_test: 1097 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG1) 1098 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsus_u_d_ARG2) 1099 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1100 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1101 ; CHECK-DAG: subsus_u.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1102 ; CHECK-DAG: st.d [[WD]] 1103 ; CHECK: .size llvm_mips_subsus_u_d_test 1104 ; 1105 @llvm_mips_subsuu_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 1106 @llvm_mips_subsuu_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 1107 @llvm_mips_subsuu_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 1108 1109 define void @llvm_mips_subsuu_s_b_test() nounwind { 1110 entry: 1111 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_subsuu_s_b_ARG1 1112 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_subsuu_s_b_ARG2 1113 %2 = tail call <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8> %0, <16 x i8> %1) 1114 store <16 x i8> %2, <16 x i8>* @llvm_mips_subsuu_s_b_RES 1115 ret void 1116 } 1117 1118 declare <16 x i8> @llvm.mips.subsuu.s.b(<16 x i8>, <16 x i8>) nounwind 1119 1120 ; CHECK: llvm_mips_subsuu_s_b_test: 1121 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG1) 1122 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_b_ARG2) 1123 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 1124 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 1125 ; CHECK-DAG: subsuu_s.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1126 ; CHECK-DAG: st.b [[WD]] 1127 ; CHECK: .size llvm_mips_subsuu_s_b_test 1128 ; 1129 @llvm_mips_subsuu_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 1130 @llvm_mips_subsuu_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 1131 @llvm_mips_subsuu_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 1132 1133 define void @llvm_mips_subsuu_s_h_test() nounwind { 1134 entry: 1135 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_subsuu_s_h_ARG1 1136 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_subsuu_s_h_ARG2 1137 %2 = tail call <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16> %0, <8 x i16> %1) 1138 store <8 x i16> %2, <8 x i16>* @llvm_mips_subsuu_s_h_RES 1139 ret void 1140 } 1141 1142 declare <8 x i16> @llvm.mips.subsuu.s.h(<8 x i16>, <8 x i16>) nounwind 1143 1144 ; CHECK: llvm_mips_subsuu_s_h_test: 1145 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG1) 1146 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_h_ARG2) 1147 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 1148 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 1149 ; CHECK-DAG: subsuu_s.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1150 ; CHECK-DAG: st.h [[WD]] 1151 ; CHECK: .size llvm_mips_subsuu_s_h_test 1152 ; 1153 @llvm_mips_subsuu_s_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 1154 @llvm_mips_subsuu_s_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 1155 @llvm_mips_subsuu_s_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 1156 1157 define void @llvm_mips_subsuu_s_w_test() nounwind { 1158 entry: 1159 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_subsuu_s_w_ARG1 1160 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_subsuu_s_w_ARG2 1161 %2 = tail call <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32> %0, <4 x i32> %1) 1162 store <4 x i32> %2, <4 x i32>* @llvm_mips_subsuu_s_w_RES 1163 ret void 1164 } 1165 1166 declare <4 x i32> @llvm.mips.subsuu.s.w(<4 x i32>, <4 x i32>) nounwind 1167 1168 ; CHECK: llvm_mips_subsuu_s_w_test: 1169 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG1) 1170 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_w_ARG2) 1171 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 1172 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 1173 ; CHECK-DAG: subsuu_s.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1174 ; CHECK-DAG: st.w [[WD]] 1175 ; CHECK: .size llvm_mips_subsuu_s_w_test 1176 ; 1177 @llvm_mips_subsuu_s_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 1178 @llvm_mips_subsuu_s_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 1179 @llvm_mips_subsuu_s_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 1180 1181 define void @llvm_mips_subsuu_s_d_test() nounwind { 1182 entry: 1183 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_subsuu_s_d_ARG1 1184 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_subsuu_s_d_ARG2 1185 %2 = tail call <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64> %0, <2 x i64> %1) 1186 store <2 x i64> %2, <2 x i64>* @llvm_mips_subsuu_s_d_RES 1187 ret void 1188 } 1189 1190 declare <2 x i64> @llvm.mips.subsuu.s.d(<2 x i64>, <2 x i64>) nounwind 1191 1192 ; CHECK: llvm_mips_subsuu_s_d_test: 1193 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG1) 1194 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subsuu_s_d_ARG2) 1195 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1196 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1197 ; CHECK-DAG: subsuu_s.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1198 ; CHECK-DAG: st.d [[WD]] 1199 ; CHECK: .size llvm_mips_subsuu_s_d_test 1200 ; 1201 @llvm_mips_subv_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 1202 @llvm_mips_subv_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 1203 @llvm_mips_subv_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 1204 1205 define void @llvm_mips_subv_b_test() nounwind { 1206 entry: 1207 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_subv_b_ARG1 1208 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_subv_b_ARG2 1209 %2 = tail call <16 x i8> @llvm.mips.subv.b(<16 x i8> %0, <16 x i8> %1) 1210 store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES 1211 ret void 1212 } 1213 1214 declare <16 x i8> @llvm.mips.subv.b(<16 x i8>, <16 x i8>) nounwind 1215 1216 ; CHECK: llvm_mips_subv_b_test: 1217 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1) 1218 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2) 1219 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 1220 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 1221 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1222 ; CHECK-DAG: st.b [[WD]] 1223 ; CHECK: .size llvm_mips_subv_b_test 1224 ; 1225 @llvm_mips_subv_h_ARG1 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, align 16 1226 @llvm_mips_subv_h_ARG2 = global <8 x i16> <i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, align 16 1227 @llvm_mips_subv_h_RES = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, align 16 1228 1229 define void @llvm_mips_subv_h_test() nounwind { 1230 entry: 1231 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_subv_h_ARG1 1232 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_subv_h_ARG2 1233 %2 = tail call <8 x i16> @llvm.mips.subv.h(<8 x i16> %0, <8 x i16> %1) 1234 store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES 1235 ret void 1236 } 1237 1238 declare <8 x i16> @llvm.mips.subv.h(<8 x i16>, <8 x i16>) nounwind 1239 1240 ; CHECK: llvm_mips_subv_h_test: 1241 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1) 1242 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2) 1243 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 1244 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 1245 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1246 ; CHECK-DAG: st.h [[WD]] 1247 ; CHECK: .size llvm_mips_subv_h_test 1248 ; 1249 @llvm_mips_subv_w_ARG1 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3>, align 16 1250 @llvm_mips_subv_w_ARG2 = global <4 x i32> <i32 4, i32 5, i32 6, i32 7>, align 16 1251 @llvm_mips_subv_w_RES = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 1252 1253 define void @llvm_mips_subv_w_test() nounwind { 1254 entry: 1255 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_subv_w_ARG1 1256 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_subv_w_ARG2 1257 %2 = tail call <4 x i32> @llvm.mips.subv.w(<4 x i32> %0, <4 x i32> %1) 1258 store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES 1259 ret void 1260 } 1261 1262 declare <4 x i32> @llvm.mips.subv.w(<4 x i32>, <4 x i32>) nounwind 1263 1264 ; CHECK: llvm_mips_subv_w_test: 1265 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1) 1266 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2) 1267 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 1268 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 1269 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1270 ; CHECK-DAG: st.w [[WD]] 1271 ; CHECK: .size llvm_mips_subv_w_test 1272 ; 1273 @llvm_mips_subv_d_ARG1 = global <2 x i64> <i64 0, i64 1>, align 16 1274 @llvm_mips_subv_d_ARG2 = global <2 x i64> <i64 2, i64 3>, align 16 1275 @llvm_mips_subv_d_RES = global <2 x i64> <i64 0, i64 0>, align 16 1276 1277 define void @llvm_mips_subv_d_test() nounwind { 1278 entry: 1279 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_subv_d_ARG1 1280 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_subv_d_ARG2 1281 %2 = tail call <2 x i64> @llvm.mips.subv.d(<2 x i64> %0, <2 x i64> %1) 1282 store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES 1283 ret void 1284 } 1285 1286 declare <2 x i64> @llvm.mips.subv.d(<2 x i64>, <2 x i64>) nounwind 1287 1288 ; CHECK: llvm_mips_subv_d_test: 1289 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1) 1290 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2) 1291 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1292 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1293 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1294 ; CHECK-DAG: st.d [[WD]] 1295 ; CHECK: .size llvm_mips_subv_d_test 1296 ; 1297 1298 define void @subv_b_test() nounwind { 1299 entry: 1300 %0 = load <16 x i8>, <16 x i8>* @llvm_mips_subv_b_ARG1 1301 %1 = load <16 x i8>, <16 x i8>* @llvm_mips_subv_b_ARG2 1302 %2 = sub <16 x i8> %0, %1 1303 store <16 x i8> %2, <16 x i8>* @llvm_mips_subv_b_RES 1304 ret void 1305 } 1306 1307 ; CHECK: subv_b_test: 1308 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_b_ARG1) 1309 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_b_ARG2) 1310 ; CHECK-DAG: ld.b [[WS:\$w[0-9]+]], 0([[R1]]) 1311 ; CHECK-DAG: ld.b [[WT:\$w[0-9]+]], 0([[R2]]) 1312 ; CHECK-DAG: subv.b [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1313 ; CHECK-DAG: st.b [[WD]] 1314 ; CHECK: .size subv_b_test 1315 1316 define void @subv_h_test() nounwind { 1317 entry: 1318 %0 = load <8 x i16>, <8 x i16>* @llvm_mips_subv_h_ARG1 1319 %1 = load <8 x i16>, <8 x i16>* @llvm_mips_subv_h_ARG2 1320 %2 = sub <8 x i16> %0, %1 1321 store <8 x i16> %2, <8 x i16>* @llvm_mips_subv_h_RES 1322 ret void 1323 } 1324 1325 ; CHECK: subv_h_test: 1326 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_h_ARG1) 1327 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_h_ARG2) 1328 ; CHECK-DAG: ld.h [[WS:\$w[0-9]+]], 0([[R1]]) 1329 ; CHECK-DAG: ld.h [[WT:\$w[0-9]+]], 0([[R2]]) 1330 ; CHECK-DAG: subv.h [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1331 ; CHECK-DAG: st.h [[WD]] 1332 ; CHECK: .size subv_h_test 1333 1334 define void @subv_w_test() nounwind { 1335 entry: 1336 %0 = load <4 x i32>, <4 x i32>* @llvm_mips_subv_w_ARG1 1337 %1 = load <4 x i32>, <4 x i32>* @llvm_mips_subv_w_ARG2 1338 %2 = sub <4 x i32> %0, %1 1339 store <4 x i32> %2, <4 x i32>* @llvm_mips_subv_w_RES 1340 ret void 1341 } 1342 1343 ; CHECK: subv_w_test: 1344 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_w_ARG1) 1345 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_w_ARG2) 1346 ; CHECK-DAG: ld.w [[WS:\$w[0-9]+]], 0([[R1]]) 1347 ; CHECK-DAG: ld.w [[WT:\$w[0-9]+]], 0([[R2]]) 1348 ; CHECK-DAG: subv.w [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1349 ; CHECK-DAG: st.w [[WD]] 1350 ; CHECK: .size subv_w_test 1351 1352 define void @subv_d_test() nounwind { 1353 entry: 1354 %0 = load <2 x i64>, <2 x i64>* @llvm_mips_subv_d_ARG1 1355 %1 = load <2 x i64>, <2 x i64>* @llvm_mips_subv_d_ARG2 1356 %2 = sub <2 x i64> %0, %1 1357 store <2 x i64> %2, <2 x i64>* @llvm_mips_subv_d_RES 1358 ret void 1359 } 1360 1361 ; CHECK: subv_d_test: 1362 ; CHECK-DAG: lw [[R1:\$[0-9]+]], %got(llvm_mips_subv_d_ARG1) 1363 ; CHECK-DAG: lw [[R2:\$[0-9]+]], %got(llvm_mips_subv_d_ARG2) 1364 ; CHECK-DAG: ld.d [[WS:\$w[0-9]+]], 0([[R1]]) 1365 ; CHECK-DAG: ld.d [[WT:\$w[0-9]+]], 0([[R2]]) 1366 ; CHECK-DAG: subv.d [[WD:\$w[0-9]+]], [[WS]], [[WT]] 1367 ; CHECK-DAG: st.d [[WD]] 1368 ; CHECK: .size subv_d_test 1369 ; 1370