1# RUN: llc -run-pass ppc-mi-peepholes -ppc-convert-rr-to-ri %s -o - -verify-machineinstrs | FileCheck %s 2# RUN: llc -start-after ppc-mi-peepholes -ppc-late-peephole %s -o - -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-LATE 3 4--- | 5 ; ModuleID = 'convert-rr-to-ri-instrs.ll' 6 source_filename = "convert-rr-to-ri-instrs.c" 7 target datalayout = "e-m:e-i64:64-n32:64" 8 target triple = "powerpc64le-unknown-linux-gnu" 9 10 ; Function Attrs: norecurse nounwind readnone 11 define signext i32 @testADD4(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 12 entry: 13 %add = add nsw i32 %a, 33 14 %add1 = add nsw i32 %add, %b 15 ret i32 %add1 16 } 17 18 ; Function Attrs: norecurse nounwind readnone 19 define i64 @testADD8(i64 %a, i64 %b) local_unnamed_addr #0 { 20 entry: 21 %add = add nsw i64 %a, 33 22 %add1 = add nsw i64 %add, %b 23 ret i64 %add1 24 } 25 26 ; Function Attrs: norecurse nounwind readnone 27 define i128 @testADDC(i128 %a, i128 %b) local_unnamed_addr #0 { 28 entry: 29 %add = add nsw i128 %b, %a 30 ret i128 %add 31 } 32 33 ; Function Attrs: norecurse nounwind readnone 34 define i128 @testADDC8(i128 %a, i128 %b) local_unnamed_addr #0 { 35 entry: 36 %add = add nsw i128 %b, %a 37 ret i128 %add 38 } 39 40 ; Function Attrs: norecurse nounwind readnone 41 define i64 @testADDCo(i64 %a, i64 %b) local_unnamed_addr #0 { 42 entry: 43 %add = add nsw i64 %b, %a 44 %cmp = icmp eq i64 %add, 0 45 %neg = sext i1 %cmp to i64 46 %retval.0 = xor i64 %add, %neg 47 ret i64 %retval.0 48 } 49 50 ; Function Attrs: norecurse nounwind readnone 51 define signext i32 @testADDI(i32 signext %a) local_unnamed_addr #0 { 52 entry: 53 %add = add nsw i32 %a, 44 54 ret i32 %add 55 } 56 57 ; Function Attrs: norecurse nounwind readnone 58 define signext i32 @testADDI8(i32 signext %a) local_unnamed_addr #0 { 59 entry: 60 %add = add nsw i32 %a, 44 61 ret i32 %add 62 } 63 64 ; Function Attrs: norecurse nounwind readnone 65 define signext i32 @testANDo(i64 %a, i64 %b) local_unnamed_addr #0 { 66 entry: 67 %and = and i64 %b, %a 68 %tobool = icmp eq i64 %and, 0 69 %cond = select i1 %tobool, i64 %b, i64 %a 70 %conv = trunc i64 %cond to i32 71 ret i32 %conv 72 } 73 74 ; Function Attrs: norecurse nounwind readnone 75 define i64 @testAND8o(i64 %a, i64 %b) local_unnamed_addr #0 { 76 entry: 77 %and = and i64 %b, %a 78 %tobool = icmp eq i64 %and, 0 79 %cond = select i1 %tobool, i64 %b, i64 %a 80 ret i64 %cond 81 } 82 83 ; Function Attrs: norecurse nounwind readnone 84 define i64 @testCMPD(i64 %a, i64 %b) local_unnamed_addr #0 { 85 entry: 86 %cmp = icmp sgt i64 %a, %b 87 %add = select i1 %cmp, i64 0, i64 %a 88 %cond = add nsw i64 %add, %b 89 ret i64 %cond 90 } 91 92 ; Function Attrs: norecurse nounwind readnone 93 define i64 @testCMPDI(i64 %a, i64 %b) local_unnamed_addr #0 { 94 entry: 95 %cmp = icmp sgt i64 %a, 87 96 %add = select i1 %cmp, i64 0, i64 %a 97 %cond = add nsw i64 %add, %b 98 ret i64 %cond 99 } 100 101 ; Function Attrs: norecurse nounwind readnone 102 define i64 @testCMPDI_F(i64 %a, i64 %b) local_unnamed_addr #0 { 103 entry: 104 %cmp = icmp sgt i64 %a, 87 105 %add = select i1 %cmp, i64 0, i64 %a 106 %cond = add nsw i64 %add, %b 107 ret i64 %cond 108 } 109 110 ; Function Attrs: norecurse nounwind readnone 111 define i64 @testCMPLD(i64 %a, i64 %b) local_unnamed_addr #0 { 112 entry: 113 %cmp = icmp ugt i64 %a, %b 114 %add = select i1 %cmp, i64 0, i64 %a 115 %cond = add i64 %add, %b 116 ret i64 %cond 117 } 118 119 ; Function Attrs: norecurse nounwind readnone 120 define i64 @testCMPLDI(i64 %a, i64 %b) local_unnamed_addr #0 { 121 entry: 122 %cmp = icmp ugt i64 %a, 87 123 %add = select i1 %cmp, i64 0, i64 %a 124 %cond = add i64 %add, %b 125 ret i64 %cond 126 } 127 128 ; Function Attrs: norecurse nounwind readnone 129 define signext i32 @testCMPW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 130 entry: 131 %cmp = icmp sgt i32 %a, %b 132 %add = select i1 %cmp, i32 0, i32 %a 133 %cond = add nsw i32 %add, %b 134 ret i32 %cond 135 } 136 137 ; Function Attrs: norecurse nounwind readnone 138 define signext i32 @testCMPWI(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 139 entry: 140 %cmp = icmp sgt i32 %a, 87 141 %add = select i1 %cmp, i32 0, i32 %a 142 %cond = add nsw i32 %add, %b 143 ret i32 %cond 144 } 145 146 ; Function Attrs: norecurse nounwind readnone 147 define zeroext i32 @testCMPLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 148 entry: 149 %cmp = icmp ugt i32 %a, %b 150 %add = select i1 %cmp, i32 0, i32 %a 151 %cond = add i32 %add, %b 152 ret i32 %cond 153 } 154 155 ; Function Attrs: norecurse nounwind readnone 156 define zeroext i32 @testCMPLWI(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 157 entry: 158 %cmp = icmp ugt i32 %a, 87 159 %add = select i1 %cmp, i32 0, i32 %a 160 %cond = add i32 %add, %b 161 ret i32 %cond 162 } 163 164 ; Function Attrs: norecurse nounwind readonly 165 define zeroext i8 @testLBZUX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 166 entry: 167 %add = add i32 %idx, 1 168 %idxprom = zext i32 %add to i64 169 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom 170 %0 = load i8, i8* %arrayidx, align 1, !tbaa !3 171 %conv = zext i8 %0 to i32 172 %add1 = add i32 %idx, 2 173 %idxprom2 = zext i32 %add1 to i64 174 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2 175 %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3 176 %conv4 = zext i8 %1 to i32 177 %add5 = add nuw nsw i32 %conv4, %conv 178 %conv6 = trunc i32 %add5 to i8 179 ret i8 %conv6 180 } 181 182 ; Function Attrs: norecurse nounwind readonly 183 define zeroext i8 @testLBZX(i8* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 184 entry: 185 %add = add i32 %idx, 1 186 %idxprom = zext i32 %add to i64 187 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom 188 %0 = load i8, i8* %arrayidx, align 1, !tbaa !3 189 %conv = zext i8 %0 to i32 190 %add1 = add i32 %idx, 2 191 %idxprom2 = zext i32 %add1 to i64 192 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2 193 %1 = load i8, i8* %arrayidx3, align 1, !tbaa !3 194 %conv4 = zext i8 %1 to i32 195 %add5 = add nuw nsw i32 %conv4, %conv 196 %conv6 = trunc i32 %add5 to i8 197 ret i8 %conv6 198 } 199 200 ; Function Attrs: norecurse nounwind readonly 201 define zeroext i16 @testLHZUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 202 entry: 203 %add = add i32 %idx, 1 204 %idxprom = zext i32 %add to i64 205 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom 206 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6 207 %conv = zext i16 %0 to i32 208 %add1 = add i32 %idx, 2 209 %idxprom2 = zext i32 %add1 to i64 210 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2 211 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6 212 %conv4 = zext i16 %1 to i32 213 %add5 = add nuw nsw i32 %conv4, %conv 214 %conv6 = trunc i32 %add5 to i16 215 ret i16 %conv6 216 } 217 218 ; Function Attrs: norecurse nounwind readonly 219 define zeroext i16 @testLHZX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 220 entry: 221 %add = add i32 %idx, 1 222 %idxprom = zext i32 %add to i64 223 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom 224 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6 225 %conv = zext i16 %0 to i32 226 %add1 = add i32 %idx, 2 227 %idxprom2 = zext i32 %add1 to i64 228 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2 229 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6 230 %conv4 = zext i16 %1 to i32 231 %add5 = add nuw nsw i32 %conv4, %conv 232 %conv6 = trunc i32 %add5 to i16 233 ret i16 %conv6 234 } 235 236 ; Function Attrs: norecurse nounwind readonly 237 define signext i16 @testLHAUX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 238 entry: 239 %add = add i32 %idx, 1 240 %idxprom = zext i32 %add to i64 241 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom 242 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6 243 %conv9 = zext i16 %0 to i32 244 %add1 = add i32 %idx, 2 245 %idxprom2 = zext i32 %add1 to i64 246 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2 247 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6 248 %conv410 = zext i16 %1 to i32 249 %add5 = add nuw nsw i32 %conv410, %conv9 250 %conv6 = trunc i32 %add5 to i16 251 ret i16 %conv6 252 } 253 254 ; Function Attrs: norecurse nounwind readonly 255 define signext i16 @testLHAX(i16* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 256 entry: 257 %add = add i32 %idx, 1 258 %idxprom = zext i32 %add to i64 259 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom 260 %0 = load i16, i16* %arrayidx, align 2, !tbaa !6 261 %conv9 = zext i16 %0 to i32 262 %add1 = add i32 %idx, 2 263 %idxprom2 = zext i32 %add1 to i64 264 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2 265 %1 = load i16, i16* %arrayidx3, align 2, !tbaa !6 266 %conv410 = zext i16 %1 to i32 267 %add5 = add nuw nsw i32 %conv410, %conv9 268 %conv6 = trunc i32 %add5 to i16 269 ret i16 %conv6 270 } 271 272 ; Function Attrs: norecurse nounwind readonly 273 define zeroext i32 @testLWZUX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 274 entry: 275 %add = add i32 %idx, 1 276 %idxprom = zext i32 %add to i64 277 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom 278 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8 279 %add1 = add i32 %idx, 2 280 %idxprom2 = zext i32 %add1 to i64 281 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2 282 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8 283 %add4 = add i32 %1, %0 284 ret i32 %add4 285 } 286 287 ; Function Attrs: norecurse nounwind readonly 288 define zeroext i32 @testLWZX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 289 entry: 290 %add = add i32 %idx, 1 291 %idxprom = zext i32 %add to i64 292 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom 293 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8 294 %add1 = add i32 %idx, 2 295 %idxprom2 = zext i32 %add1 to i64 296 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2 297 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8 298 %add4 = add i32 %1, %0 299 ret i32 %add4 300 } 301 302 ; Function Attrs: norecurse nounwind readonly 303 define i64 @testLWAX(i32* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 304 entry: 305 %add = add i32 %idx, 1 306 %idxprom = zext i32 %add to i64 307 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom 308 %0 = load i32, i32* %arrayidx, align 4, !tbaa !8 309 %conv = sext i32 %0 to i64 310 %add1 = add i32 %idx, 2 311 %idxprom2 = zext i32 %add1 to i64 312 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2 313 %1 = load i32, i32* %arrayidx3, align 4, !tbaa !8 314 %conv4 = sext i32 %1 to i64 315 %add5 = add nsw i64 %conv4, %conv 316 ret i64 %add5 317 } 318 319 ; Function Attrs: norecurse nounwind readonly 320 define i64 @testLDUX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 321 entry: 322 %add = add i32 %idx, 1 323 %idxprom = zext i32 %add to i64 324 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom 325 %0 = load i64, i64* %arrayidx, align 8, !tbaa !10 326 %add1 = add i32 %idx, 2 327 %idxprom2 = zext i32 %add1 to i64 328 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2 329 %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10 330 %add4 = add i64 %1, %0 331 ret i64 %add4 332 } 333 334 ; Function Attrs: norecurse nounwind readonly 335 define i64 @testLDX(i64* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 336 entry: 337 %add = add i32 %idx, 1 338 %idxprom = zext i32 %add to i64 339 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom 340 %0 = load i64, i64* %arrayidx, align 8, !tbaa !10 341 %add1 = add i32 %idx, 2 342 %idxprom2 = zext i32 %add1 to i64 343 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2 344 %1 = load i64, i64* %arrayidx3, align 8, !tbaa !10 345 %add4 = add i64 %1, %0 346 ret i64 %add4 347 } 348 349 ; Function Attrs: norecurse nounwind readonly 350 define double @testLFDUX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 { 351 entry: 352 %add = add i32 %idx, 1 353 %idxprom = zext i32 %add to i64 354 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom 355 %0 = load double, double* %arrayidx, align 8, !tbaa !12 356 %add1 = add i32 %idx, 2 357 %idxprom2 = zext i32 %add1 to i64 358 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2 359 %1 = load double, double* %arrayidx3, align 8, !tbaa !12 360 %add4 = fadd double %0, %1 361 ret double %add4 362 } 363 364 ; Function Attrs: norecurse nounwind readonly 365 define double @testLFDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 { 366 entry: 367 %add = add i32 %idx, 1 368 %idxprom = zext i32 %add to i64 369 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom 370 %0 = load double, double* %arrayidx, align 8, !tbaa !12 371 %add1 = add i32 %idx, 2 372 %idxprom2 = zext i32 %add1 to i64 373 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2 374 %1 = load double, double* %arrayidx3, align 8, !tbaa !12 375 %add4 = fadd double %0, %1 376 ret double %add4 377 } 378 379 ; Function Attrs: norecurse nounwind readonly 380 define <4 x float> @testLFSUX(float* nocapture readonly %ptr, i32 signext %idx) local_unnamed_addr #2 { 381 entry: 382 %idxprom = sext i32 %idx to i64 383 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom 384 %0 = load float, float* %arrayidx, align 4, !tbaa !14 385 %conv = fptoui float %0 to i32 386 %vecinit = insertelement <4 x i32> undef, i32 %conv, i32 0 387 %1 = bitcast float* %ptr to i8* 388 %2 = shl i64 %idxprom, 2 389 %uglygep = getelementptr i8, i8* %1, i64 %2 390 %uglygep2 = getelementptr i8, i8* %uglygep, i64 4 391 %3 = bitcast i8* %uglygep2 to float* 392 %4 = load float, float* %3, align 4, !tbaa !14 393 %conv3 = fptoui float %4 to i32 394 %vecinit4 = insertelement <4 x i32> %vecinit, i32 %conv3, i32 1 395 %uglygep5 = getelementptr i8, i8* %uglygep, i64 8 396 %5 = bitcast i8* %uglygep5 to float* 397 %6 = load float, float* %5, align 4, !tbaa !14 398 %conv8 = fptoui float %6 to i32 399 %vecinit9 = insertelement <4 x i32> %vecinit4, i32 %conv8, i32 2 400 %uglygep8 = getelementptr i8, i8* %uglygep, i64 12 401 %7 = bitcast i8* %uglygep8 to float* 402 %8 = load float, float* %7, align 4, !tbaa !14 403 %conv13 = fptoui float %8 to i32 404 %vecinit14 = insertelement <4 x i32> %vecinit9, i32 %conv13, i32 3 405 %9 = bitcast <4 x i32> %vecinit14 to <4 x float> 406 ret <4 x float> %9 407 } 408 409 ; Function Attrs: norecurse nounwind readonly 410 define float @testLFSX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #2 { 411 entry: 412 %add = add i32 %idx, 1 413 %idxprom = zext i32 %add to i64 414 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom 415 %0 = load float, float* %arrayidx, align 4, !tbaa !14 416 %add1 = add i32 %idx, 2 417 %idxprom2 = zext i32 %add1 to i64 418 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2 419 %1 = load float, float* %arrayidx3, align 4, !tbaa !14 420 %add4 = fadd float %0, %1 421 ret float %add4 422 } 423 424 ; Function Attrs: norecurse nounwind readonly 425 define double @testLXSDX(double* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 426 entry: 427 %add = add i32 %idx, 1 428 %idxprom = zext i32 %add to i64 429 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom 430 %0 = load double, double* %arrayidx, align 8, !tbaa !12 431 %add1 = add i32 %idx, 2 432 %idxprom2 = zext i32 %add1 to i64 433 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2 434 %1 = load double, double* %arrayidx3, align 8, !tbaa !12 435 %add4 = fadd double %0, %1 436 ret double %add4 437 } 438 439 ; Function Attrs: norecurse nounwind readonly 440 define float @testLXSSPX(float* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 441 entry: 442 %add = add i32 %idx, 1 443 %idxprom = zext i32 %add to i64 444 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom 445 %0 = load float, float* %arrayidx, align 4, !tbaa !14 446 %add1 = add i32 %idx, 2 447 %idxprom2 = zext i32 %add1 to i64 448 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2 449 %1 = load float, float* %arrayidx3, align 4, !tbaa !14 450 %add4 = fadd float %0, %1 451 ret float %add4 452 } 453 454 ; Function Attrs: norecurse nounwind readonly 455 define <4 x i32> @testLXVX(<4 x i32>* nocapture readonly %ptr, i32 zeroext %idx) local_unnamed_addr #1 { 456 entry: 457 %add = add i32 %idx, 1 458 %idxprom = zext i32 %add to i64 459 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom 460 %0 = load <4 x i32>, <4 x i32>* %arrayidx, align 16, !tbaa !3 461 %add1 = add i32 %idx, 2 462 %idxprom2 = zext i32 %add1 to i64 463 %arrayidx3 = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom2 464 %1 = load <4 x i32>, <4 x i32>* %arrayidx3, align 16, !tbaa !3 465 %add4 = add <4 x i32> %1, %0 466 ret <4 x i32> %add4 467 } 468 469 ; Function Attrs: norecurse nounwind readnone 470 define signext i32 @testOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 471 entry: 472 %or = or i32 %b, %a 473 ret i32 %or 474 } 475 476 ; Function Attrs: norecurse nounwind readnone 477 define i64 @testOR8(i64 %a, i64 %b) local_unnamed_addr #0 { 478 entry: 479 %or = or i64 %b, %a 480 ret i64 %or 481 } 482 483 ; Function Attrs: norecurse nounwind readnone 484 define signext i32 @testORI(i32 signext %a) local_unnamed_addr #0 { 485 entry: 486 %or = or i32 %a, 88 487 ret i32 %or 488 } 489 490 ; Function Attrs: norecurse nounwind readnone 491 define i64 @testORI8(i64 %a) local_unnamed_addr #0 { 492 entry: 493 %or = or i64 %a, 99 494 ret i64 %or 495 } 496 497 ; Function Attrs: norecurse nounwind readnone 498 define i64 @testRLDCL(i64 %a, i64 %b) local_unnamed_addr #0 { 499 entry: 500 %and = and i64 %b, 63 501 %shl = shl i64 %a, %and 502 %sub = sub nsw i64 64, %and 503 %shr = lshr i64 %a, %sub 504 %or = or i64 %shr, %shl 505 ret i64 %or 506 } 507 508 ; Function Attrs: norecurse nounwind readnone 509 define i64 @testRLDCLo(i64 %a, i64 %b) local_unnamed_addr #0 { 510 entry: 511 %and = and i64 %b, 63 512 %shl = shl i64 %a, %and 513 %sub = sub nsw i64 64, %and 514 %shr = lshr i64 %a, %sub 515 %or = or i64 %shr, %shl 516 %tobool = icmp eq i64 %or, 0 517 %cond = select i1 %tobool, i64 %and, i64 %a 518 ret i64 %cond 519 } 520 521 ; Function Attrs: norecurse nounwind readnone 522 define i64 @testRLDCR(i64 %a, i64 %b) local_unnamed_addr #0 { 523 entry: 524 %and = and i64 %b, 63 525 %shl = shl i64 %a, %and 526 %sub = sub nsw i64 64, %and 527 %shr = lshr i64 %a, %sub 528 %or = or i64 %shr, %shl 529 ret i64 %or 530 } 531 532 ; Function Attrs: norecurse nounwind readnone 533 define i64 @testRLDCRo(i64 %a, i64 %b) local_unnamed_addr #0 { 534 entry: 535 %and = and i64 %b, 63 536 %shl = shl i64 %a, %and 537 %sub = sub nsw i64 64, %and 538 %shr = lshr i64 %a, %sub 539 %or = or i64 %shr, %shl 540 %tobool = icmp eq i64 %or, 0 541 %cond = select i1 %tobool, i64 %and, i64 %a 542 ret i64 %cond 543 } 544 545 ; Function Attrs: norecurse nounwind readnone 546 define i64 @testRLDICL(i64 %a) local_unnamed_addr #0 { 547 entry: 548 %shr = lshr i64 %a, 11 549 %and = and i64 %shr, 16777215 550 ret i64 %and 551 } 552 553 ; Function Attrs: norecurse nounwind readnone 554 define i64 @testRLDICLo(i64 %a, i64 %b) local_unnamed_addr #0 { 555 entry: 556 %shr = lshr i64 %a, 11 557 %and = and i64 %shr, 16777215 558 %tobool = icmp eq i64 %and, 0 559 %cond = select i1 %tobool, i64 %b, i64 %and 560 ret i64 %cond 561 } 562 563 ; Function Attrs: norecurse nounwind readnone 564 define i64 @testRLDICLo2(i64 %a, i64 %b) local_unnamed_addr #0 { 565 entry: 566 %shr = lshr i64 %a, 11 567 %and = and i64 %shr, 16777215 568 %tobool = icmp eq i64 %and, 0 569 %cond = select i1 %tobool, i64 %b, i64 %and 570 ret i64 %cond 571 } 572 573 ; Function Attrs: norecurse nounwind readnone 574 define i64 @testRLDICLo3(i64 %a, i64 %b) local_unnamed_addr #0 { 575 entry: 576 %shr = lshr i64 %a, 11 577 %and = and i64 %shr, 16777215 578 %tobool = icmp eq i64 %and, 0 579 %cond = select i1 %tobool, i64 %b, i64 %and 580 ret i64 %cond 581 } 582 583 ; Function Attrs: norecurse nounwind readnone 584 define zeroext i32 @testRLWINM(i32 zeroext %a) local_unnamed_addr #0 { 585 entry: 586 %shl = shl i32 %a, 4 587 %and = and i32 %shl, 4080 588 ret i32 %and 589 } 590 591 ; Function Attrs: norecurse nounwind readnone 592 define zeroext i32 @testRLWINMFullReg(i32 zeroext %a) local_unnamed_addr #0 { 593 entry: 594 %shl = shl i32 %a, 4 595 %and = and i32 %shl, 4080 596 ret i32 %and 597 } 598 599 ; Function Attrs: norecurse nounwind readnone 600 define zeroext i32 @testRLWINMFullRegOutOfRange(i32 zeroext %a) local_unnamed_addr #0 { 601 entry: 602 %shl = shl i32 %a, 4 603 %and = and i32 %shl, 4080 604 ret i32 %and 605 } 606 607 ; Function Attrs: norecurse nounwind readnone 608 define i64 @testRLWINM8(i64 %a) local_unnamed_addr #0 { 609 entry: 610 %shl = shl i64 %a, 4 611 %and = and i64 %shl, 4080 612 ret i64 %and 613 } 614 615 ; Function Attrs: norecurse nounwind readnone 616 define zeroext i32 @testRLWINMo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 617 entry: 618 %and = and i32 %a, 255 619 %tobool = icmp eq i32 %and, 0 620 %cond = select i1 %tobool, i32 %b, i32 %a 621 ret i32 %cond 622 } 623 624 ; Function Attrs: norecurse nounwind readnone 625 define zeroext i32 @testRLWINMo2(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 626 entry: 627 %and = and i32 %a, 255 628 %tobool = icmp eq i32 %and, 0 629 %cond = select i1 %tobool, i32 %b, i32 %a 630 ret i32 %cond 631 } 632 633 ; Function Attrs: norecurse nounwind readnone 634 define i64 @testRLWINM8o(i64 %a, i64 %b) local_unnamed_addr #0 { 635 entry: 636 %a.tr = trunc i64 %a to i32 637 %0 = shl i32 %a.tr, 4 638 %conv = and i32 %0, 4080 639 %tobool = icmp eq i32 %conv, 0 640 %conv1 = zext i32 %conv to i64 641 %cond = select i1 %tobool, i64 %b, i64 %conv1 642 ret i64 %cond 643 } 644 645 ; Function Attrs: norecurse nounwind readnone 646 define i64 @testSLD(i64 %a, i64 %b) local_unnamed_addr #0 { 647 entry: 648 %shl = shl i64 %a, %b 649 ret i64 %shl 650 } 651 652 ; Function Attrs: norecurse nounwind readnone 653 define i64 @testSLDo(i64 %a, i64 %b) local_unnamed_addr #0 { 654 entry: 655 %shl = shl i64 %a, %b 656 %tobool = icmp eq i64 %shl, 0 657 %cond = select i1 %tobool, i64 %b, i64 %a 658 ret i64 %cond 659 } 660 661 ; Function Attrs: norecurse nounwind readnone 662 define i64 @testSRD(i64 %a, i64 %b) local_unnamed_addr #0 { 663 entry: 664 %shr = lshr i64 %a, %b 665 ret i64 %shr 666 } 667 668 ; Function Attrs: norecurse nounwind readnone 669 define i64 @testSRDo(i64 %a, i64 %b) local_unnamed_addr #0 { 670 entry: 671 %shr = lshr i64 %a, %b 672 %tobool = icmp eq i64 %shr, 0 673 %cond = select i1 %tobool, i64 %b, i64 %a 674 ret i64 %cond 675 } 676 677 ; Function Attrs: norecurse nounwind readnone 678 define zeroext i32 @testSLW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 679 entry: 680 %shl = shl i32 %a, %b 681 ret i32 %shl 682 } 683 684 ; Function Attrs: norecurse nounwind readnone 685 define zeroext i32 @testSLWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 686 entry: 687 %shl = shl i32 %a, %b 688 %tobool = icmp eq i32 %shl, 0 689 %cond = select i1 %tobool, i32 %b, i32 %a 690 ret i32 %cond 691 } 692 693 ; Function Attrs: norecurse nounwind readnone 694 define zeroext i32 @testSRW(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 695 entry: 696 %shr = lshr i32 %a, %b 697 ret i32 %shr 698 } 699 700 ; Function Attrs: norecurse nounwind readnone 701 define zeroext i32 @testSRWo(i32 zeroext %a, i32 zeroext %b) local_unnamed_addr #0 { 702 entry: 703 %shr = lshr i32 %a, %b 704 %tobool = icmp eq i32 %shr, 0 705 %cond = select i1 %tobool, i32 %b, i32 %a 706 ret i32 %cond 707 } 708 709 ; Function Attrs: norecurse nounwind readnone 710 define signext i32 @testSRAW(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 711 entry: 712 %shr = ashr i32 %a, %b 713 ret i32 %shr 714 } 715 716 ; Function Attrs: norecurse nounwind readnone 717 define signext i32 @testSRAWo(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 718 entry: 719 %shr = ashr i32 %a, %b 720 %tobool = icmp eq i32 %shr, 0 721 %cond = select i1 %tobool, i32 %b, i32 %shr 722 ret i32 %cond 723 } 724 725 ; Function Attrs: norecurse nounwind readnone 726 define i64 @testSRAD(i64 %a, i64 %b) local_unnamed_addr #0 { 727 entry: 728 %shr = ashr i64 %a, %b 729 ret i64 %shr 730 } 731 732 ; Function Attrs: norecurse nounwind readnone 733 define i64 @testSRADo(i64 %a, i64 %b) local_unnamed_addr #0 { 734 entry: 735 %shr = ashr i64 %a, %b 736 %tobool = icmp eq i64 %shr, 0 737 %cond = select i1 %tobool, i64 %b, i64 %shr 738 ret i64 %cond 739 } 740 741 ; Function Attrs: norecurse nounwind 742 define void @testSTBUX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 { 743 entry: 744 %add = add i32 %idx, 1 745 %idxprom = zext i32 %add to i64 746 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom 747 store i8 %a, i8* %arrayidx, align 1, !tbaa !3 748 %add1 = add i32 %idx, 2 749 %idxprom2 = zext i32 %add1 to i64 750 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2 751 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3 752 ret void 753 } 754 755 ; Function Attrs: norecurse nounwind 756 define void @testSTBX(i8* nocapture %ptr, i8 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 { 757 entry: 758 %add = add i32 %idx, 1 759 %idxprom = zext i32 %add to i64 760 %arrayidx = getelementptr inbounds i8, i8* %ptr, i64 %idxprom 761 store i8 %a, i8* %arrayidx, align 1, !tbaa !3 762 %add1 = add i32 %idx, 2 763 %idxprom2 = zext i32 %add1 to i64 764 %arrayidx3 = getelementptr inbounds i8, i8* %ptr, i64 %idxprom2 765 store i8 %a, i8* %arrayidx3, align 1, !tbaa !3 766 ret void 767 } 768 769 ; Function Attrs: norecurse nounwind 770 define void @testSTHUX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 { 771 entry: 772 %add = add i32 %idx, 1 773 %idxprom = zext i32 %add to i64 774 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom 775 store i16 %a, i16* %arrayidx, align 2, !tbaa !6 776 %add1 = add i32 %idx, 2 777 %idxprom2 = zext i32 %add1 to i64 778 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2 779 store i16 %a, i16* %arrayidx3, align 2, !tbaa !6 780 ret void 781 } 782 783 ; Function Attrs: norecurse nounwind 784 define void @testSTHX(i16* nocapture %ptr, i16 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 { 785 entry: 786 %add = add i32 %idx, 1 787 %idxprom = zext i32 %add to i64 788 %arrayidx = getelementptr inbounds i16, i16* %ptr, i64 %idxprom 789 store i16 %a, i16* %arrayidx, align 1, !tbaa !3 790 %add1 = add i32 %idx, 2 791 %idxprom2 = zext i32 %add1 to i64 792 %arrayidx3 = getelementptr inbounds i16, i16* %ptr, i64 %idxprom2 793 store i16 %a, i16* %arrayidx3, align 1, !tbaa !3 794 ret void 795 } 796 797 ; Function Attrs: norecurse nounwind 798 define void @testSTWUX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 { 799 entry: 800 %add = add i32 %idx, 1 801 %idxprom = zext i32 %add to i64 802 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom 803 store i32 %a, i32* %arrayidx, align 4, !tbaa !8 804 %add1 = add i32 %idx, 2 805 %idxprom2 = zext i32 %add1 to i64 806 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2 807 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8 808 ret void 809 } 810 811 ; Function Attrs: norecurse nounwind 812 define void @testSTWX(i32* nocapture %ptr, i32 zeroext %a, i32 zeroext %idx) local_unnamed_addr #3 { 813 entry: 814 %add = add i32 %idx, 1 815 %idxprom = zext i32 %add to i64 816 %arrayidx = getelementptr inbounds i32, i32* %ptr, i64 %idxprom 817 store i32 %a, i32* %arrayidx, align 4, !tbaa !8 818 %add1 = add i32 %idx, 2 819 %idxprom2 = zext i32 %add1 to i64 820 %arrayidx3 = getelementptr inbounds i32, i32* %ptr, i64 %idxprom2 821 store i32 %a, i32* %arrayidx3, align 4, !tbaa !8 822 ret void 823 } 824 825 ; Function Attrs: norecurse nounwind 826 define void @testSTDUX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 { 827 entry: 828 %add = add i32 %idx, 1 829 %idxprom = zext i32 %add to i64 830 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom 831 store i64 %a, i64* %arrayidx, align 8, !tbaa !10 832 %add1 = add i32 %idx, 2 833 %idxprom2 = zext i32 %add1 to i64 834 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2 835 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10 836 ret void 837 } 838 839 ; Function Attrs: norecurse nounwind 840 define void @testSTDX(i64* nocapture %ptr, i64 %a, i32 zeroext %idx) local_unnamed_addr #3 { 841 entry: 842 %add = add i32 %idx, 1 843 %idxprom = zext i32 %add to i64 844 %arrayidx = getelementptr inbounds i64, i64* %ptr, i64 %idxprom 845 store i64 %a, i64* %arrayidx, align 8, !tbaa !10 846 %add1 = add i32 %idx, 2 847 %idxprom2 = zext i32 %add1 to i64 848 %arrayidx3 = getelementptr inbounds i64, i64* %ptr, i64 %idxprom2 849 store i64 %a, i64* %arrayidx3, align 8, !tbaa !10 850 ret void 851 } 852 853 ; Function Attrs: norecurse nounwind readonly 854 define void @testSTFSX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 { 855 entry: 856 %add = add i32 %idx, 1 857 %idxprom = zext i32 %add to i64 858 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom 859 store float %a, float* %arrayidx, align 4, !tbaa !14 860 %add1 = add i32 %idx, 2 861 %idxprom2 = zext i32 %add1 to i64 862 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2 863 store float %a, float* %arrayidx3, align 4, !tbaa !14 864 ret void 865 } 866 867 ; Function Attrs: norecurse nounwind readonly 868 define void @testSTFSUX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #2 { 869 entry: 870 %add = add i32 %idx, 1 871 %idxprom = zext i32 %add to i64 872 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom 873 store float %a, float* %arrayidx, align 4, !tbaa !14 874 %add1 = add i32 %idx, 2 875 %idxprom2 = zext i32 %add1 to i64 876 %arrayidx3 = getelementptr inbounds float, float* %ptr, i64 %idxprom2 877 store float %a, float* %arrayidx3, align 4, !tbaa !14 878 ret void 879 } 880 881 ; Function Attrs: norecurse nounwind readonly 882 define void @testSTFDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 { 883 entry: 884 %add = add i32 %idx, 1 885 %idxprom = zext i32 %add to i64 886 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom 887 store double %a, double* %arrayidx, align 8, !tbaa !12 888 %add1 = add i32 %idx, 2 889 %idxprom2 = zext i32 %add1 to i64 890 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2 891 store double %a, double* %arrayidx3, align 8, !tbaa !12 892 ret void 893 } 894 895 ; Function Attrs: norecurse nounwind readonly 896 define void @testSTFDUX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #2 { 897 entry: 898 %add = add i32 %idx, 1 899 %idxprom = zext i32 %add to i64 900 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom 901 store double %a, double* %arrayidx, align 8, !tbaa !12 902 %add1 = add i32 %idx, 2 903 %idxprom2 = zext i32 %add1 to i64 904 %arrayidx3 = getelementptr inbounds double, double* %ptr, i64 %idxprom2 905 store double %a, double* %arrayidx3, align 8, !tbaa !12 906 ret void 907 } 908 909 ; Function Attrs: norecurse nounwind 910 define void @testSTXSSPX(float* nocapture %ptr, float %a, i32 zeroext %idx) local_unnamed_addr #3 { 911 entry: 912 %idxprom = zext i32 %idx to i64 913 %arrayidx = getelementptr inbounds float, float* %ptr, i64 %idxprom 914 store float %a, float* %arrayidx, align 4, !tbaa !14 915 ret void 916 } 917 918 ; Function Attrs: norecurse nounwind 919 define void @testSTXSDX(double* nocapture %ptr, double %a, i32 zeroext %idx) local_unnamed_addr #3 { 920 entry: 921 %idxprom = zext i32 %idx to i64 922 %arrayidx = getelementptr inbounds double, double* %ptr, i64 %idxprom 923 store double %a, double* %arrayidx, align 8, !tbaa !12 924 ret void 925 } 926 927 ; Function Attrs: norecurse nounwind 928 define void @testSTXVX(<4 x i32>* nocapture %ptr, <4 x i32> %a, i32 zeroext %idx) local_unnamed_addr #3 { 929 entry: 930 %idxprom = zext i32 %idx to i64 931 %arrayidx = getelementptr inbounds <4 x i32>, <4 x i32>* %ptr, i64 %idxprom 932 store <4 x i32> %a, <4 x i32>* %arrayidx, align 16, !tbaa !3 933 ret void 934 } 935 936 ; Function Attrs: norecurse nounwind readnone 937 define i128 @testSUBFC(i128 %a, i128 %b) local_unnamed_addr #0 { 938 entry: 939 %sub = sub nsw i128 %a, %b 940 ret i128 %sub 941 } 942 943 ; Function Attrs: norecurse nounwind readnone 944 define i128 @testSUBFC8(i128 %a, i128 %b) local_unnamed_addr #0 { 945 entry: 946 %sub = sub nsw i128 %a, %b 947 ret i128 %sub 948 } 949 950 ; Function Attrs: norecurse nounwind readnone 951 define signext i32 @testXOR(i32 signext %a, i32 signext %b) local_unnamed_addr #0 { 952 entry: 953 %xor = xor i32 %b, %a 954 ret i32 %xor 955 } 956 957 ; Function Attrs: norecurse nounwind readnone 958 define i64 @testXOR8(i64 %a, i64 %b) local_unnamed_addr #0 { 959 entry: 960 %xor = xor i64 %b, %a 961 ret i64 %xor 962 } 963 964 ; Function Attrs: norecurse nounwind readnone 965 define signext i32 @testXORI(i32 signext %a) local_unnamed_addr #0 { 966 entry: 967 %xor = xor i32 %a, 17 968 ret i32 %xor 969 } 970 971 ; Function Attrs: norecurse nounwind readnone 972 define i64 @testXOR8I(i64 %a) local_unnamed_addr #0 { 973 entry: 974 %xor = xor i64 %a, 17 975 ret i64 %xor 976 } 977 978 attributes #0 = { norecurse nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" } 979 attributes #1 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" } 980 attributes #2 = { norecurse nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,-vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" } 981 attributes #3 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pwr9" "target-features"="+altivec,+bpermd,+crypto,+direct-move,+extdiv,+htm,+power8-vector,+power9-vector,+vsx,-qpx" "unsafe-fp-math"="false" "use-soft-float"="false" } 982 983 !llvm.module.flags = !{!0, !1} 984 !llvm.ident = !{!2} 985 986 !0 = !{i32 1, !"wchar_size", i32 4} 987 !1 = !{i32 7, !"PIC Level", i32 2} 988 !2 = !{!"clang version 6.0.0 (trunk 316067)"} 989 !3 = !{!4, !4, i64 0} 990 !4 = !{!"omnipotent char", !5, i64 0} 991 !5 = !{!"Simple C/C++ TBAA"} 992 !6 = !{!7, !7, i64 0} 993 !7 = !{!"short", !4, i64 0} 994 !8 = !{!9, !9, i64 0} 995 !9 = !{!"int", !4, i64 0} 996 !10 = !{!11, !11, i64 0} 997 !11 = !{!"long long", !4, i64 0} 998 !12 = !{!13, !13, i64 0} 999 !13 = !{!"double", !4, i64 0} 1000 !14 = !{!15, !15, i64 0} 1001 !15 = !{!"float", !4, i64 0} 1002 1003... 1004--- 1005name: testADD4 1006# CHECK-ALL: name: testADD4 1007alignment: 4 1008exposesReturnsTwice: false 1009legalized: false 1010regBankSelected: false 1011selected: false 1012tracksRegLiveness: true 1013registers: 1014 - { id: 0, class: g8rc, preferred-register: '' } 1015 - { id: 1, class: g8rc, preferred-register: '' } 1016 - { id: 2, class: gprc, preferred-register: '' } 1017 - { id: 3, class: gprc, preferred-register: '' } 1018 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 1019 - { id: 5, class: gprc, preferred-register: '' } 1020 - { id: 6, class: g8rc, preferred-register: '' } 1021liveins: 1022 - { reg: '$x3', virtual-reg: '%0' } 1023 - { reg: '$x4', virtual-reg: '%1' } 1024frameInfo: 1025 isFrameAddressTaken: false 1026 isReturnAddressTaken: false 1027 hasStackMap: false 1028 hasPatchPoint: false 1029 stackSize: 0 1030 offsetAdjustment: 0 1031 maxAlignment: 0 1032 adjustsStack: false 1033 hasCalls: false 1034 stackProtector: '' 1035 maxCallFrameSize: 4294967295 1036 hasOpaqueSPAdjustment: false 1037 hasVAStart: false 1038 hasMustTailInVarArgFunc: false 1039 savePoint: '' 1040 restorePoint: '' 1041fixedStack: 1042stack: 1043constants: 1044body: | 1045 bb.0.entry: 1046 liveins: $x3, $x4 1047 1048 %1 = COPY $x4 1049 %0 = COPY $x3 1050 %2 = LI 33 1051 %3 = COPY %0.sub_32 1052 %4 = ADD4 killed %3, %2 1053 %5 = ADD4 killed %2, killed %4 1054 ; CHECK: ADDI killed %3, 33 1055 ; CHECK: ADDI killed %4, 33 1056 ; CHECK-LATE: addi 3, 3, 33 1057 ; CHECK-LATE: addi 3, 3, 33 1058 %6 = EXTSW_32_64 killed %5 1059 $x3 = COPY %6 1060 BLR8 implicit $lr8, implicit $rm, implicit $x3 1061 1062... 1063--- 1064name: testADD8 1065# CHECK-ALL: name: testADD8 1066alignment: 4 1067exposesReturnsTwice: false 1068legalized: false 1069regBankSelected: false 1070selected: false 1071tracksRegLiveness: true 1072registers: 1073 - { id: 0, class: g8rc, preferred-register: '' } 1074 - { id: 1, class: g8rc, preferred-register: '' } 1075 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1076 - { id: 3, class: g8rc, preferred-register: '' } 1077liveins: 1078 - { reg: '$x3', virtual-reg: '%0' } 1079 - { reg: '$x4', virtual-reg: '%1' } 1080frameInfo: 1081 isFrameAddressTaken: false 1082 isReturnAddressTaken: false 1083 hasStackMap: false 1084 hasPatchPoint: false 1085 stackSize: 0 1086 offsetAdjustment: 0 1087 maxAlignment: 0 1088 adjustsStack: false 1089 hasCalls: false 1090 stackProtector: '' 1091 maxCallFrameSize: 4294967295 1092 hasOpaqueSPAdjustment: false 1093 hasVAStart: false 1094 hasMustTailInVarArgFunc: false 1095 savePoint: '' 1096 restorePoint: '' 1097fixedStack: 1098stack: 1099constants: 1100body: | 1101 bb.0.entry: 1102 liveins: $x3, $x4 1103 1104 %1 = LI8 33 1105 %0 = COPY $x3 1106 %2 = ADD8 %0, %1 1107 %3 = ADD8 killed %1, killed %2 1108 ; CHECK: ADDI8 %0, 33 1109 ; CHECK: ADDI8 killed %2, 33 1110 ; CHECK-LATE: addi 3, 3, 33 1111 ; CHECK-LATE: addi 3, 3, 33 1112 $x3 = COPY %3 1113 BLR8 implicit $lr8, implicit $rm, implicit $x3 1114 1115... 1116--- 1117name: testADDC 1118# CHECK-ALL: name: testADDC 1119alignment: 4 1120exposesReturnsTwice: false 1121legalized: false 1122regBankSelected: false 1123selected: false 1124tracksRegLiveness: true 1125registers: 1126 - { id: 0, class: g8rc, preferred-register: '' } 1127 - { id: 1, class: g8rc, preferred-register: '' } 1128 - { id: 2, class: g8rc, preferred-register: '' } 1129 - { id: 3, class: g8rc, preferred-register: '' } 1130 - { id: 4, class: gprc, preferred-register: '' } 1131 - { id: 5, class: gprc, preferred-register: '' } 1132 - { id: 6, class: gprc, preferred-register: '' } 1133 - { id: 7, class: g8rc, preferred-register: '' } 1134 - { id: 8, class: g8rc, preferred-register: '' } 1135liveins: 1136 - { reg: '$x3', virtual-reg: '%0' } 1137 - { reg: '$x4', virtual-reg: '%1' } 1138 - { reg: '$x5', virtual-reg: '%2' } 1139 - { reg: '$x6', virtual-reg: '%3' } 1140frameInfo: 1141 isFrameAddressTaken: false 1142 isReturnAddressTaken: false 1143 hasStackMap: false 1144 hasPatchPoint: false 1145 stackSize: 0 1146 offsetAdjustment: 0 1147 maxAlignment: 0 1148 adjustsStack: false 1149 hasCalls: false 1150 stackProtector: '' 1151 maxCallFrameSize: 4294967295 1152 hasOpaqueSPAdjustment: false 1153 hasVAStart: false 1154 hasMustTailInVarArgFunc: false 1155 savePoint: '' 1156 restorePoint: '' 1157fixedStack: 1158stack: 1159constants: 1160body: | 1161 bb.0.entry: 1162 liveins: $x3, $x4, $x5, $x6 1163 1164 %3 = COPY $x6 1165 %2 = COPY $x5 1166 %1 = COPY $x4 1167 %0 = COPY $x3 1168 %4 = COPY %0.sub_32 1169 %5 = LI 55 1170 %6 = ADDC %5, %4, implicit-def $carry 1171 ; CHECK: ADDIC %4, 55, implicit-def $carry 1172 ; CHECK-LATE: addic 3, 3, 55 1173 %7 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry 1174 %8 = EXTSW_32_64 %6 1175 $x3 = COPY %8 1176 $x4 = COPY %7 1177 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4 1178 1179... 1180--- 1181name: testADDC8 1182# CHECK-ALL: name: testADDC8 1183alignment: 4 1184exposesReturnsTwice: false 1185legalized: false 1186regBankSelected: false 1187selected: false 1188tracksRegLiveness: true 1189registers: 1190 - { id: 0, class: g8rc, preferred-register: '' } 1191 - { id: 1, class: g8rc, preferred-register: '' } 1192 - { id: 2, class: g8rc, preferred-register: '' } 1193 - { id: 3, class: g8rc, preferred-register: '' } 1194 - { id: 4, class: g8rc, preferred-register: '' } 1195 - { id: 5, class: g8rc, preferred-register: '' } 1196liveins: 1197 - { reg: '$x3', virtual-reg: '%0' } 1198 - { reg: '$x4', virtual-reg: '%1' } 1199 - { reg: '$x5', virtual-reg: '%2' } 1200 - { reg: '$x6', virtual-reg: '%3' } 1201frameInfo: 1202 isFrameAddressTaken: false 1203 isReturnAddressTaken: false 1204 hasStackMap: false 1205 hasPatchPoint: false 1206 stackSize: 0 1207 offsetAdjustment: 0 1208 maxAlignment: 0 1209 adjustsStack: false 1210 hasCalls: false 1211 stackProtector: '' 1212 maxCallFrameSize: 4294967295 1213 hasOpaqueSPAdjustment: false 1214 hasVAStart: false 1215 hasMustTailInVarArgFunc: false 1216 savePoint: '' 1217 restorePoint: '' 1218fixedStack: 1219stack: 1220constants: 1221body: | 1222 bb.0.entry: 1223 liveins: $x3, $x4, $x5, $x6 1224 1225 %3 = COPY $x6 1226 %2 = COPY $x5 1227 %1 = COPY $x4 1228 %0 = LI8 777 1229 %4 = ADDC8 %2, %0, implicit-def $carry 1230 ; CHECK: ADDIC8 %2, 777, implicit-def $carry 1231 ; CHECK-LATE: addic 3, 5, 777 1232 %5 = ADDE8 %3, %1, implicit-def dead $carry, implicit $carry 1233 $x3 = COPY %4 1234 $x4 = COPY %5 1235 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4 1236 1237... 1238--- 1239name: testADDCo 1240# CHECK-ALL: name: testADDCo 1241alignment: 4 1242exposesReturnsTwice: false 1243legalized: false 1244regBankSelected: false 1245selected: false 1246tracksRegLiveness: true 1247registers: 1248 - { id: 0, class: g8rc, preferred-register: '' } 1249 - { id: 1, class: gprc, preferred-register: '' } 1250 - { id: 2, class: gprc, preferred-register: '' } 1251 - { id: 3, class: gprc, preferred-register: '' } 1252 - { id: 4, class: crrc, preferred-register: '' } 1253 - { id: 5, class: crbitrc, preferred-register: '' } 1254 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1255 - { id: 7, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1256 - { id: 8, class: g8rc, preferred-register: '' } 1257liveins: 1258 - { reg: '$x3', virtual-reg: '%0' } 1259 - { reg: '$x4', virtual-reg: '%1' } 1260frameInfo: 1261 isFrameAddressTaken: false 1262 isReturnAddressTaken: false 1263 hasStackMap: false 1264 hasPatchPoint: false 1265 stackSize: 0 1266 offsetAdjustment: 0 1267 maxAlignment: 0 1268 adjustsStack: false 1269 hasCalls: false 1270 stackProtector: '' 1271 maxCallFrameSize: 4294967295 1272 hasOpaqueSPAdjustment: false 1273 hasVAStart: false 1274 hasMustTailInVarArgFunc: false 1275 savePoint: '' 1276 restorePoint: '' 1277fixedStack: 1278stack: 1279constants: 1280body: | 1281 bb.0.entry: 1282 liveins: $x3, $x4 1283 1284 %1 = LI 433 1285 %0 = COPY $x3 1286 %2 = COPY %0.sub_32 1287 %3 = ADDCo %1, %2, implicit-def $cr0, implicit-def $carry 1288 ; CHECK: ADDICo %2, 433, implicit-def $cr0, implicit-def $carry 1289 ; CHECK-LATE: addic. 3, 3, 433 1290 %4 = COPY killed $cr0 1291 %5 = COPY %4.sub_eq 1292 %6 = LI8 0 1293 %7 = LI8 -1 1294 %8 = ISEL8 %7, %6, %5 1295 $x3 = COPY %8 1296 BLR8 implicit $lr8, implicit $rm, implicit $x3 1297 1298... 1299--- 1300name: testADDI 1301# CHECK-ALL: name: testADDI 1302alignment: 4 1303exposesReturnsTwice: false 1304legalized: false 1305regBankSelected: false 1306selected: false 1307tracksRegLiveness: true 1308registers: 1309 - { id: 0, class: g8rc, preferred-register: '' } 1310 - { id: 1, class: gprc_and_gprc_nor0, preferred-register: '' } 1311 - { id: 2, class: gprc, preferred-register: '' } 1312 - { id: 3, class: g8rc, preferred-register: '' } 1313liveins: 1314 - { reg: '$x3', virtual-reg: '%0' } 1315frameInfo: 1316 isFrameAddressTaken: false 1317 isReturnAddressTaken: false 1318 hasStackMap: false 1319 hasPatchPoint: false 1320 stackSize: 0 1321 offsetAdjustment: 0 1322 maxAlignment: 0 1323 adjustsStack: false 1324 hasCalls: false 1325 stackProtector: '' 1326 maxCallFrameSize: 4294967295 1327 hasOpaqueSPAdjustment: false 1328 hasVAStart: false 1329 hasMustTailInVarArgFunc: false 1330 savePoint: '' 1331 restorePoint: '' 1332fixedStack: 1333stack: 1334constants: 1335body: | 1336 bb.0.entry: 1337 liveins: $x3 1338 1339 %0 = COPY $x3 1340 %1 = LI 77 1341 %2 = ADDI killed %1, 44 1342 %3 = EXTSW_32_64 killed %2 1343 ; CHECK: LI 121 1344 ; CHECK-LATE: li 3, 121 1345 $x3 = COPY %3 1346 BLR8 implicit $lr8, implicit $rm, implicit $x3 1347 1348... 1349--- 1350name: testADDI8 1351# CHECK-ALL: name: testADDI8 1352alignment: 4 1353exposesReturnsTwice: false 1354legalized: false 1355regBankSelected: false 1356selected: false 1357tracksRegLiveness: true 1358registers: 1359 - { id: 0, class: g8rc, preferred-register: '' } 1360 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1361 - { id: 2, class: g8rc, preferred-register: '' } 1362 - { id: 3, class: g8rc, preferred-register: '' } 1363liveins: 1364 - { reg: '$x3', virtual-reg: '%0' } 1365frameInfo: 1366 isFrameAddressTaken: false 1367 isReturnAddressTaken: false 1368 hasStackMap: false 1369 hasPatchPoint: false 1370 stackSize: 0 1371 offsetAdjustment: 0 1372 maxAlignment: 0 1373 adjustsStack: false 1374 hasCalls: false 1375 stackProtector: '' 1376 maxCallFrameSize: 4294967295 1377 hasOpaqueSPAdjustment: false 1378 hasVAStart: false 1379 hasMustTailInVarArgFunc: false 1380 savePoint: '' 1381 restorePoint: '' 1382fixedStack: 1383stack: 1384constants: 1385body: | 1386 bb.0.entry: 1387 liveins: $x3 1388 1389 %0 = COPY $x3 1390 %1 = LI8 333 1391 %2 = ADDI8 killed %1, 44 1392 ; CHECK: LI8 377 1393 ; CHECK-LATE: li 3, 377 1394 %3 = EXTSW killed %2 1395 $x3 = COPY %3 1396 BLR8 implicit $lr8, implicit $rm, implicit $x3 1397 1398... 1399--- 1400name: testANDo 1401# CHECK-ALL: name: testANDo 1402alignment: 4 1403exposesReturnsTwice: false 1404legalized: false 1405regBankSelected: false 1406selected: false 1407tracksRegLiveness: true 1408registers: 1409 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1410 - { id: 1, class: gprc, preferred-register: '' } 1411 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 1412 - { id: 3, class: gprc, preferred-register: '' } 1413 - { id: 4, class: crrc, preferred-register: '' } 1414 - { id: 5, class: gprc, preferred-register: '' } 1415 - { id: 6, class: g8rc, preferred-register: '' } 1416liveins: 1417 - { reg: '$x3', virtual-reg: '%0' } 1418 - { reg: '$x4', virtual-reg: '%1' } 1419frameInfo: 1420 isFrameAddressTaken: false 1421 isReturnAddressTaken: false 1422 hasStackMap: false 1423 hasPatchPoint: false 1424 stackSize: 0 1425 offsetAdjustment: 0 1426 maxAlignment: 0 1427 adjustsStack: false 1428 hasCalls: false 1429 stackProtector: '' 1430 maxCallFrameSize: 4294967295 1431 hasOpaqueSPAdjustment: false 1432 hasVAStart: false 1433 hasMustTailInVarArgFunc: false 1434 savePoint: '' 1435 restorePoint: '' 1436fixedStack: 1437stack: 1438constants: 1439body: | 1440 bb.0.entry: 1441 liveins: $x3, $x4 1442 1443 %1 = LI 78 1444 %0 = COPY $x3 1445 %2 = COPY %0.sub_32 1446 %3 = ANDo %1, %2, implicit-def $cr0 1447 ; CHECK: ANDIo %2, 78, implicit-def $cr0 1448 ; CHECK-LATE: andi. 5, 3, 78 1449 %4 = COPY killed $cr0 1450 %5 = ISEL %2, %1, %4.sub_eq 1451 %6 = EXTSW_32_64 killed %5 1452 $x3 = COPY %6 1453 BLR8 implicit $lr8, implicit $rm, implicit $x3 1454 1455... 1456--- 1457name: testAND8o 1458# CHECK-ALL: name: testAND8o 1459alignment: 4 1460exposesReturnsTwice: false 1461legalized: false 1462regBankSelected: false 1463selected: false 1464tracksRegLiveness: true 1465registers: 1466 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1467 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1468 - { id: 2, class: g8rc, preferred-register: '' } 1469 - { id: 3, class: crrc, preferred-register: '' } 1470 - { id: 4, class: g8rc, preferred-register: '' } 1471liveins: 1472 - { reg: '$x3', virtual-reg: '%0' } 1473 - { reg: '$x4', virtual-reg: '%1' } 1474frameInfo: 1475 isFrameAddressTaken: false 1476 isReturnAddressTaken: false 1477 hasStackMap: false 1478 hasPatchPoint: false 1479 stackSize: 0 1480 offsetAdjustment: 0 1481 maxAlignment: 0 1482 adjustsStack: false 1483 hasCalls: false 1484 stackProtector: '' 1485 maxCallFrameSize: 4294967295 1486 hasOpaqueSPAdjustment: false 1487 hasVAStart: false 1488 hasMustTailInVarArgFunc: false 1489 savePoint: '' 1490 restorePoint: '' 1491fixedStack: 1492stack: 1493constants: 1494body: | 1495 bb.0.entry: 1496 liveins: $x3, $x4 1497 1498 %1 = LI8 321 1499 %0 = COPY $x3 1500 %2 = AND8o %1, %0, implicit-def $cr0 1501 ; CHECK: ANDIo8 %0, 321, implicit-def $cr0 1502 ; CHECK-LATE: andi. 5, 3, 321 1503 %3 = COPY killed $cr0 1504 %4 = ISEL8 %1, %0, %3.sub_eq 1505 $x3 = COPY %4 1506 BLR8 implicit $lr8, implicit $rm, implicit $x3 1507 1508... 1509--- 1510name: testCMPD 1511# CHECK-ALL: name: testCMPD 1512alignment: 4 1513exposesReturnsTwice: false 1514legalized: false 1515regBankSelected: false 1516selected: false 1517tracksRegLiveness: true 1518registers: 1519 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1520 - { id: 1, class: g8rc, preferred-register: '' } 1521 - { id: 2, class: crrc, preferred-register: '' } 1522 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1523 - { id: 4, class: g8rc, preferred-register: '' } 1524 - { id: 5, class: g8rc, preferred-register: '' } 1525liveins: 1526 - { reg: '$x3', virtual-reg: '%0' } 1527 - { reg: '$x4', virtual-reg: '%1' } 1528frameInfo: 1529 isFrameAddressTaken: false 1530 isReturnAddressTaken: false 1531 hasStackMap: false 1532 hasPatchPoint: false 1533 stackSize: 0 1534 offsetAdjustment: 0 1535 maxAlignment: 0 1536 adjustsStack: false 1537 hasCalls: false 1538 stackProtector: '' 1539 maxCallFrameSize: 4294967295 1540 hasOpaqueSPAdjustment: false 1541 hasVAStart: false 1542 hasMustTailInVarArgFunc: false 1543 savePoint: '' 1544 restorePoint: '' 1545fixedStack: 1546stack: 1547constants: 1548body: | 1549 bb.0.entry: 1550 liveins: $x3, $x4 1551 1552 %1 = LI8 65533 1553 %0 = COPY $x3 1554 %2 = CMPD %0, %1 1555 ; CHECK: CMPDI %0, -3 1556 ; CHECK-LATE: cmpdi 3, -3 1557 %4 = ISEL8 $zero8, %0, %2.sub_gt 1558 %5 = ADD8 killed %4, %1 1559 $x3 = COPY %5 1560 BLR8 implicit $lr8, implicit $rm, implicit $x3 1561 1562... 1563--- 1564name: testCMPDI 1565# CHECK-ALL: name: testCMPDI 1566alignment: 4 1567exposesReturnsTwice: false 1568legalized: false 1569regBankSelected: false 1570selected: false 1571tracksRegLiveness: true 1572registers: 1573 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1574 - { id: 1, class: g8rc, preferred-register: '' } 1575 - { id: 2, class: crrc, preferred-register: '' } 1576 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1577 - { id: 4, class: g8rc, preferred-register: '' } 1578 - { id: 5, class: g8rc, preferred-register: '' } 1579liveins: 1580 - { reg: '$x3', virtual-reg: '%0' } 1581 - { reg: '$x4', virtual-reg: '%1' } 1582frameInfo: 1583 isFrameAddressTaken: false 1584 isReturnAddressTaken: false 1585 hasStackMap: false 1586 hasPatchPoint: false 1587 stackSize: 0 1588 offsetAdjustment: 0 1589 maxAlignment: 0 1590 adjustsStack: false 1591 hasCalls: false 1592 stackProtector: '' 1593 maxCallFrameSize: 4294967295 1594 hasOpaqueSPAdjustment: false 1595 hasVAStart: false 1596 hasMustTailInVarArgFunc: false 1597 savePoint: '' 1598 restorePoint: '' 1599fixedStack: 1600stack: 1601constants: 1602body: | 1603 bb.0.entry: 1604 liveins: $x3, $x4 1605 1606 %1 = COPY $x4 1607 %0 = LI8 89 1608 %2 = CMPDI %0, 87 1609 %4 = ISEL8 $zero8, %0, %2.sub_gt 1610 ; CHECK: LI8 0 1611 %5 = ADD8 killed %4, %1 1612 $x3 = COPY %5 1613 BLR8 implicit $lr8, implicit $rm, implicit $x3 1614 1615... 1616--- 1617name: testCMPDI_F 1618# CHECK-ALL: name: testCMPDI_F 1619alignment: 4 1620exposesReturnsTwice: false 1621legalized: false 1622regBankSelected: false 1623selected: false 1624tracksRegLiveness: true 1625registers: 1626 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1627 - { id: 1, class: g8rc, preferred-register: '' } 1628 - { id: 2, class: crrc, preferred-register: '' } 1629 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1630 - { id: 4, class: g8rc, preferred-register: '' } 1631 - { id: 5, class: g8rc, preferred-register: '' } 1632liveins: 1633 - { reg: '$x3', virtual-reg: '%0' } 1634 - { reg: '$x4', virtual-reg: '%1' } 1635frameInfo: 1636 isFrameAddressTaken: false 1637 isReturnAddressTaken: false 1638 hasStackMap: false 1639 hasPatchPoint: false 1640 stackSize: 0 1641 offsetAdjustment: 0 1642 maxAlignment: 0 1643 adjustsStack: false 1644 hasCalls: false 1645 stackProtector: '' 1646 maxCallFrameSize: 4294967295 1647 hasOpaqueSPAdjustment: false 1648 hasVAStart: false 1649 hasMustTailInVarArgFunc: false 1650 savePoint: '' 1651 restorePoint: '' 1652fixedStack: 1653stack: 1654constants: 1655body: | 1656 bb.0.entry: 1657 liveins: $x3, $x4 1658 1659 %1 = COPY $x4 1660 %0 = LI8 87 1661 %2 = CMPDI %0, 87 1662 %4 = ISEL8 $zero8, %0, %2.sub_gt 1663 ; CHECK: COPY %0 1664 %5 = ADD8 killed %4, %1 1665 $x3 = COPY %5 1666 BLR8 implicit $lr8, implicit $rm, implicit $x3 1667 1668... 1669--- 1670name: testCMPLD 1671# CHECK-ALL: name: testCMPLD 1672alignment: 4 1673exposesReturnsTwice: false 1674legalized: false 1675regBankSelected: false 1676selected: false 1677tracksRegLiveness: true 1678registers: 1679 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1680 - { id: 1, class: g8rc, preferred-register: '' } 1681 - { id: 2, class: crrc, preferred-register: '' } 1682 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1683 - { id: 4, class: g8rc, preferred-register: '' } 1684 - { id: 5, class: g8rc, preferred-register: '' } 1685liveins: 1686 - { reg: '$x3', virtual-reg: '%0' } 1687 - { reg: '$x4', virtual-reg: '%1' } 1688frameInfo: 1689 isFrameAddressTaken: false 1690 isReturnAddressTaken: false 1691 hasStackMap: false 1692 hasPatchPoint: false 1693 stackSize: 0 1694 offsetAdjustment: 0 1695 maxAlignment: 0 1696 adjustsStack: false 1697 hasCalls: false 1698 stackProtector: '' 1699 maxCallFrameSize: 4294967295 1700 hasOpaqueSPAdjustment: false 1701 hasVAStart: false 1702 hasMustTailInVarArgFunc: false 1703 savePoint: '' 1704 restorePoint: '' 1705fixedStack: 1706stack: 1707constants: 1708body: | 1709 bb.0.entry: 1710 liveins: $x3, $x4 1711 1712 %1 = LI8 99 1713 %0 = COPY $x3 1714 %2 = CMPLD %0, %1 1715 ; CHECK: CMPLDI %0, 99 1716 ; CHECK-LATE: cmpldi 3, 99 1717 %4 = ISEL8 $zero8, %0, %2.sub_gt 1718 %5 = ADD8 killed %4, %1 1719 $x3 = COPY %5 1720 BLR8 implicit $lr8, implicit $rm, implicit $x3 1721 1722... 1723--- 1724name: testCMPLDI 1725# CHECK-ALL: name: testCMPLDI 1726alignment: 4 1727exposesReturnsTwice: false 1728legalized: false 1729regBankSelected: false 1730selected: false 1731tracksRegLiveness: true 1732registers: 1733 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1734 - { id: 1, class: g8rc, preferred-register: '' } 1735 - { id: 2, class: crrc, preferred-register: '' } 1736 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 1737 - { id: 4, class: g8rc, preferred-register: '' } 1738 - { id: 5, class: g8rc, preferred-register: '' } 1739liveins: 1740 - { reg: '$x3', virtual-reg: '%0' } 1741 - { reg: '$x4', virtual-reg: '%1' } 1742frameInfo: 1743 isFrameAddressTaken: false 1744 isReturnAddressTaken: false 1745 hasStackMap: false 1746 hasPatchPoint: false 1747 stackSize: 0 1748 offsetAdjustment: 0 1749 maxAlignment: 0 1750 adjustsStack: false 1751 hasCalls: false 1752 stackProtector: '' 1753 maxCallFrameSize: 4294967295 1754 hasOpaqueSPAdjustment: false 1755 hasVAStart: false 1756 hasMustTailInVarArgFunc: false 1757 savePoint: '' 1758 restorePoint: '' 1759fixedStack: 1760stack: 1761constants: 1762body: | 1763 bb.0.entry: 1764 liveins: $x3, $x4 1765 1766 %1 = COPY $x4 1767 %0 = LI8 65534 1768 %2 = CMPLDI %0, 65535 1769 %4 = ISEL8 $zero8, %0, %2.sub_gt 1770 ; CHECK: COPY %0 1771 %5 = ADD8 killed %4, %1 1772 $x3 = COPY %5 1773 BLR8 implicit $lr8, implicit $rm, implicit $x3 1774 1775... 1776--- 1777name: testCMPW 1778# CHECK-ALL: name: testCMPW 1779alignment: 4 1780exposesReturnsTwice: false 1781legalized: false 1782regBankSelected: false 1783selected: false 1784tracksRegLiveness: true 1785registers: 1786 - { id: 0, class: g8rc, preferred-register: '' } 1787 - { id: 1, class: g8rc, preferred-register: '' } 1788 - { id: 2, class: gprc, preferred-register: '' } 1789 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 1790 - { id: 4, class: crrc, preferred-register: '' } 1791 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' } 1792 - { id: 6, class: gprc, preferred-register: '' } 1793 - { id: 7, class: gprc, preferred-register: '' } 1794 - { id: 8, class: g8rc, preferred-register: '' } 1795liveins: 1796 - { reg: '$x3', virtual-reg: '%0' } 1797 - { reg: '$x4', virtual-reg: '%1' } 1798frameInfo: 1799 isFrameAddressTaken: false 1800 isReturnAddressTaken: false 1801 hasStackMap: false 1802 hasPatchPoint: false 1803 stackSize: 0 1804 offsetAdjustment: 0 1805 maxAlignment: 0 1806 adjustsStack: false 1807 hasCalls: false 1808 stackProtector: '' 1809 maxCallFrameSize: 4294967295 1810 hasOpaqueSPAdjustment: false 1811 hasVAStart: false 1812 hasMustTailInVarArgFunc: false 1813 savePoint: '' 1814 restorePoint: '' 1815fixedStack: 1816stack: 1817constants: 1818body: | 1819 bb.0.entry: 1820 liveins: $x3, $x4 1821 1822 %1 = COPY $x4 1823 %0 = COPY $x3 1824 %2 = LI -1 1825 %3 = COPY %0.sub_32 1826 %4 = CMPW %3, %2 1827 ; CHECK: CMPWI %3, -1 1828 %6 = ISEL $zero, %3, %4.sub_gt 1829 %7 = ADD4 killed %6, %2 1830 %8 = EXTSW_32_64 killed %7 1831 $x3 = COPY %8 1832 BLR8 implicit $lr8, implicit $rm, implicit $x3 1833 1834... 1835--- 1836name: testCMPWI 1837# CHECK-ALL: name: testCMPWI 1838alignment: 4 1839exposesReturnsTwice: false 1840legalized: false 1841regBankSelected: false 1842selected: false 1843tracksRegLiveness: true 1844registers: 1845 - { id: 0, class: g8rc, preferred-register: '' } 1846 - { id: 1, class: g8rc, preferred-register: '' } 1847 - { id: 2, class: gprc, preferred-register: '' } 1848 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 1849 - { id: 4, class: crrc, preferred-register: '' } 1850 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' } 1851 - { id: 6, class: gprc, preferred-register: '' } 1852 - { id: 7, class: gprc, preferred-register: '' } 1853 - { id: 8, class: g8rc, preferred-register: '' } 1854liveins: 1855 - { reg: '$x3', virtual-reg: '%0' } 1856 - { reg: '$x4', virtual-reg: '%1' } 1857frameInfo: 1858 isFrameAddressTaken: false 1859 isReturnAddressTaken: false 1860 hasStackMap: false 1861 hasPatchPoint: false 1862 stackSize: 0 1863 offsetAdjustment: 0 1864 maxAlignment: 0 1865 adjustsStack: false 1866 hasCalls: false 1867 stackProtector: '' 1868 maxCallFrameSize: 4294967295 1869 hasOpaqueSPAdjustment: false 1870 hasVAStart: false 1871 hasMustTailInVarArgFunc: false 1872 savePoint: '' 1873 restorePoint: '' 1874fixedStack: 1875stack: 1876constants: 1877body: | 1878 bb.0.entry: 1879 liveins: $x3, $x4 1880 1881 %1 = COPY $x4 1882 %0 = COPY $x3 1883 %2 = COPY %1.sub_32 1884 %3 = LI -3 1885 %4 = CMPWI %3, 87 1886 %6 = ISEL $zero, %3, %4.sub_gt 1887 ; CHECK: COPY %3 1888 %7 = ADD4 killed %6, killed %2 1889 %8 = EXTSW_32_64 killed %7 1890 $x3 = COPY %8 1891 BLR8 implicit $lr8, implicit $rm, implicit $x3 1892 1893... 1894--- 1895name: testCMPLW 1896# CHECK-ALL: name: testCMPLW 1897alignment: 4 1898exposesReturnsTwice: false 1899legalized: false 1900regBankSelected: false 1901selected: false 1902tracksRegLiveness: true 1903registers: 1904 - { id: 0, class: g8rc, preferred-register: '' } 1905 - { id: 1, class: g8rc, preferred-register: '' } 1906 - { id: 2, class: gprc, preferred-register: '' } 1907 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 1908 - { id: 4, class: crrc, preferred-register: '' } 1909 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' } 1910 - { id: 6, class: gprc, preferred-register: '' } 1911 - { id: 7, class: gprc, preferred-register: '' } 1912 - { id: 8, class: g8rc, preferred-register: '' } 1913 - { id: 9, class: g8rc, preferred-register: '' } 1914 - { id: 10, class: g8rc, preferred-register: '' } 1915liveins: 1916 - { reg: '$x3', virtual-reg: '%0' } 1917 - { reg: '$x4', virtual-reg: '%1' } 1918frameInfo: 1919 isFrameAddressTaken: false 1920 isReturnAddressTaken: false 1921 hasStackMap: false 1922 hasPatchPoint: false 1923 stackSize: 0 1924 offsetAdjustment: 0 1925 maxAlignment: 0 1926 adjustsStack: false 1927 hasCalls: false 1928 stackProtector: '' 1929 maxCallFrameSize: 4294967295 1930 hasOpaqueSPAdjustment: false 1931 hasVAStart: false 1932 hasMustTailInVarArgFunc: false 1933 savePoint: '' 1934 restorePoint: '' 1935fixedStack: 1936stack: 1937constants: 1938body: | 1939 bb.0.entry: 1940 liveins: $x3, $x4 1941 1942 %1 = COPY $x4 1943 %0 = COPY $x3 1944 %2 = LI 32767 1945 %3 = COPY %0.sub_32 1946 %4 = CMPLW %3, %2 1947 ; CHECK: CMPLWI %3, 32767 1948 ; CHECK-LATE: cmplwi 3, 32767 1949 %6 = ISEL $zero, %3, %4.sub_gt 1950 %7 = ADD4 killed %6, %2 1951 %9 = IMPLICIT_DEF 1952 %8 = INSERT_SUBREG %9, killed %7, 1 1953 %10 = RLDICL killed %8, 0, 32 1954 $x3 = COPY %10 1955 BLR8 implicit $lr8, implicit $rm, implicit $x3 1956 1957... 1958--- 1959name: testCMPLWI 1960# CHECK-ALL: name: testCMPLWI 1961alignment: 4 1962exposesReturnsTwice: false 1963legalized: false 1964regBankSelected: false 1965selected: false 1966tracksRegLiveness: true 1967registers: 1968 - { id: 0, class: g8rc, preferred-register: '' } 1969 - { id: 1, class: g8rc, preferred-register: '' } 1970 - { id: 2, class: gprc, preferred-register: '' } 1971 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 1972 - { id: 4, class: crrc, preferred-register: '' } 1973 - { id: 5, class: gprc_and_gprc_nor0, preferred-register: '' } 1974 - { id: 6, class: gprc, preferred-register: '' } 1975 - { id: 7, class: gprc, preferred-register: '' } 1976 - { id: 8, class: g8rc, preferred-register: '' } 1977 - { id: 9, class: g8rc, preferred-register: '' } 1978 - { id: 10, class: g8rc, preferred-register: '' } 1979liveins: 1980 - { reg: '$x3', virtual-reg: '%0' } 1981 - { reg: '$x4', virtual-reg: '%1' } 1982frameInfo: 1983 isFrameAddressTaken: false 1984 isReturnAddressTaken: false 1985 hasStackMap: false 1986 hasPatchPoint: false 1987 stackSize: 0 1988 offsetAdjustment: 0 1989 maxAlignment: 0 1990 adjustsStack: false 1991 hasCalls: false 1992 stackProtector: '' 1993 maxCallFrameSize: 4294967295 1994 hasOpaqueSPAdjustment: false 1995 hasVAStart: false 1996 hasMustTailInVarArgFunc: false 1997 savePoint: '' 1998 restorePoint: '' 1999fixedStack: 2000stack: 2001constants: 2002body: | 2003 bb.0.entry: 2004 liveins: $x3, $x4 2005 2006 %1 = COPY $x4 2007 %0 = COPY $x3 2008 %2 = COPY %1.sub_32 2009 %3 = LI -3 2010 %4 = CMPLWI %3, 87 2011 %6 = ISEL $zero, %3, %4.sub_gt 2012 ; CHECK: LI 0 2013 %7 = ADD4 killed %6, killed %2 2014 %9 = IMPLICIT_DEF 2015 %8 = INSERT_SUBREG %9, killed %7, 1 2016 %10 = RLDICL killed %8, 0, 32 2017 $x3 = COPY %10 2018 BLR8 implicit $lr8, implicit $rm, implicit $x3 2019 2020... 2021--- 2022name: testLBZUX 2023# CHECK-ALL: name: testLBZUX 2024alignment: 4 2025exposesReturnsTwice: false 2026legalized: false 2027regBankSelected: false 2028selected: false 2029tracksRegLiveness: true 2030registers: 2031 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2032 - { id: 1, class: g8rc, preferred-register: '' } 2033 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2034 - { id: 3, class: gprc, preferred-register: '' } 2035 - { id: 4, class: g8rc, preferred-register: '' } 2036 - { id: 5, class: g8rc, preferred-register: '' } 2037 - { id: 6, class: g8rc, preferred-register: '' } 2038 - { id: 7, class: gprc, preferred-register: '' } 2039 - { id: 8, class: gprc, preferred-register: '' } 2040 - { id: 9, class: g8rc, preferred-register: '' } 2041 - { id: 10, class: g8rc, preferred-register: '' } 2042 - { id: 11, class: g8rc, preferred-register: '' } 2043 - { id: 12, class: gprc, preferred-register: '' } 2044 - { id: 13, class: gprc, preferred-register: '' } 2045 - { id: 14, class: g8rc, preferred-register: '' } 2046 - { id: 15, class: g8rc, preferred-register: '' } 2047 - { id: 16, class: g8rc, preferred-register: '' } 2048 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2049liveins: 2050 - { reg: '$x3', virtual-reg: '%0' } 2051 - { reg: '$x4', virtual-reg: '%1' } 2052frameInfo: 2053 isFrameAddressTaken: false 2054 isReturnAddressTaken: false 2055 hasStackMap: false 2056 hasPatchPoint: false 2057 stackSize: 0 2058 offsetAdjustment: 0 2059 maxAlignment: 0 2060 adjustsStack: false 2061 hasCalls: false 2062 stackProtector: '' 2063 maxCallFrameSize: 4294967295 2064 hasOpaqueSPAdjustment: false 2065 hasVAStart: false 2066 hasMustTailInVarArgFunc: false 2067 savePoint: '' 2068 restorePoint: '' 2069fixedStack: 2070stack: 2071constants: 2072body: | 2073 bb.0.entry: 2074 liveins: $x3, $x4 2075 2076 %1 = COPY $x4 2077 %0 = COPY $x3 2078 %2 = COPY %1.sub_32 2079 %3 = ADDI %2, 1 2080 %5 = IMPLICIT_DEF 2081 %4 = INSERT_SUBREG %5, killed %3, 1 2082 %6 = RLDICL killed %4, 0, 32 2083 %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3) 2084 %8 = ADDI %2, 2 2085 %10 = IMPLICIT_DEF 2086 %9 = INSERT_SUBREG %10, killed %8, 1 2087 %11 = LI8 -15 2088 %12,%17 = LBZUX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3) 2089 ; CHECK: LBZU -15, %0 2090 ; CHECK-LATE: lbzu 5, -15(3) 2091 %13 = ADD4 killed %12, killed %7 2092 %15 = IMPLICIT_DEF 2093 %14 = INSERT_SUBREG %15, killed %13, 1 2094 %16 = RLWINM8 killed %14, 0, 24, 31 2095 $x3 = COPY %16 2096 BLR8 implicit $lr8, implicit $rm, implicit $x3 2097 2098... 2099--- 2100name: testLBZX 2101# CHECK-ALL: name: testLBZX 2102alignment: 4 2103exposesReturnsTwice: false 2104legalized: false 2105regBankSelected: false 2106selected: false 2107tracksRegLiveness: true 2108registers: 2109 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2110 - { id: 1, class: g8rc, preferred-register: '' } 2111 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2112 - { id: 3, class: gprc, preferred-register: '' } 2113 - { id: 4, class: g8rc, preferred-register: '' } 2114 - { id: 5, class: g8rc, preferred-register: '' } 2115 - { id: 6, class: g8rc, preferred-register: '' } 2116 - { id: 7, class: gprc, preferred-register: '' } 2117 - { id: 8, class: gprc, preferred-register: '' } 2118 - { id: 9, class: g8rc, preferred-register: '' } 2119 - { id: 10, class: g8rc, preferred-register: '' } 2120 - { id: 11, class: g8rc, preferred-register: '' } 2121 - { id: 12, class: gprc, preferred-register: '' } 2122 - { id: 13, class: gprc, preferred-register: '' } 2123 - { id: 14, class: g8rc, preferred-register: '' } 2124 - { id: 15, class: g8rc, preferred-register: '' } 2125 - { id: 16, class: g8rc, preferred-register: '' } 2126liveins: 2127 - { reg: '$x3', virtual-reg: '%0' } 2128 - { reg: '$x4', virtual-reg: '%1' } 2129frameInfo: 2130 isFrameAddressTaken: false 2131 isReturnAddressTaken: false 2132 hasStackMap: false 2133 hasPatchPoint: false 2134 stackSize: 0 2135 offsetAdjustment: 0 2136 maxAlignment: 0 2137 adjustsStack: false 2138 hasCalls: false 2139 stackProtector: '' 2140 maxCallFrameSize: 4294967295 2141 hasOpaqueSPAdjustment: false 2142 hasVAStart: false 2143 hasMustTailInVarArgFunc: false 2144 savePoint: '' 2145 restorePoint: '' 2146fixedStack: 2147stack: 2148constants: 2149body: | 2150 bb.0.entry: 2151 liveins: $x3, $x4 2152 2153 %1 = COPY $x4 2154 %0 = LI8 45 2155 %2 = COPY %1.sub_32 2156 %3 = ADDI %2, 1 2157 %5 = IMPLICIT_DEF 2158 %4 = INSERT_SUBREG %5, killed %3, 1 2159 %6 = RLDICL killed %4, 0, 32 2160 %7 = LBZX %0, killed %6 :: (load 1 from %ir.arrayidx, !tbaa !3) 2161 ; CHECK: LBZ 45, killed %6 2162 ; CHECK-LATE: lbz 5, 45(5) 2163 %8 = ADDI %2, 2 2164 %10 = IMPLICIT_DEF 2165 %9 = INSERT_SUBREG %10, killed %8, 1 2166 %11 = RLDICL killed %9, 0, 32 2167 %12 = LBZX %0, killed %11 :: (load 1 from %ir.arrayidx3, !tbaa !3) 2168 ; CHECK: LBZ 45, killed %11 2169 ; CHECK-LATE: lbz 3, 45(4) 2170 %13 = ADD4 killed %12, killed %7 2171 %15 = IMPLICIT_DEF 2172 %14 = INSERT_SUBREG %15, killed %13, 1 2173 %16 = RLWINM8 killed %14, 0, 24, 31 2174 $x3 = COPY %16 2175 BLR8 implicit $lr8, implicit $rm, implicit $x3 2176 2177... 2178--- 2179name: testLHZUX 2180# CHECK-ALL: name: testLHZUX 2181alignment: 4 2182exposesReturnsTwice: false 2183legalized: false 2184regBankSelected: false 2185selected: false 2186tracksRegLiveness: true 2187registers: 2188 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2189 - { id: 1, class: g8rc, preferred-register: '' } 2190 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2191 - { id: 3, class: gprc, preferred-register: '' } 2192 - { id: 4, class: g8rc, preferred-register: '' } 2193 - { id: 5, class: g8rc, preferred-register: '' } 2194 - { id: 6, class: g8rc, preferred-register: '' } 2195 - { id: 7, class: gprc, preferred-register: '' } 2196 - { id: 8, class: gprc, preferred-register: '' } 2197 - { id: 9, class: g8rc, preferred-register: '' } 2198 - { id: 10, class: g8rc, preferred-register: '' } 2199 - { id: 11, class: g8rc, preferred-register: '' } 2200 - { id: 12, class: gprc, preferred-register: '' } 2201 - { id: 13, class: gprc, preferred-register: '' } 2202 - { id: 14, class: g8rc, preferred-register: '' } 2203 - { id: 15, class: g8rc, preferred-register: '' } 2204 - { id: 16, class: g8rc, preferred-register: '' } 2205 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2206liveins: 2207 - { reg: '$x3', virtual-reg: '%0' } 2208 - { reg: '$x4', virtual-reg: '%1' } 2209frameInfo: 2210 isFrameAddressTaken: false 2211 isReturnAddressTaken: false 2212 hasStackMap: false 2213 hasPatchPoint: false 2214 stackSize: 0 2215 offsetAdjustment: 0 2216 maxAlignment: 0 2217 adjustsStack: false 2218 hasCalls: false 2219 stackProtector: '' 2220 maxCallFrameSize: 4294967295 2221 hasOpaqueSPAdjustment: false 2222 hasVAStart: false 2223 hasMustTailInVarArgFunc: false 2224 savePoint: '' 2225 restorePoint: '' 2226fixedStack: 2227stack: 2228constants: 2229body: | 2230 bb.0.entry: 2231 liveins: $x3, $x4 2232 2233 %1 = COPY $x4 2234 %0 = COPY $x3 2235 %2 = COPY %1.sub_32 2236 %3 = ADDI %2, 1 2237 %5 = IMPLICIT_DEF 2238 %4 = INSERT_SUBREG %5, killed %3, 1 2239 %6 = RLDIC killed %4, 1, 31 2240 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6) 2241 %8 = ADDI %2, 2 2242 %10 = IMPLICIT_DEF 2243 %9 = INSERT_SUBREG %10, killed %8, 1 2244 %11 = LI8 31440 2245 %12,%17 = LHZUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6) 2246 ; CHECK: LHZU 31440, %0 2247 ; CHECK-LATE: lhzu 5, 31440(3) 2248 %13 = ADD4 killed %12, killed %7 2249 %15 = IMPLICIT_DEF 2250 %14 = INSERT_SUBREG %15, killed %13, 1 2251 %16 = RLWINM8 killed %14, 0, 16, 31 2252 $x3 = COPY %16 2253 BLR8 implicit $lr8, implicit $rm, implicit $x3 2254 2255... 2256--- 2257name: testLHZX 2258# CHECK-ALL: name: testLHZX 2259alignment: 4 2260exposesReturnsTwice: false 2261legalized: false 2262regBankSelected: false 2263selected: false 2264tracksRegLiveness: true 2265registers: 2266 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2267 - { id: 1, class: g8rc, preferred-register: '' } 2268 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2269 - { id: 3, class: gprc, preferred-register: '' } 2270 - { id: 4, class: g8rc, preferred-register: '' } 2271 - { id: 5, class: g8rc, preferred-register: '' } 2272 - { id: 6, class: g8rc, preferred-register: '' } 2273 - { id: 7, class: gprc, preferred-register: '' } 2274 - { id: 8, class: gprc, preferred-register: '' } 2275 - { id: 9, class: g8rc, preferred-register: '' } 2276 - { id: 10, class: g8rc, preferred-register: '' } 2277 - { id: 11, class: g8rc, preferred-register: '' } 2278 - { id: 12, class: gprc, preferred-register: '' } 2279 - { id: 13, class: gprc, preferred-register: '' } 2280 - { id: 14, class: g8rc, preferred-register: '' } 2281 - { id: 15, class: g8rc, preferred-register: '' } 2282 - { id: 16, class: g8rc, preferred-register: '' } 2283liveins: 2284 - { reg: '$x3', virtual-reg: '%0' } 2285 - { reg: '$x4', virtual-reg: '%1' } 2286frameInfo: 2287 isFrameAddressTaken: false 2288 isReturnAddressTaken: false 2289 hasStackMap: false 2290 hasPatchPoint: false 2291 stackSize: 0 2292 offsetAdjustment: 0 2293 maxAlignment: 0 2294 adjustsStack: false 2295 hasCalls: false 2296 stackProtector: '' 2297 maxCallFrameSize: 4294967295 2298 hasOpaqueSPAdjustment: false 2299 hasVAStart: false 2300 hasMustTailInVarArgFunc: false 2301 savePoint: '' 2302 restorePoint: '' 2303fixedStack: 2304stack: 2305constants: 2306body: | 2307 bb.0.entry: 2308 liveins: $x3, $x4 2309 2310 %1 = COPY $x4 2311 %0 = COPY $x3 2312 %2 = COPY %1.sub_32 2313 %3 = ADDI %2, 1 2314 %5 = IMPLICIT_DEF 2315 %4 = INSERT_SUBREG %5, killed %3, 1 2316 %6 = RLDIC killed %4, 1, 31 2317 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6) 2318 %8 = ADDI %2, 2 2319 %10 = IMPLICIT_DEF 2320 %9 = INSERT_SUBREG %10, killed %8, 1 2321 %11 = LI8 882 2322 %12 = LHZX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6) 2323 ; CHECK: LHZ 882, %0 2324 ; CHECK-LATE: lhz 3, 882(3) 2325 %13 = ADD4 killed %12, killed %7 2326 %15 = IMPLICIT_DEF 2327 %14 = INSERT_SUBREG %15, killed %13, 1 2328 %16 = RLWINM8 killed %14, 0, 16, 31 2329 $x3 = COPY %16 2330 BLR8 implicit $lr8, implicit $rm, implicit $x3 2331 2332... 2333--- 2334name: testLHAUX 2335# CHECK-ALL: name: testLHAUX 2336alignment: 4 2337exposesReturnsTwice: false 2338legalized: false 2339regBankSelected: false 2340selected: false 2341tracksRegLiveness: true 2342registers: 2343 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2344 - { id: 1, class: g8rc, preferred-register: '' } 2345 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2346 - { id: 3, class: gprc, preferred-register: '' } 2347 - { id: 4, class: g8rc, preferred-register: '' } 2348 - { id: 5, class: g8rc, preferred-register: '' } 2349 - { id: 6, class: g8rc, preferred-register: '' } 2350 - { id: 7, class: gprc, preferred-register: '' } 2351 - { id: 8, class: gprc, preferred-register: '' } 2352 - { id: 9, class: g8rc, preferred-register: '' } 2353 - { id: 10, class: g8rc, preferred-register: '' } 2354 - { id: 11, class: g8rc, preferred-register: '' } 2355 - { id: 12, class: gprc, preferred-register: '' } 2356 - { id: 13, class: gprc, preferred-register: '' } 2357 - { id: 14, class: g8rc, preferred-register: '' } 2358 - { id: 15, class: g8rc, preferred-register: '' } 2359 - { id: 16, class: g8rc, preferred-register: '' } 2360 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2361liveins: 2362 - { reg: '$x3', virtual-reg: '%0' } 2363 - { reg: '$x4', virtual-reg: '%1' } 2364frameInfo: 2365 isFrameAddressTaken: false 2366 isReturnAddressTaken: false 2367 hasStackMap: false 2368 hasPatchPoint: false 2369 stackSize: 0 2370 offsetAdjustment: 0 2371 maxAlignment: 0 2372 adjustsStack: false 2373 hasCalls: false 2374 stackProtector: '' 2375 maxCallFrameSize: 4294967295 2376 hasOpaqueSPAdjustment: false 2377 hasVAStart: false 2378 hasMustTailInVarArgFunc: false 2379 savePoint: '' 2380 restorePoint: '' 2381fixedStack: 2382stack: 2383constants: 2384body: | 2385 bb.0.entry: 2386 liveins: $x3, $x4 2387 2388 %1 = COPY $x4 2389 %0 = COPY $x3 2390 %2 = COPY %1.sub_32 2391 %3 = ADDI %2, 1 2392 %5 = IMPLICIT_DEF 2393 %4 = INSERT_SUBREG %5, killed %3, 1 2394 %6 = RLDIC %4, 1, 31 2395 %7 = LHZX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6) 2396 %8 = ADDI %2, 2 2397 %10 = IMPLICIT_DEF 2398 %9 = INSERT_SUBREG %10, killed %8, 1 2399 %11 = LI8 400 2400 %12,%17 = LHAUX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6) 2401 ; CHECK: LHAU 400, %0 2402 ; CHECK-LATE: lhau 5, 400(3) 2403 %13 = ADD4 killed %12, killed %7 2404 %15 = IMPLICIT_DEF 2405 %14 = INSERT_SUBREG %15, killed %13, 1 2406 %16 = EXTSH8 killed %14 2407 $x3 = COPY %16 2408 BLR8 implicit $lr8, implicit $rm, implicit $x3 2409 2410... 2411--- 2412name: testLHAX 2413# CHECK-ALL: name: testLHAX 2414alignment: 4 2415exposesReturnsTwice: false 2416legalized: false 2417regBankSelected: false 2418selected: false 2419tracksRegLiveness: true 2420registers: 2421 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2422 - { id: 1, class: g8rc, preferred-register: '' } 2423 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2424 - { id: 3, class: gprc, preferred-register: '' } 2425 - { id: 4, class: g8rc, preferred-register: '' } 2426 - { id: 5, class: g8rc, preferred-register: '' } 2427 - { id: 6, class: g8rc, preferred-register: '' } 2428 - { id: 7, class: gprc, preferred-register: '' } 2429 - { id: 8, class: gprc, preferred-register: '' } 2430 - { id: 9, class: g8rc, preferred-register: '' } 2431 - { id: 10, class: g8rc, preferred-register: '' } 2432 - { id: 11, class: g8rc, preferred-register: '' } 2433 - { id: 12, class: gprc, preferred-register: '' } 2434 - { id: 13, class: gprc, preferred-register: '' } 2435 - { id: 14, class: g8rc, preferred-register: '' } 2436 - { id: 15, class: g8rc, preferred-register: '' } 2437 - { id: 16, class: g8rc, preferred-register: '' } 2438liveins: 2439 - { reg: '$x3', virtual-reg: '%0' } 2440 - { reg: '$x4', virtual-reg: '%1' } 2441frameInfo: 2442 isFrameAddressTaken: false 2443 isReturnAddressTaken: false 2444 hasStackMap: false 2445 hasPatchPoint: false 2446 stackSize: 0 2447 offsetAdjustment: 0 2448 maxAlignment: 0 2449 adjustsStack: false 2450 hasCalls: false 2451 stackProtector: '' 2452 maxCallFrameSize: 4294967295 2453 hasOpaqueSPAdjustment: false 2454 hasVAStart: false 2455 hasMustTailInVarArgFunc: false 2456 savePoint: '' 2457 restorePoint: '' 2458fixedStack: 2459stack: 2460constants: 2461body: | 2462 bb.0.entry: 2463 liveins: $x3, $x4 2464 2465 %1 = COPY $x4 2466 %0 = COPY $x3 2467 %2 = COPY %1.sub_32 2468 %3 = ADDI %2, 1 2469 %5 = IMPLICIT_DEF 2470 %4 = INSERT_SUBREG %5, killed %3, 1 2471 %6 = LI8 -999 2472 %7 = LHAX %0, killed %6 :: (load 2 from %ir.arrayidx, !tbaa !6) 2473 ; CHECK: LHA -999, %0 2474 ; CHECK-LATE: lha 4, -999(3) 2475 %8 = ADDI %2, 2 2476 %10 = IMPLICIT_DEF 2477 %9 = INSERT_SUBREG %10, killed %8, 1 2478 %11 = LI8 999 2479 %12 = LHAX %0, killed %11 :: (load 2 from %ir.arrayidx3, !tbaa !6) 2480 ; CHECK: LHA 999, %0 2481 ; CHECK-LATE: lha 3, 999(3) 2482 %13 = ADD4 killed %12, killed %7 2483 %15 = IMPLICIT_DEF 2484 %14 = INSERT_SUBREG %15, killed %13, 1 2485 %16 = EXTSH8 killed %14 2486 $x3 = COPY %16 2487 BLR8 implicit $lr8, implicit $rm, implicit $x3 2488 2489... 2490--- 2491name: testLWZUX 2492# CHECK-ALL: name: testLWZUX 2493alignment: 4 2494exposesReturnsTwice: false 2495legalized: false 2496regBankSelected: false 2497selected: false 2498tracksRegLiveness: true 2499registers: 2500 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2501 - { id: 1, class: g8rc, preferred-register: '' } 2502 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2503 - { id: 3, class: gprc, preferred-register: '' } 2504 - { id: 4, class: g8rc, preferred-register: '' } 2505 - { id: 5, class: g8rc, preferred-register: '' } 2506 - { id: 6, class: g8rc, preferred-register: '' } 2507 - { id: 7, class: gprc, preferred-register: '' } 2508 - { id: 8, class: gprc, preferred-register: '' } 2509 - { id: 9, class: g8rc, preferred-register: '' } 2510 - { id: 10, class: g8rc, preferred-register: '' } 2511 - { id: 11, class: g8rc, preferred-register: '' } 2512 - { id: 12, class: gprc, preferred-register: '' } 2513 - { id: 13, class: gprc, preferred-register: '' } 2514 - { id: 14, class: g8rc, preferred-register: '' } 2515 - { id: 15, class: g8rc, preferred-register: '' } 2516 - { id: 16, class: g8rc, preferred-register: '' } 2517 - { id: 17, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2518 - { id: 18, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2519liveins: 2520 - { reg: '$x3', virtual-reg: '%0' } 2521 - { reg: '$x4', virtual-reg: '%1' } 2522frameInfo: 2523 isFrameAddressTaken: false 2524 isReturnAddressTaken: false 2525 hasStackMap: false 2526 hasPatchPoint: false 2527 stackSize: 0 2528 offsetAdjustment: 0 2529 maxAlignment: 0 2530 adjustsStack: false 2531 hasCalls: false 2532 stackProtector: '' 2533 maxCallFrameSize: 4294967295 2534 hasOpaqueSPAdjustment: false 2535 hasVAStart: false 2536 hasMustTailInVarArgFunc: false 2537 savePoint: '' 2538 restorePoint: '' 2539fixedStack: 2540stack: 2541constants: 2542body: | 2543 bb.0.entry: 2544 liveins: $x3, $x4 2545 2546 %1 = COPY $x4 2547 %0 = COPY $x3 2548 %2 = COPY %1.sub_32 2549 %3 = ADDI %2, 1 2550 %5 = IMPLICIT_DEF 2551 %4 = INSERT_SUBREG %5, killed %3, 1 2552 %6 = LI8 889 2553 %7,%17 = LWZUX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8) 2554 ; CHECK: LWZU 889, %0 2555 ; CHECK-LATE: lwzu {{[0-9]+}}, 889({{[0-9]+}}) 2556 %8 = ADDI %2, 2 2557 %10 = IMPLICIT_DEF 2558 %9 = INSERT_SUBREG %10, killed %8, 1 2559 %11 = LI8 -2 2560 %12,%18 = LWZUX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8) 2561 ; CHECK: LWZU -2, %0 2562 ; CHECK-LATE: lwzu {{[0-9]+}}, -2({{[0-9]+}}) 2563 %13 = ADD4 killed %12, killed %7 2564 %15 = IMPLICIT_DEF 2565 %14 = INSERT_SUBREG %15, killed %13, 1 2566 %16 = RLDICL killed %14, 0, 32 2567 $x3 = COPY %16 2568 BLR8 implicit $lr8, implicit $rm, implicit $x3 2569 2570... 2571--- 2572name: testLWZX 2573# CHECK-ALL: name: testLWZX 2574alignment: 4 2575exposesReturnsTwice: false 2576legalized: false 2577regBankSelected: false 2578selected: false 2579tracksRegLiveness: true 2580registers: 2581 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2582 - { id: 1, class: g8rc, preferred-register: '' } 2583 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2584 - { id: 3, class: gprc, preferred-register: '' } 2585 - { id: 4, class: g8rc, preferred-register: '' } 2586 - { id: 5, class: g8rc, preferred-register: '' } 2587 - { id: 6, class: g8rc, preferred-register: '' } 2588 - { id: 7, class: gprc, preferred-register: '' } 2589 - { id: 8, class: gprc, preferred-register: '' } 2590 - { id: 9, class: g8rc, preferred-register: '' } 2591 - { id: 10, class: g8rc, preferred-register: '' } 2592 - { id: 11, class: g8rc, preferred-register: '' } 2593 - { id: 12, class: gprc, preferred-register: '' } 2594 - { id: 13, class: gprc, preferred-register: '' } 2595 - { id: 14, class: g8rc, preferred-register: '' } 2596 - { id: 15, class: g8rc, preferred-register: '' } 2597 - { id: 16, class: g8rc, preferred-register: '' } 2598liveins: 2599 - { reg: '$x3', virtual-reg: '%0' } 2600 - { reg: '$x4', virtual-reg: '%1' } 2601frameInfo: 2602 isFrameAddressTaken: false 2603 isReturnAddressTaken: false 2604 hasStackMap: false 2605 hasPatchPoint: false 2606 stackSize: 0 2607 offsetAdjustment: 0 2608 maxAlignment: 0 2609 adjustsStack: false 2610 hasCalls: false 2611 stackProtector: '' 2612 maxCallFrameSize: 4294967295 2613 hasOpaqueSPAdjustment: false 2614 hasVAStart: false 2615 hasMustTailInVarArgFunc: false 2616 savePoint: '' 2617 restorePoint: '' 2618fixedStack: 2619stack: 2620constants: 2621body: | 2622 bb.0.entry: 2623 liveins: $x3, $x4 2624 2625 %1 = COPY $x4 2626 %0 = LI8 1000 2627 %2 = COPY %1.sub_32 2628 %3 = ADDI %2, 1 2629 %5 = IMPLICIT_DEF 2630 %4 = INSERT_SUBREG %5, killed %3, 1 2631 %6 = RLDIC %4, 2, 30 2632 %7 = LWZX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8) 2633 ; CHECK: LWZ 1000, killed %6 2634 ; CHECK-LATE: lwz 5, 1000(5) 2635 %8 = ADDI %2, 2 2636 %10 = IMPLICIT_DEF 2637 %9 = INSERT_SUBREG %10, killed %8, 1 2638 %11 = RLDIC %9, 2, 30 2639 %12 = LWZX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8) 2640 ; CHECK: LWZ 1000, killed %11 2641 ; CHECK-LATE: lwz 3, 1000(4) 2642 %13 = ADD4 killed %12, killed %7 2643 %15 = IMPLICIT_DEF 2644 %14 = INSERT_SUBREG %15, killed %13, 1 2645 %16 = RLDICL killed %14, 0, 32 2646 $x3 = COPY %16 2647 BLR8 implicit $lr8, implicit $rm, implicit $x3 2648 2649... 2650--- 2651name: testLWAX 2652# CHECK-ALL: name: testLWAX 2653alignment: 4 2654exposesReturnsTwice: false 2655legalized: false 2656regBankSelected: false 2657selected: false 2658tracksRegLiveness: true 2659registers: 2660 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2661 - { id: 1, class: g8rc, preferred-register: '' } 2662 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2663 - { id: 3, class: gprc, preferred-register: '' } 2664 - { id: 4, class: g8rc, preferred-register: '' } 2665 - { id: 5, class: g8rc, preferred-register: '' } 2666 - { id: 6, class: g8rc, preferred-register: '' } 2667 - { id: 7, class: g8rc, preferred-register: '' } 2668 - { id: 8, class: gprc, preferred-register: '' } 2669 - { id: 9, class: g8rc, preferred-register: '' } 2670 - { id: 10, class: g8rc, preferred-register: '' } 2671 - { id: 11, class: g8rc, preferred-register: '' } 2672 - { id: 12, class: g8rc, preferred-register: '' } 2673 - { id: 13, class: g8rc, preferred-register: '' } 2674liveins: 2675 - { reg: '$x3', virtual-reg: '%0' } 2676 - { reg: '$x4', virtual-reg: '%1' } 2677frameInfo: 2678 isFrameAddressTaken: false 2679 isReturnAddressTaken: false 2680 hasStackMap: false 2681 hasPatchPoint: false 2682 stackSize: 0 2683 offsetAdjustment: 0 2684 maxAlignment: 0 2685 adjustsStack: false 2686 hasCalls: false 2687 stackProtector: '' 2688 maxCallFrameSize: 4294967295 2689 hasOpaqueSPAdjustment: false 2690 hasVAStart: false 2691 hasMustTailInVarArgFunc: false 2692 savePoint: '' 2693 restorePoint: '' 2694fixedStack: 2695stack: 2696constants: 2697body: | 2698 bb.0.entry: 2699 liveins: $x3, $x4 2700 2701 %1 = COPY $x4 2702 %0 = LI8 444 2703 %2 = COPY %1.sub_32 2704 %3 = ADDI %2, 1 2705 %5 = IMPLICIT_DEF 2706 %4 = INSERT_SUBREG %5, killed %3, 1 2707 %6 = RLDIC %4, 2, 30 2708 %7 = LWAX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !8) 2709 ; CHECK: LWA 444, killed %6 2710 ; CHECK-LATE: lwa 5, 444(5) 2711 %8 = ADDI %2, 2 2712 %10 = IMPLICIT_DEF 2713 %9 = INSERT_SUBREG %10, killed %8, 1 2714 %11 = RLDIC %9, 2, 30 2715 %12 = LWAX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !8) 2716 ; CHECK: LWA 444, killed %11 2717 ; CHECK-LATE: lwa 3, 444(4) 2718 %13 = ADD8 killed %12, killed %7 2719 $x3 = COPY %13 2720 BLR8 implicit $lr8, implicit $rm, implicit $x3 2721 2722... 2723--- 2724name: testLDUX 2725# CHECK-ALL: name: testLDUX 2726alignment: 4 2727exposesReturnsTwice: false 2728legalized: false 2729regBankSelected: false 2730selected: false 2731tracksRegLiveness: true 2732registers: 2733 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2734 - { id: 1, class: g8rc, preferred-register: '' } 2735 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2736 - { id: 3, class: gprc, preferred-register: '' } 2737 - { id: 4, class: g8rc, preferred-register: '' } 2738 - { id: 5, class: g8rc, preferred-register: '' } 2739 - { id: 6, class: g8rc, preferred-register: '' } 2740 - { id: 7, class: g8rc, preferred-register: '' } 2741 - { id: 8, class: gprc, preferred-register: '' } 2742 - { id: 9, class: g8rc, preferred-register: '' } 2743 - { id: 10, class: g8rc, preferred-register: '' } 2744 - { id: 11, class: g8rc, preferred-register: '' } 2745 - { id: 12, class: g8rc, preferred-register: '' } 2746 - { id: 13, class: g8rc, preferred-register: '' } 2747 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2748 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2749liveins: 2750 - { reg: '$x3', virtual-reg: '%0' } 2751 - { reg: '$x4', virtual-reg: '%1' } 2752frameInfo: 2753 isFrameAddressTaken: false 2754 isReturnAddressTaken: false 2755 hasStackMap: false 2756 hasPatchPoint: false 2757 stackSize: 0 2758 offsetAdjustment: 0 2759 maxAlignment: 0 2760 adjustsStack: false 2761 hasCalls: false 2762 stackProtector: '' 2763 maxCallFrameSize: 4294967295 2764 hasOpaqueSPAdjustment: false 2765 hasVAStart: false 2766 hasMustTailInVarArgFunc: false 2767 savePoint: '' 2768 restorePoint: '' 2769fixedStack: 2770stack: 2771constants: 2772body: | 2773 bb.0.entry: 2774 liveins: $x3, $x4 2775 2776 %1 = COPY $x4 2777 %0 = COPY $x3 2778 %2 = COPY %1.sub_32 2779 %3 = ADDI %2, 1 2780 %5 = IMPLICIT_DEF 2781 %4 = INSERT_SUBREG %5, killed %3, 1 2782 %6 = LI8 100 2783 %7,%14 = LDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10) 2784 ; CHECK: LDU 100, %0 2785 ; CHECK-LATE: ldu {{[0-9]+}}, 100({{[0-9]+}}) 2786 %8 = ADDI %2, 2 2787 %10 = IMPLICIT_DEF 2788 %9 = INSERT_SUBREG %10, killed %8, 1 2789 %11 = LI8 200 2790 %12,%15 = LDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10) 2791 ; CHECK: LDU 200, %0 2792 ; CHECK-LATE: ldu {{[0-9]+}}, 200({{[0-9]+}}) 2793 %13 = ADD8 killed %12, killed %7 2794 $x3 = COPY %13 2795 BLR8 implicit $lr8, implicit $rm, implicit $x3 2796 2797... 2798--- 2799name: testLDX 2800# CHECK-ALL: name: testLDX 2801alignment: 4 2802exposesReturnsTwice: false 2803legalized: false 2804regBankSelected: false 2805selected: false 2806tracksRegLiveness: true 2807registers: 2808 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2809 - { id: 1, class: g8rc, preferred-register: '' } 2810 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2811 - { id: 3, class: gprc, preferred-register: '' } 2812 - { id: 4, class: g8rc, preferred-register: '' } 2813 - { id: 5, class: g8rc, preferred-register: '' } 2814 - { id: 6, class: g8rc, preferred-register: '' } 2815 - { id: 7, class: g8rc, preferred-register: '' } 2816 - { id: 8, class: gprc, preferred-register: '' } 2817 - { id: 9, class: g8rc, preferred-register: '' } 2818 - { id: 10, class: g8rc, preferred-register: '' } 2819 - { id: 11, class: g8rc, preferred-register: '' } 2820 - { id: 12, class: g8rc, preferred-register: '' } 2821 - { id: 13, class: g8rc, preferred-register: '' } 2822liveins: 2823 - { reg: '$x3', virtual-reg: '%0' } 2824 - { reg: '$x4', virtual-reg: '%1' } 2825frameInfo: 2826 isFrameAddressTaken: false 2827 isReturnAddressTaken: false 2828 hasStackMap: false 2829 hasPatchPoint: false 2830 stackSize: 0 2831 offsetAdjustment: 0 2832 maxAlignment: 0 2833 adjustsStack: false 2834 hasCalls: false 2835 stackProtector: '' 2836 maxCallFrameSize: 4294967295 2837 hasOpaqueSPAdjustment: false 2838 hasVAStart: false 2839 hasMustTailInVarArgFunc: false 2840 savePoint: '' 2841 restorePoint: '' 2842fixedStack: 2843stack: 2844constants: 2845body: | 2846 bb.0.entry: 2847 liveins: $x3, $x4 2848 2849 %1 = COPY $x4 2850 %0 = COPY $x3 2851 %2 = COPY %1.sub_32 2852 %3 = ADDI %2, 1 2853 %5 = IMPLICIT_DEF 2854 %4 = INSERT_SUBREG %5, killed %3, 1 2855 %6 = LI8 120 2856 %7 = LDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !10) 2857 ; CHECK: LD 120, %0 2858 ; CHECK-LATE: ld 4, 120(3) 2859 %8 = ADDI %2, 2 2860 %10 = IMPLICIT_DEF 2861 %9 = INSERT_SUBREG %10, killed %8, 1 2862 %11 = LI8 280 2863 %12 = LDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !10) 2864 ; CHECK: LD 280, %0 2865 ; CHECK-LATE: ld 3, 280(3) 2866 %13 = ADD8 killed %12, killed %7 2867 $x3 = COPY %13 2868 BLR8 implicit $lr8, implicit $rm, implicit $x3 2869 2870... 2871--- 2872name: testLFDUX 2873# CHECK-ALL: name: testLFDUX 2874alignment: 4 2875exposesReturnsTwice: false 2876legalized: false 2877regBankSelected: false 2878selected: false 2879tracksRegLiveness: true 2880registers: 2881 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2882 - { id: 1, class: g8rc, preferred-register: '' } 2883 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2884 - { id: 3, class: gprc, preferred-register: '' } 2885 - { id: 4, class: g8rc, preferred-register: '' } 2886 - { id: 5, class: g8rc, preferred-register: '' } 2887 - { id: 6, class: g8rc, preferred-register: '' } 2888 - { id: 7, class: f8rc, preferred-register: '' } 2889 - { id: 8, class: gprc, preferred-register: '' } 2890 - { id: 9, class: g8rc, preferred-register: '' } 2891 - { id: 10, class: g8rc, preferred-register: '' } 2892 - { id: 11, class: g8rc, preferred-register: '' } 2893 - { id: 12, class: f8rc, preferred-register: '' } 2894 - { id: 13, class: f8rc, preferred-register: '' } 2895 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2896 - { id: 15, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2897liveins: 2898 - { reg: '$x3', virtual-reg: '%0' } 2899 - { reg: '$x4', virtual-reg: '%1' } 2900frameInfo: 2901 isFrameAddressTaken: false 2902 isReturnAddressTaken: false 2903 hasStackMap: false 2904 hasPatchPoint: false 2905 stackSize: 0 2906 offsetAdjustment: 0 2907 maxAlignment: 0 2908 adjustsStack: false 2909 hasCalls: false 2910 stackProtector: '' 2911 maxCallFrameSize: 4294967295 2912 hasOpaqueSPAdjustment: false 2913 hasVAStart: false 2914 hasMustTailInVarArgFunc: false 2915 savePoint: '' 2916 restorePoint: '' 2917fixedStack: 2918stack: 2919constants: 2920body: | 2921 bb.0.entry: 2922 liveins: $x3, $x4 2923 2924 %1 = COPY $x4 2925 %0 = COPY $x3 2926 %2 = COPY %1.sub_32 2927 %3 = ADDI %2, 1 2928 %5 = IMPLICIT_DEF 2929 %4 = INSERT_SUBREG %5, killed %3, 1 2930 %6 = LI8 440 2931 %7,%14 = LFDUX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12) 2932 ; CHECK: LFDU 440, %0 2933 ; CHECK-LATE: lfdu {{[0-9]+}}, 440({{[0-9]+}}) 2934 %8 = ADDI %2, 2 2935 %10 = IMPLICIT_DEF 2936 %9 = INSERT_SUBREG %10, killed %8, 1 2937 %11 = LI8 16 2938 %12,%15 = LFDUX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12) 2939 ; CHECK: LFDU 16, %0 2940 ; CHECK-LATE: lfdu {{[0-9]+}}, 16({{[0-9]+}}) 2941 %13 = FADD killed %7, killed %12, implicit $rm 2942 $f1 = COPY %13 2943 BLR8 implicit $lr8, implicit $rm, implicit $f1 2944 2945... 2946--- 2947name: testLFDX 2948# CHECK-ALL: name: testLFDX 2949alignment: 4 2950exposesReturnsTwice: false 2951legalized: false 2952regBankSelected: false 2953selected: false 2954tracksRegLiveness: true 2955registers: 2956 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 2957 - { id: 1, class: g8rc, preferred-register: '' } 2958 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 2959 - { id: 3, class: gprc, preferred-register: '' } 2960 - { id: 4, class: g8rc, preferred-register: '' } 2961 - { id: 5, class: g8rc, preferred-register: '' } 2962 - { id: 6, class: g8rc, preferred-register: '' } 2963 - { id: 7, class: f8rc, preferred-register: '' } 2964 - { id: 8, class: gprc, preferred-register: '' } 2965 - { id: 9, class: g8rc, preferred-register: '' } 2966 - { id: 10, class: g8rc, preferred-register: '' } 2967 - { id: 11, class: g8rc, preferred-register: '' } 2968 - { id: 12, class: f8rc, preferred-register: '' } 2969 - { id: 13, class: f8rc, preferred-register: '' } 2970liveins: 2971 - { reg: '$x3', virtual-reg: '%0' } 2972 - { reg: '$x4', virtual-reg: '%1' } 2973frameInfo: 2974 isFrameAddressTaken: false 2975 isReturnAddressTaken: false 2976 hasStackMap: false 2977 hasPatchPoint: false 2978 stackSize: 0 2979 offsetAdjustment: 0 2980 maxAlignment: 0 2981 adjustsStack: false 2982 hasCalls: false 2983 stackProtector: '' 2984 maxCallFrameSize: 4294967295 2985 hasOpaqueSPAdjustment: false 2986 hasVAStart: false 2987 hasMustTailInVarArgFunc: false 2988 savePoint: '' 2989 restorePoint: '' 2990fixedStack: 2991stack: 2992constants: 2993body: | 2994 bb.0.entry: 2995 liveins: $x3, $x4 2996 2997 %1 = COPY $x4 2998 %0 = LI8 -20 2999 %2 = COPY %1.sub_32 3000 %3 = ADDI %2, 1 3001 %5 = IMPLICIT_DEF 3002 %4 = INSERT_SUBREG %5, killed %3, 1 3003 %6 = RLDIC %4, 3, 29 3004 %7 = LFDX %0, killed %6 :: (load 8 from %ir.arrayidx, !tbaa !12) 3005 ; CHECK: LFD -20, killed %6 3006 ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}}) 3007 %8 = ADDI %2, 2 3008 %10 = IMPLICIT_DEF 3009 %9 = INSERT_SUBREG %10, killed %8, 1 3010 %11 = RLDIC %9, 3, 29 3011 %12 = LFDX %0, killed %11 :: (load 8 from %ir.arrayidx3, !tbaa !12) 3012 ; CHECK: LFD -20, killed %11 3013 ; CHECK-LATE: lfd {{[0-9]+}}, -20({{[0-9]+}}) 3014 %13 = FADD killed %7, killed %12, implicit $rm 3015 $f1 = COPY %13 3016 BLR8 implicit $lr8, implicit $rm, implicit $f1 3017 3018... 3019--- 3020name: testLFSUX 3021# CHECK-ALL: name: testLFSUX 3022alignment: 4 3023exposesReturnsTwice: false 3024legalized: false 3025regBankSelected: false 3026selected: false 3027tracksRegLiveness: true 3028registers: 3029 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3030 - { id: 1, class: g8rc, preferred-register: '' } 3031 - { id: 2, class: g8rc, preferred-register: '' } 3032 - { id: 3, class: f8rc, preferred-register: '' } 3033 - { id: 4, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3034 - { id: 5, class: f8rc, preferred-register: '' } 3035 - { id: 6, class: g8rc, preferred-register: '' } 3036 - { id: 7, class: gprc, preferred-register: '' } 3037 - { id: 8, class: f8rc, preferred-register: '' } 3038 - { id: 9, class: f8rc, preferred-register: '' } 3039 - { id: 10, class: f8rc, preferred-register: '' } 3040 - { id: 11, class: g8rc, preferred-register: '' } 3041 - { id: 12, class: gprc, preferred-register: '' } 3042 - { id: 13, class: f8rc, preferred-register: '' } 3043 - { id: 14, class: f8rc, preferred-register: '' } 3044 - { id: 15, class: f8rc, preferred-register: '' } 3045 - { id: 16, class: g8rc, preferred-register: '' } 3046 - { id: 17, class: gprc, preferred-register: '' } 3047 - { id: 18, class: f8rc, preferred-register: '' } 3048 - { id: 19, class: f8rc, preferred-register: '' } 3049 - { id: 20, class: f8rc, preferred-register: '' } 3050 - { id: 21, class: g8rc, preferred-register: '' } 3051 - { id: 22, class: gprc, preferred-register: '' } 3052 - { id: 23, class: g8rc, preferred-register: '' } 3053 - { id: 24, class: vrrc, preferred-register: '' } 3054liveins: 3055 - { reg: '$x3', virtual-reg: '%0' } 3056 - { reg: '$x4', virtual-reg: '%1' } 3057frameInfo: 3058 isFrameAddressTaken: false 3059 isReturnAddressTaken: false 3060 hasStackMap: false 3061 hasPatchPoint: false 3062 stackSize: 0 3063 offsetAdjustment: 0 3064 maxAlignment: 16 3065 adjustsStack: false 3066 hasCalls: false 3067 stackProtector: '' 3068 maxCallFrameSize: 4294967295 3069 hasOpaqueSPAdjustment: false 3070 hasVAStart: false 3071 hasMustTailInVarArgFunc: false 3072 savePoint: '' 3073 restorePoint: '' 3074fixedStack: 3075stack: 3076 - { id: 0, name: '', type: default, offset: 0, size: 16, alignment: 16, 3077 stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 3078 local-offset: -16, debug-info-variable: '', debug-info-expression: '', 3079 debug-info-location: '' } 3080 - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4, 3081 stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 3082 local-offset: -20, debug-info-variable: '', debug-info-expression: '', 3083 debug-info-location: '' } 3084 - { id: 2, name: '', type: default, offset: 0, size: 4, alignment: 4, 3085 stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 3086 local-offset: -24, debug-info-variable: '', debug-info-expression: '', 3087 debug-info-location: '' } 3088 - { id: 3, name: '', type: default, offset: 0, size: 4, alignment: 4, 3089 stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 3090 local-offset: -28, debug-info-variable: '', debug-info-expression: '', 3091 debug-info-location: '' } 3092 - { id: 4, name: '', type: default, offset: 0, size: 4, alignment: 4, 3093 stack-id: 0, callee-saved-register: '', callee-saved-restored: true, 3094 local-offset: -32, debug-info-variable: '', debug-info-expression: '', 3095 debug-info-location: '' } 3096constants: 3097body: | 3098 bb.0.entry: 3099 liveins: $x3, $x4 3100 3101 %1 = COPY $x4 3102 %0 = COPY $x3 3103 %2 = LI8 72 3104 %3, %4 = LFSUX %0, killed %2 :: (load 4 from %ir.arrayidx, !tbaa !14) 3105 ; CHECK: LFSU 72, %0 3106 ; CHECK-LATE: lfsu 0, 72(3) 3107 %5 = FCTIWUZ killed %3, implicit $rm 3108 %6 = ADDI8 %stack.4, 0 3109 STFIWX killed %5, $zero8, killed %6 3110 %7 = LWZ 0, %stack.4 :: (load 4 from %stack.4) 3111 %8 = LFS 4, %4 :: (load 4 from %ir.3, !tbaa !14) 3112 %10 = FCTIWUZ %8, implicit $rm 3113 %11 = ADDI8 %stack.1, 0 3114 STFIWX killed %10, $zero8, killed %11 3115 %12 = LWZ 0, %stack.1 :: (load 4 from %stack.1) 3116 %13 = LFS 8, %4 :: (load 4 from %ir.5, !tbaa !14) 3117 %15 = FCTIWUZ %13, implicit $rm 3118 %16 = ADDI8 %stack.2, 0 3119 STFIWX killed %15, $zero8, killed %16 3120 %17 = LWZ 0, %stack.2 :: (load 4 from %stack.2) 3121 %18 = LFS 12, %4 :: (load 4 from %ir.7, !tbaa !14) 3122 %20 = FCTIWUZ %18, implicit $rm 3123 %21 = ADDI8 %stack.3, 0 3124 STFIWX killed %20, $zero8, killed %21 3125 %22 = LWZ 0, %stack.3 :: (load 4 from %stack.3) 3126 STW killed %7, 0, %stack.0 :: (store 4 into %stack.0, align 16) 3127 STW killed %22, 12, %stack.0 :: (store 4 into %stack.0 + 12) 3128 STW killed %17, 8, %stack.0 :: (store 4 into %stack.0 + 8, align 8) 3129 STW killed %12, 4, %stack.0 :: (store 4 into %stack.0 + 4) 3130 %23 = ADDI8 %stack.0, 0 3131 %24 = LVX $zero8, killed %23 :: (load 16 from %stack.0) 3132 $v2 = COPY %24 3133 BLR8 implicit $lr8, implicit $rm, implicit $v2 3134 3135... 3136--- 3137name: testLFSX 3138# CHECK-ALL: name: testLFSX 3139alignment: 4 3140exposesReturnsTwice: false 3141legalized: false 3142regBankSelected: false 3143selected: false 3144tracksRegLiveness: true 3145registers: 3146 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3147 - { id: 1, class: g8rc, preferred-register: '' } 3148 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 3149 - { id: 3, class: gprc, preferred-register: '' } 3150 - { id: 4, class: g8rc, preferred-register: '' } 3151 - { id: 5, class: g8rc, preferred-register: '' } 3152 - { id: 6, class: g8rc, preferred-register: '' } 3153 - { id: 7, class: f4rc, preferred-register: '' } 3154 - { id: 8, class: gprc, preferred-register: '' } 3155 - { id: 9, class: g8rc, preferred-register: '' } 3156 - { id: 10, class: g8rc, preferred-register: '' } 3157 - { id: 11, class: g8rc, preferred-register: '' } 3158 - { id: 12, class: f4rc, preferred-register: '' } 3159 - { id: 13, class: f4rc, preferred-register: '' } 3160liveins: 3161 - { reg: '$x3', virtual-reg: '%0' } 3162 - { reg: '$x4', virtual-reg: '%1' } 3163frameInfo: 3164 isFrameAddressTaken: false 3165 isReturnAddressTaken: false 3166 hasStackMap: false 3167 hasPatchPoint: false 3168 stackSize: 0 3169 offsetAdjustment: 0 3170 maxAlignment: 0 3171 adjustsStack: false 3172 hasCalls: false 3173 stackProtector: '' 3174 maxCallFrameSize: 4294967295 3175 hasOpaqueSPAdjustment: false 3176 hasVAStart: false 3177 hasMustTailInVarArgFunc: false 3178 savePoint: '' 3179 restorePoint: '' 3180fixedStack: 3181stack: 3182constants: 3183body: | 3184 bb.0.entry: 3185 liveins: $x3, $x4 3186 3187 %1 = COPY $x4 3188 %0 = COPY $x3 3189 %2 = COPY %1.sub_32 3190 %3 = ADDI %2, 1 3191 %5 = IMPLICIT_DEF 3192 %4 = INSERT_SUBREG %5, killed %3, 1 3193 %6 = LI8 88 3194 %7 = LFSX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14) 3195 ; CHECK: LFS 88, %0 3196 ; CHECK-LATE: lfs 0, 88(3) 3197 %8 = ADDI %2, 2 3198 %10 = IMPLICIT_DEF 3199 %9 = INSERT_SUBREG %10, killed %8, 1 3200 %11 = LI8 -88 3201 %12 = LFSX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14) 3202 ; CHECK: LFS -88, %0 3203 ; CHECK-LATE: lfs 1, -88(3) 3204 %13 = FADDS killed %7, killed %12, implicit $rm 3205 $f1 = COPY %13 3206 BLR8 implicit $lr8, implicit $rm, implicit $f1 3207 3208... 3209--- 3210name: testLXSDX 3211# CHECK-ALL: name: testLXSDX 3212alignment: 4 3213exposesReturnsTwice: false 3214legalized: false 3215regBankSelected: false 3216selected: false 3217tracksRegLiveness: true 3218registers: 3219 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3220 - { id: 1, class: g8rc, preferred-register: '' } 3221 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 3222 - { id: 3, class: gprc, preferred-register: '' } 3223 - { id: 4, class: g8rc, preferred-register: '' } 3224 - { id: 5, class: g8rc, preferred-register: '' } 3225 - { id: 6, class: g8rc, preferred-register: '' } 3226 - { id: 7, class: vsfrc, preferred-register: '' } 3227 - { id: 8, class: gprc, preferred-register: '' } 3228 - { id: 9, class: g8rc, preferred-register: '' } 3229 - { id: 10, class: g8rc, preferred-register: '' } 3230 - { id: 11, class: g8rc, preferred-register: '' } 3231 - { id: 12, class: vsfrc, preferred-register: '' } 3232 - { id: 13, class: vsfrc, preferred-register: '' } 3233liveins: 3234 - { reg: '$x3', virtual-reg: '%0' } 3235 - { reg: '$x4', virtual-reg: '%1' } 3236frameInfo: 3237 isFrameAddressTaken: false 3238 isReturnAddressTaken: false 3239 hasStackMap: false 3240 hasPatchPoint: false 3241 stackSize: 0 3242 offsetAdjustment: 0 3243 maxAlignment: 0 3244 adjustsStack: false 3245 hasCalls: false 3246 stackProtector: '' 3247 maxCallFrameSize: 4294967295 3248 hasOpaqueSPAdjustment: false 3249 hasVAStart: false 3250 hasMustTailInVarArgFunc: false 3251 savePoint: '' 3252 restorePoint: '' 3253fixedStack: 3254stack: 3255constants: 3256body: | 3257 bb.0.entry: 3258 liveins: $x3, $x4 3259 3260 %1 = COPY $x4 3261 %0 = COPY $x3 3262 %2 = COPY %1.sub_32 3263 %3 = ADDI %2, 1 3264 %5 = IMPLICIT_DEF 3265 %4 = INSERT_SUBREG %5, killed %3, 1 3266 %6 = LI8 100 3267 %7 = LXSDX %0, killed %6, implicit $rm :: (load 8 from %ir.arrayidx, !tbaa !12) 3268 ; CHECK: DFLOADf64 100, %0 3269 ; CHECK-LATE: lfd 0, 100(3) 3270 %8 = ADDI %2, 2 3271 %10 = IMPLICIT_DEF 3272 %9 = INSERT_SUBREG %10, killed %8, 1 3273 %11 = LI8 -120 3274 %12 = LXSDX %0, killed %11, implicit $rm :: (load 8 from %ir.arrayidx3, !tbaa !12) 3275 ; CHECK: DFLOADf64 -120, %0 3276 ; CHECK-LATE: lfd 1, -120(3) 3277 %13 = XSADDDP killed %7, killed %12, implicit $rm 3278 $f1 = COPY %13 3279 BLR8 implicit $lr8, implicit $rm, implicit $f1 3280 3281... 3282--- 3283name: testLXSSPX 3284# CHECK-ALL: name: testLXSSPX 3285alignment: 4 3286exposesReturnsTwice: false 3287legalized: false 3288regBankSelected: false 3289selected: false 3290tracksRegLiveness: true 3291registers: 3292 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3293 - { id: 1, class: g8rc, preferred-register: '' } 3294 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 3295 - { id: 3, class: gprc, preferred-register: '' } 3296 - { id: 4, class: g8rc, preferred-register: '' } 3297 - { id: 5, class: g8rc, preferred-register: '' } 3298 - { id: 6, class: g8rc, preferred-register: '' } 3299 - { id: 7, class: vssrc, preferred-register: '' } 3300 - { id: 8, class: gprc, preferred-register: '' } 3301 - { id: 9, class: g8rc, preferred-register: '' } 3302 - { id: 10, class: g8rc, preferred-register: '' } 3303 - { id: 11, class: g8rc, preferred-register: '' } 3304 - { id: 12, class: vssrc, preferred-register: '' } 3305 - { id: 13, class: vssrc, preferred-register: '' } 3306liveins: 3307 - { reg: '$x3', virtual-reg: '%0' } 3308 - { reg: '$x4', virtual-reg: '%1' } 3309frameInfo: 3310 isFrameAddressTaken: false 3311 isReturnAddressTaken: false 3312 hasStackMap: false 3313 hasPatchPoint: false 3314 stackSize: 0 3315 offsetAdjustment: 0 3316 maxAlignment: 0 3317 adjustsStack: false 3318 hasCalls: false 3319 stackProtector: '' 3320 maxCallFrameSize: 4294967295 3321 hasOpaqueSPAdjustment: false 3322 hasVAStart: false 3323 hasMustTailInVarArgFunc: false 3324 savePoint: '' 3325 restorePoint: '' 3326fixedStack: 3327stack: 3328constants: 3329body: | 3330 bb.0.entry: 3331 liveins: $x3, $x4 3332 3333 %1 = COPY $x4 3334 %0 = COPY $x3 3335 %2 = COPY %1.sub_32 3336 %3 = ADDI %2, 1 3337 %5 = IMPLICIT_DEF 3338 %4 = INSERT_SUBREG %5, killed %3, 1 3339 %6 = LI8 96 3340 %7 = LXSSPX %0, killed %6 :: (load 4 from %ir.arrayidx, !tbaa !14) 3341 ; CHECK: DFLOADf32 96, %0 3342 ; CHECK-LATE: lfs 0, 96(3) 3343 %8 = ADDI %2, 2 3344 %10 = IMPLICIT_DEF 3345 %9 = INSERT_SUBREG %10, killed %8, 1 3346 %11 = LI8 -92 3347 %12 = LXSSPX %0, killed %11 :: (load 4 from %ir.arrayidx3, !tbaa !14) 3348 ; CHECK: DFLOADf32 -92, %0 3349 ; CHECK-LATE: lfs 1, -92(3) 3350 %13 = XSADDSP killed %7, killed %12 3351 $f1 = COPY %13 3352 BLR8 implicit $lr8, implicit $rm, implicit $f1 3353 3354... 3355--- 3356name: testLXVX 3357# CHECK-ALL: name: testLXVX 3358alignment: 4 3359exposesReturnsTwice: false 3360legalized: false 3361regBankSelected: false 3362selected: false 3363tracksRegLiveness: true 3364registers: 3365 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3366 - { id: 1, class: g8rc, preferred-register: '' } 3367 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 3368 - { id: 3, class: gprc, preferred-register: '' } 3369 - { id: 4, class: g8rc, preferred-register: '' } 3370 - { id: 5, class: g8rc, preferred-register: '' } 3371 - { id: 6, class: g8rc, preferred-register: '' } 3372 - { id: 7, class: vrrc, preferred-register: '' } 3373 - { id: 8, class: gprc, preferred-register: '' } 3374 - { id: 9, class: g8rc, preferred-register: '' } 3375 - { id: 10, class: g8rc, preferred-register: '' } 3376 - { id: 11, class: g8rc, preferred-register: '' } 3377 - { id: 12, class: vrrc, preferred-register: '' } 3378 - { id: 13, class: vrrc, preferred-register: '' } 3379liveins: 3380 - { reg: '$x3', virtual-reg: '%0' } 3381 - { reg: '$x4', virtual-reg: '%1' } 3382frameInfo: 3383 isFrameAddressTaken: false 3384 isReturnAddressTaken: false 3385 hasStackMap: false 3386 hasPatchPoint: false 3387 stackSize: 0 3388 offsetAdjustment: 0 3389 maxAlignment: 0 3390 adjustsStack: false 3391 hasCalls: false 3392 stackProtector: '' 3393 maxCallFrameSize: 4294967295 3394 hasOpaqueSPAdjustment: false 3395 hasVAStart: false 3396 hasMustTailInVarArgFunc: false 3397 savePoint: '' 3398 restorePoint: '' 3399fixedStack: 3400stack: 3401constants: 3402body: | 3403 bb.0.entry: 3404 liveins: $x3, $x4 3405 3406 %1 = COPY $x4 3407 %0 = COPY $x3 3408 %2 = COPY %1.sub_32 3409 %3 = ADDI %2, 1 3410 %5 = IMPLICIT_DEF 3411 %4 = INSERT_SUBREG %5, killed %3, 1 3412 %6 = LI8 32 3413 %7 = LXVX %0, killed %6 :: (load 16 from %ir.arrayidx, !tbaa !3) 3414 ; CHECK: LXV 32, %0 3415 ; CHECK-LATE: lxv 34, 32(3) 3416 %8 = ADDI %2, 2 3417 %10 = IMPLICIT_DEF 3418 %9 = INSERT_SUBREG %10, killed %8, 1 3419 %11 = LI8 -16 3420 %12 = LXVX %0, killed %11 :: (load 16 from %ir.arrayidx3, !tbaa !3) 3421 ; CHECK: LXV -16, %0 3422 ; CHECK-LATE: lxv 35, -16(3) 3423 %13 = VADDUWM killed %12, killed %7 3424 $v2 = COPY %13 3425 BLR8 implicit $lr8, implicit $rm, implicit $v2 3426 3427... 3428--- 3429name: testOR 3430# CHECK-ALL: name: testOR 3431alignment: 4 3432exposesReturnsTwice: false 3433legalized: false 3434regBankSelected: false 3435selected: false 3436tracksRegLiveness: true 3437registers: 3438 - { id: 0, class: gprc, preferred-register: '' } 3439 - { id: 1, class: g8rc, preferred-register: '' } 3440 - { id: 2, class: gprc, preferred-register: '' } 3441 - { id: 3, class: gprc, preferred-register: '' } 3442liveins: 3443 - { reg: '$x3', virtual-reg: '%0' } 3444 - { reg: '$x4', virtual-reg: '%1' } 3445frameInfo: 3446 isFrameAddressTaken: false 3447 isReturnAddressTaken: false 3448 hasStackMap: false 3449 hasPatchPoint: false 3450 stackSize: 0 3451 offsetAdjustment: 0 3452 maxAlignment: 0 3453 adjustsStack: false 3454 hasCalls: false 3455 stackProtector: '' 3456 maxCallFrameSize: 4294967295 3457 hasOpaqueSPAdjustment: false 3458 hasVAStart: false 3459 hasMustTailInVarArgFunc: false 3460 savePoint: '' 3461 restorePoint: '' 3462fixedStack: 3463stack: 3464constants: 3465body: | 3466 bb.0.entry: 3467 liveins: $x3, $x4 3468 3469 %1 = COPY $x4 3470 %0 = LI 99 3471 %3 = COPY %1.sub_32 3472 %2 = OR %0, %3 3473 ; CHECK: ORI %3, 99 3474 ; CHECK-LATE: ori 3, 4, 99 3475 $x3 = EXTSW_32_64 %2 3476 BLR8 implicit $lr8, implicit $rm, implicit $x3 3477 3478... 3479--- 3480name: testOR8 3481# CHECK-ALL: name: testOR8 3482alignment: 4 3483exposesReturnsTwice: false 3484legalized: false 3485regBankSelected: false 3486selected: false 3487tracksRegLiveness: true 3488registers: 3489 - { id: 0, class: g8rc, preferred-register: '' } 3490 - { id: 1, class: g8rc, preferred-register: '' } 3491 - { id: 2, class: g8rc, preferred-register: '' } 3492liveins: 3493 - { reg: '$x3', virtual-reg: '%0' } 3494 - { reg: '$x4', virtual-reg: '%1' } 3495frameInfo: 3496 isFrameAddressTaken: false 3497 isReturnAddressTaken: false 3498 hasStackMap: false 3499 hasPatchPoint: false 3500 stackSize: 0 3501 offsetAdjustment: 0 3502 maxAlignment: 0 3503 adjustsStack: false 3504 hasCalls: false 3505 stackProtector: '' 3506 maxCallFrameSize: 4294967295 3507 hasOpaqueSPAdjustment: false 3508 hasVAStart: false 3509 hasMustTailInVarArgFunc: false 3510 savePoint: '' 3511 restorePoint: '' 3512fixedStack: 3513stack: 3514constants: 3515body: | 3516 bb.0.entry: 3517 liveins: $x3, $x4 3518 3519 %1 = COPY $x4 3520 %0 = LI8 777 3521 %2 = OR8 %1, %0 3522 ; CHECK: ORI8 %1, 777 3523 ; CHECK-LATE: ori 3, 4, 777 3524 $x3 = COPY %2 3525 BLR8 implicit $lr8, implicit $rm, implicit $x3 3526 3527... 3528--- 3529name: testORI 3530# CHECK-ALL: name: testORI 3531alignment: 4 3532exposesReturnsTwice: false 3533legalized: false 3534regBankSelected: false 3535selected: false 3536tracksRegLiveness: true 3537registers: 3538 - { id: 0, class: gprc, preferred-register: '' } 3539 - { id: 1, class: gprc, preferred-register: '' } 3540liveins: 3541 - { reg: '$x3', virtual-reg: '%0' } 3542frameInfo: 3543 isFrameAddressTaken: false 3544 isReturnAddressTaken: false 3545 hasStackMap: false 3546 hasPatchPoint: false 3547 stackSize: 0 3548 offsetAdjustment: 0 3549 maxAlignment: 0 3550 adjustsStack: false 3551 hasCalls: false 3552 stackProtector: '' 3553 maxCallFrameSize: 4294967295 3554 hasOpaqueSPAdjustment: false 3555 hasVAStart: false 3556 hasMustTailInVarArgFunc: false 3557 savePoint: '' 3558 restorePoint: '' 3559fixedStack: 3560stack: 3561constants: 3562body: | 3563 bb.0.entry: 3564 liveins: $x3 3565 3566 %0 = LI 777 3567 %1 = ORI %0, 88 3568 ; CHECK: LI 857 3569 ; CHECK-LATE: li 3, 857 3570 $x3 = EXTSW_32_64 %1 3571 BLR8 implicit $lr8, implicit $rm, implicit $x3 3572 3573... 3574--- 3575name: testORI8 3576# CHECK-ALL: name: testORI8 3577alignment: 4 3578exposesReturnsTwice: false 3579legalized: false 3580regBankSelected: false 3581selected: false 3582tracksRegLiveness: true 3583registers: 3584 - { id: 0, class: g8rc, preferred-register: '' } 3585 - { id: 1, class: g8rc, preferred-register: '' } 3586liveins: 3587 - { reg: '$x3', virtual-reg: '%0' } 3588frameInfo: 3589 isFrameAddressTaken: false 3590 isReturnAddressTaken: false 3591 hasStackMap: false 3592 hasPatchPoint: false 3593 stackSize: 0 3594 offsetAdjustment: 0 3595 maxAlignment: 0 3596 adjustsStack: false 3597 hasCalls: false 3598 stackProtector: '' 3599 maxCallFrameSize: 4294967295 3600 hasOpaqueSPAdjustment: false 3601 hasVAStart: false 3602 hasMustTailInVarArgFunc: false 3603 savePoint: '' 3604 restorePoint: '' 3605fixedStack: 3606stack: 3607constants: 3608body: | 3609 bb.0.entry: 3610 liveins: $x3 3611 3612 %0 = LI8 8721 3613 %1 = ORI8 %0, 99 3614 ; CHECK: LI8 8819 3615 ; CHECK-LATE: li 3, 8819 3616 $x3 = COPY %1 3617 BLR8 implicit $lr8, implicit $rm, implicit $x3 3618 3619... 3620--- 3621name: testRLDCL 3622# CHECK-ALL: name: testRLDCL 3623alignment: 4 3624exposesReturnsTwice: false 3625legalized: false 3626regBankSelected: false 3627selected: false 3628tracksRegLiveness: true 3629registers: 3630 - { id: 0, class: g8rc, preferred-register: '' } 3631 - { id: 1, class: g8rc, preferred-register: '' } 3632 - { id: 2, class: gprc, preferred-register: '' } 3633 - { id: 3, class: gprc, preferred-register: '' } 3634 - { id: 4, class: g8rc, preferred-register: '' } 3635liveins: 3636 - { reg: '$x3', virtual-reg: '%0' } 3637 - { reg: '$x4', virtual-reg: '%1' } 3638frameInfo: 3639 isFrameAddressTaken: false 3640 isReturnAddressTaken: false 3641 hasStackMap: false 3642 hasPatchPoint: false 3643 stackSize: 0 3644 offsetAdjustment: 0 3645 maxAlignment: 0 3646 adjustsStack: false 3647 hasCalls: false 3648 stackProtector: '' 3649 maxCallFrameSize: 4294967295 3650 hasOpaqueSPAdjustment: false 3651 hasVAStart: false 3652 hasMustTailInVarArgFunc: false 3653 savePoint: '' 3654 restorePoint: '' 3655fixedStack: 3656stack: 3657constants: 3658body: | 3659 bb.0.entry: 3660 liveins: $x3, $x4 3661 3662 %1 = COPY $x4 3663 %0 = COPY $x3 3664 %2 = COPY %1.sub_32 3665 %3 = LI 14 3666 %4 = RLDCL %0, killed %3, 0 3667 ; CHECK: RLDICL %0, 14, 0 3668 ; CHECK-LATE: rotldi 3, 3, 14 3669 $x3 = COPY %4 3670 BLR8 implicit $lr8, implicit $rm, implicit $x3 3671 3672... 3673--- 3674name: testRLDCLo 3675# CHECK-ALL: name: testRLDCLo 3676alignment: 4 3677exposesReturnsTwice: false 3678legalized: false 3679regBankSelected: false 3680selected: false 3681tracksRegLiveness: true 3682registers: 3683 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3684 - { id: 1, class: g8rc, preferred-register: '' } 3685 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3686 - { id: 3, class: gprc, preferred-register: '' } 3687 - { id: 4, class: g8rc, preferred-register: '' } 3688 - { id: 5, class: crrc, preferred-register: '' } 3689 - { id: 6, class: g8rc, preferred-register: '' } 3690liveins: 3691 - { reg: '$x3', virtual-reg: '%0' } 3692 - { reg: '$x4', virtual-reg: '%1' } 3693frameInfo: 3694 isFrameAddressTaken: false 3695 isReturnAddressTaken: false 3696 hasStackMap: false 3697 hasPatchPoint: false 3698 stackSize: 0 3699 offsetAdjustment: 0 3700 maxAlignment: 0 3701 adjustsStack: false 3702 hasCalls: false 3703 stackProtector: '' 3704 maxCallFrameSize: 4294967295 3705 hasOpaqueSPAdjustment: false 3706 hasVAStart: false 3707 hasMustTailInVarArgFunc: false 3708 savePoint: '' 3709 restorePoint: '' 3710fixedStack: 3711stack: 3712constants: 3713body: | 3714 bb.0.entry: 3715 liveins: $x3, $x4 3716 3717 %1 = COPY $x4 3718 %0 = COPY $x3 3719 %2 = RLDICL %1, 0, 58 3720 %3 = LI 37 3721 %4 = RLDCLo %0, killed %3, 0, implicit-def $cr0 3722 ; CHECK: RLDICLo %0, 37, 0, implicit-def $cr0 3723 ; CHECK-LATE: rldicl. 5, 3, 37, 0 3724 %5 = COPY killed $cr0 3725 %6 = ISEL8 %2, %0, %5.sub_eq 3726 $x3 = COPY %6 3727 BLR8 implicit $lr8, implicit $rm, implicit $x3 3728 3729... 3730--- 3731name: testRLDCR 3732# CHECK-ALL: name: testRLDCR 3733alignment: 4 3734exposesReturnsTwice: false 3735legalized: false 3736regBankSelected: false 3737selected: false 3738tracksRegLiveness: true 3739registers: 3740 - { id: 0, class: g8rc, preferred-register: '' } 3741 - { id: 1, class: g8rc, preferred-register: '' } 3742 - { id: 2, class: gprc, preferred-register: '' } 3743 - { id: 3, class: gprc, preferred-register: '' } 3744 - { id: 4, class: g8rc, preferred-register: '' } 3745liveins: 3746 - { reg: '$x3', virtual-reg: '%0' } 3747 - { reg: '$x4', virtual-reg: '%1' } 3748frameInfo: 3749 isFrameAddressTaken: false 3750 isReturnAddressTaken: false 3751 hasStackMap: false 3752 hasPatchPoint: false 3753 stackSize: 0 3754 offsetAdjustment: 0 3755 maxAlignment: 0 3756 adjustsStack: false 3757 hasCalls: false 3758 stackProtector: '' 3759 maxCallFrameSize: 4294967295 3760 hasOpaqueSPAdjustment: false 3761 hasVAStart: false 3762 hasMustTailInVarArgFunc: false 3763 savePoint: '' 3764 restorePoint: '' 3765fixedStack: 3766stack: 3767constants: 3768body: | 3769 bb.0.entry: 3770 liveins: $x3, $x4 3771 3772 %1 = COPY $x4 3773 %0 = COPY $x3 3774 %2 = COPY %1.sub_32 3775 %3 = LI 0 3776 %4 = RLDCR %0, killed %3, 0 3777 ; CHECK: RLDICR %0, 0, 0 3778 ; CHECK-LATE: rldicr 3, 3, 0, 0 3779 $x3 = COPY %4 3780 BLR8 implicit $lr8, implicit $rm, implicit $x3 3781 3782... 3783--- 3784name: testRLDCRo 3785# CHECK-ALL: name: testRLDCRo 3786alignment: 4 3787exposesReturnsTwice: false 3788legalized: false 3789regBankSelected: false 3790selected: false 3791tracksRegLiveness: true 3792registers: 3793 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3794 - { id: 1, class: g8rc, preferred-register: '' } 3795 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3796 - { id: 3, class: gprc, preferred-register: '' } 3797 - { id: 4, class: g8rc, preferred-register: '' } 3798 - { id: 5, class: crrc, preferred-register: '' } 3799 - { id: 6, class: g8rc, preferred-register: '' } 3800liveins: 3801 - { reg: '$x3', virtual-reg: '%0' } 3802 - { reg: '$x4', virtual-reg: '%1' } 3803frameInfo: 3804 isFrameAddressTaken: false 3805 isReturnAddressTaken: false 3806 hasStackMap: false 3807 hasPatchPoint: false 3808 stackSize: 0 3809 offsetAdjustment: 0 3810 maxAlignment: 0 3811 adjustsStack: false 3812 hasCalls: false 3813 stackProtector: '' 3814 maxCallFrameSize: 4294967295 3815 hasOpaqueSPAdjustment: false 3816 hasVAStart: false 3817 hasMustTailInVarArgFunc: false 3818 savePoint: '' 3819 restorePoint: '' 3820fixedStack: 3821stack: 3822constants: 3823body: | 3824 bb.0.entry: 3825 liveins: $x3, $x4 3826 3827 %1 = COPY $x4 3828 %0 = COPY $x3 3829 %2 = RLDICL %1, 0, 58 3830 %3 = LI 18 3831 %4 = RLDCRo %0, killed %3, 0, implicit-def $cr0 3832 ; CHECK: RLDICRo %0, 18, 0, implicit-def $cr0 3833 ; CHECK-LATE: rldicr. 5, 3, 18, 0 3834 %5 = COPY killed $cr0 3835 %6 = ISEL8 %2, %0, %5.sub_eq 3836 $x3 = COPY %6 3837 BLR8 implicit $lr8, implicit $rm, implicit $x3 3838 3839... 3840--- 3841name: testRLDICL 3842# CHECK-ALL: name: testRLDICL 3843alignment: 4 3844exposesReturnsTwice: false 3845legalized: false 3846regBankSelected: false 3847selected: false 3848tracksRegLiveness: true 3849registers: 3850 - { id: 0, class: g8rc, preferred-register: '' } 3851 - { id: 1, class: g8rc, preferred-register: '' } 3852liveins: 3853 - { reg: '$x3', virtual-reg: '%0' } 3854frameInfo: 3855 isFrameAddressTaken: false 3856 isReturnAddressTaken: false 3857 hasStackMap: false 3858 hasPatchPoint: false 3859 stackSize: 0 3860 offsetAdjustment: 0 3861 maxAlignment: 0 3862 adjustsStack: false 3863 hasCalls: false 3864 stackProtector: '' 3865 maxCallFrameSize: 4294967295 3866 hasOpaqueSPAdjustment: false 3867 hasVAStart: false 3868 hasMustTailInVarArgFunc: false 3869 savePoint: '' 3870 restorePoint: '' 3871fixedStack: 3872stack: 3873constants: 3874body: | 3875 bb.0.entry: 3876 liveins: $x3 3877 3878 %0 = LI8 -1 3879 %1 = RLDICL %0, 53, 49 3880 ; CHECK: LI8 32767 3881 ; CHECK-LATE: li 3, 32767 3882 $x3 = COPY %1 3883 BLR8 implicit $lr8, implicit $rm, implicit $x3 3884 3885... 3886--- 3887name: testRLDICLo 3888# CHECK-ALL: name: testRLDICLo 3889alignment: 4 3890exposesReturnsTwice: false 3891legalized: false 3892regBankSelected: false 3893selected: false 3894tracksRegLiveness: true 3895registers: 3896 - { id: 0, class: g8rc, preferred-register: '' } 3897 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3898 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3899 - { id: 3, class: crrc, preferred-register: '' } 3900 - { id: 4, class: g8rc, preferred-register: '' } 3901liveins: 3902 - { reg: '$x3', virtual-reg: '%0' } 3903 - { reg: '$x4', virtual-reg: '%1' } 3904frameInfo: 3905 isFrameAddressTaken: false 3906 isReturnAddressTaken: false 3907 hasStackMap: false 3908 hasPatchPoint: false 3909 stackSize: 0 3910 offsetAdjustment: 0 3911 maxAlignment: 0 3912 adjustsStack: false 3913 hasCalls: false 3914 stackProtector: '' 3915 maxCallFrameSize: 4294967295 3916 hasOpaqueSPAdjustment: false 3917 hasVAStart: false 3918 hasMustTailInVarArgFunc: false 3919 savePoint: '' 3920 restorePoint: '' 3921fixedStack: 3922stack: 3923constants: 3924body: | 3925 bb.0.entry: 3926 liveins: $x3, $x4 3927 3928 %1 = COPY $x4 3929 %0 = LI8 -1 3930 %2 = RLDICLo %0, 53, 48, implicit-def $cr0 3931 ; CHECK: ANDIo8 %0, 65535 3932 ; CHECK-LATE: li 3, -1 3933 ; CHECK-LATE: andi. 3, 3, 65535 3934 %3 = COPY killed $cr0 3935 %4 = ISEL8 %1, %2, %3.sub_eq 3936 $x3 = COPY %4 3937 BLR8 implicit $lr8, implicit $rm, implicit $x3 3938 3939... 3940--- 3941name: testRLDICLo2 3942# CHECK-ALL: name: testRLDICLo2 3943alignment: 4 3944exposesReturnsTwice: false 3945legalized: false 3946regBankSelected: false 3947selected: false 3948tracksRegLiveness: true 3949registers: 3950 - { id: 0, class: g8rc, preferred-register: '' } 3951 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3952 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } 3953 - { id: 3, class: crrc, preferred-register: '' } 3954 - { id: 4, class: g8rc, preferred-register: '' } 3955liveins: 3956 - { reg: '$x3', virtual-reg: '%0' } 3957 - { reg: '$x4', virtual-reg: '%1' } 3958frameInfo: 3959 isFrameAddressTaken: false 3960 isReturnAddressTaken: false 3961 hasStackMap: false 3962 hasPatchPoint: false 3963 stackSize: 0 3964 offsetAdjustment: 0 3965 maxAlignment: 0 3966 adjustsStack: false 3967 hasCalls: false 3968 stackProtector: '' 3969 maxCallFrameSize: 4294967295 3970 hasOpaqueSPAdjustment: false 3971 hasVAStart: false 3972 hasMustTailInVarArgFunc: false 3973 savePoint: '' 3974 restorePoint: '' 3975fixedStack: 3976stack: 3977constants: 3978body: | 3979 bb.0.entry: 3980 liveins: $x3, $x4 3981 3982 %1 = COPY $x4 3983 %0 = LI8 200 3984 %2 = RLDICLo %0, 61, 3, implicit-def $cr0 3985 ; CHECK: LI8 25 3986 ; CHECK: ANDIo8 %0, 25 3987 ; CHECK-LATE-NOT: andi. 3988 %3 = COPY killed $cr0 3989 %4 = ISEL8 %1, %2, %3.sub_eq 3990 $x3 = COPY %4 3991 BLR8 implicit $lr8, implicit $rm, implicit $x3 3992 3993... 3994--- 3995name: testRLDICLo3 3996# CHECK-ALL: name: testRLDICLo3 3997alignment: 4 3998exposesReturnsTwice: false 3999legalized: false 4000regBankSelected: false 4001selected: false 4002tracksRegLiveness: true 4003registers: 4004 - { id: 0, class: g8rc, preferred-register: '' } 4005 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4006 - { id: 2, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4007 - { id: 3, class: crrc, preferred-register: '' } 4008 - { id: 4, class: g8rc, preferred-register: '' } 4009liveins: 4010 - { reg: '$x3', virtual-reg: '%0' } 4011 - { reg: '$x4', virtual-reg: '%1' } 4012frameInfo: 4013 isFrameAddressTaken: false 4014 isReturnAddressTaken: false 4015 hasStackMap: false 4016 hasPatchPoint: false 4017 stackSize: 0 4018 offsetAdjustment: 0 4019 maxAlignment: 0 4020 adjustsStack: false 4021 hasCalls: false 4022 stackProtector: '' 4023 maxCallFrameSize: 4294967295 4024 hasOpaqueSPAdjustment: false 4025 hasVAStart: false 4026 hasMustTailInVarArgFunc: false 4027 savePoint: '' 4028 restorePoint: '' 4029fixedStack: 4030stack: 4031constants: 4032body: | 4033 bb.0.entry: 4034 liveins: $x3, $x4 4035 4036 %1 = COPY $x4 4037 %0 = LI8 2 4038 %2 = RLDICLo %0, 32, 32, implicit-def $cr0 4039 ; CHECK: ANDIo8 %0, 0 4040 ; CHECK-LATE: li 3, 2 4041 ; CHECK-LATE: andi. 3, 3, 0 4042 %3 = COPY killed $cr0 4043 %4 = ISEL8 %1, %2, %3.sub_eq 4044 $x3 = COPY %4 4045 BLR8 implicit $lr8, implicit $rm, implicit $x3 4046 4047... 4048--- 4049name: testRLWINM 4050# CHECK-ALL: name: testRLWINM 4051alignment: 4 4052exposesReturnsTwice: false 4053legalized: false 4054regBankSelected: false 4055selected: false 4056tracksRegLiveness: true 4057registers: 4058 - { id: 0, class: g8rc, preferred-register: '' } 4059 - { id: 1, class: gprc, preferred-register: '' } 4060 - { id: 2, class: gprc, preferred-register: '' } 4061 - { id: 3, class: g8rc, preferred-register: '' } 4062 - { id: 4, class: gprc, preferred-register: '' } 4063liveins: 4064 - { reg: '$x3', virtual-reg: '%0' } 4065frameInfo: 4066 isFrameAddressTaken: false 4067 isReturnAddressTaken: false 4068 hasStackMap: false 4069 hasPatchPoint: false 4070 stackSize: 0 4071 offsetAdjustment: 0 4072 maxAlignment: 0 4073 adjustsStack: false 4074 hasCalls: false 4075 stackProtector: '' 4076 maxCallFrameSize: 4294967295 4077 hasOpaqueSPAdjustment: false 4078 hasVAStart: false 4079 hasMustTailInVarArgFunc: false 4080 savePoint: '' 4081 restorePoint: '' 4082fixedStack: 4083stack: 4084constants: 4085body: | 4086 bb.0.entry: 4087 liveins: $x3 4088 4089 %0 = COPY $x3 4090 %1 = COPY %0.sub_32 4091 %3 = IMPLICIT_DEF 4092 %2 = LI 17 4093 %4 = RLWINM killed %2, 4, 20, 27 4094 ; CHECK: LI 272 4095 ; CHECK-LATE: li 3, 272 4096 $x3 = EXTSW_32_64 %4 4097 BLR8 implicit $lr8, implicit $rm, implicit $x3 4098 4099... 4100--- 4101name: testRLWINMFullReg 4102# CHECK-ALL: name: testRLWINMFullReg 4103alignment: 4 4104exposesReturnsTwice: false 4105legalized: false 4106regBankSelected: false 4107selected: false 4108tracksRegLiveness: true 4109registers: 4110 - { id: 0, class: g8rc, preferred-register: '' } 4111 - { id: 1, class: gprc, preferred-register: '' } 4112 - { id: 2, class: gprc, preferred-register: '' } 4113 - { id: 3, class: g8rc, preferred-register: '' } 4114 - { id: 4, class: gprc, preferred-register: '' } 4115liveins: 4116 - { reg: '$x3', virtual-reg: '%0' } 4117frameInfo: 4118 isFrameAddressTaken: false 4119 isReturnAddressTaken: false 4120 hasStackMap: false 4121 hasPatchPoint: false 4122 stackSize: 0 4123 offsetAdjustment: 0 4124 maxAlignment: 0 4125 adjustsStack: false 4126 hasCalls: false 4127 stackProtector: '' 4128 maxCallFrameSize: 4294967295 4129 hasOpaqueSPAdjustment: false 4130 hasVAStart: false 4131 hasMustTailInVarArgFunc: false 4132 savePoint: '' 4133 restorePoint: '' 4134fixedStack: 4135stack: 4136constants: 4137body: | 4138 bb.0.entry: 4139 liveins: $x3 4140 4141 %0 = COPY $x3 4142 %1 = COPY %0.sub_32 4143 %3 = IMPLICIT_DEF 4144 %2 = LI 2 4145 %4 = RLWINM killed %2, 31, 0, 31 4146 ; CHECK: LI 1 4147 ; CHECK-LATE: li 3, 1 4148 $x3 = EXTSW_32_64 %4 4149 BLR8 implicit $lr8, implicit $rm, implicit $x3 4150 4151... 4152--- 4153name: testRLWINMFullRegOutOfRange 4154# CHECK-ALL: name: testRLWINMFullRegOutOfRange 4155alignment: 4 4156exposesReturnsTwice: false 4157legalized: false 4158regBankSelected: false 4159selected: false 4160tracksRegLiveness: true 4161registers: 4162 - { id: 0, class: g8rc, preferred-register: '' } 4163 - { id: 1, class: gprc, preferred-register: '' } 4164 - { id: 2, class: gprc, preferred-register: '' } 4165 - { id: 3, class: g8rc, preferred-register: '' } 4166 - { id: 4, class: gprc, preferred-register: '' } 4167liveins: 4168 - { reg: '$x3', virtual-reg: '%0' } 4169frameInfo: 4170 isFrameAddressTaken: false 4171 isReturnAddressTaken: false 4172 hasStackMap: false 4173 hasPatchPoint: false 4174 stackSize: 0 4175 offsetAdjustment: 0 4176 maxAlignment: 0 4177 adjustsStack: false 4178 hasCalls: false 4179 stackProtector: '' 4180 maxCallFrameSize: 4294967295 4181 hasOpaqueSPAdjustment: false 4182 hasVAStart: false 4183 hasMustTailInVarArgFunc: false 4184 savePoint: '' 4185 restorePoint: '' 4186fixedStack: 4187stack: 4188constants: 4189body: | 4190 bb.0.entry: 4191 liveins: $x3 4192 4193 %0 = COPY $x3 4194 %1 = COPY %0.sub_32 4195 %3 = IMPLICIT_DEF 4196 %2 = LI 1 4197 %4 = RLWINM killed %2, 31, 0, 31 4198 ; CHECK: RLWINM killed %2, 31, 0, 31 4199 ; CHECK-LATE: rotlwi 3, 3, 31 4200 $x3 = EXTSW_32_64 %4 4201 BLR8 implicit $lr8, implicit $rm, implicit $x3 4202 4203... 4204--- 4205name: testRLWINM8 4206# CHECK-ALL: name: testRLWINM8 4207alignment: 4 4208exposesReturnsTwice: false 4209legalized: false 4210regBankSelected: false 4211selected: false 4212tracksRegLiveness: true 4213registers: 4214 - { id: 0, class: g8rc, preferred-register: '' } 4215 - { id: 1, class: g8rc, preferred-register: '' } 4216liveins: 4217 - { reg: '$x3', virtual-reg: '%0' } 4218frameInfo: 4219 isFrameAddressTaken: false 4220 isReturnAddressTaken: false 4221 hasStackMap: false 4222 hasPatchPoint: false 4223 stackSize: 0 4224 offsetAdjustment: 0 4225 maxAlignment: 0 4226 adjustsStack: false 4227 hasCalls: false 4228 stackProtector: '' 4229 maxCallFrameSize: 4294967295 4230 hasOpaqueSPAdjustment: false 4231 hasVAStart: false 4232 hasMustTailInVarArgFunc: false 4233 savePoint: '' 4234 restorePoint: '' 4235fixedStack: 4236stack: 4237constants: 4238body: | 4239 bb.0.entry: 4240 liveins: $x3 4241 4242 %0 = LI8 234 4243 %1 = RLWINM8 %0, 4, 20, 27 4244 ; CHECK: LI8 3744 4245 ; CHECK-LATE: li 3, 3744 4246 $x3 = COPY %1 4247 BLR8 implicit $lr8, implicit $rm, implicit $x3 4248 4249... 4250--- 4251name: testRLWINMo 4252# CHECK-ALL: name: testRLWINMo 4253alignment: 4 4254exposesReturnsTwice: false 4255legalized: false 4256regBankSelected: false 4257selected: false 4258tracksRegLiveness: true 4259registers: 4260 - { id: 0, class: g8rc, preferred-register: '' } 4261 - { id: 1, class: g8rc, preferred-register: '' } 4262 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 4263 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 4264 - { id: 4, class: gprc, preferred-register: '' } 4265 - { id: 5, class: crrc, preferred-register: '' } 4266 - { id: 6, class: gprc, preferred-register: '' } 4267 - { id: 7, class: g8rc, preferred-register: '' } 4268 - { id: 8, class: g8rc, preferred-register: '' } 4269 - { id: 9, class: g8rc, preferred-register: '' } 4270liveins: 4271 - { reg: '$x3', virtual-reg: '%0' } 4272 - { reg: '$x4', virtual-reg: '%1' } 4273frameInfo: 4274 isFrameAddressTaken: false 4275 isReturnAddressTaken: false 4276 hasStackMap: false 4277 hasPatchPoint: false 4278 stackSize: 0 4279 offsetAdjustment: 0 4280 maxAlignment: 0 4281 adjustsStack: false 4282 hasCalls: false 4283 stackProtector: '' 4284 maxCallFrameSize: 4294967295 4285 hasOpaqueSPAdjustment: false 4286 hasVAStart: false 4287 hasMustTailInVarArgFunc: false 4288 savePoint: '' 4289 restorePoint: '' 4290fixedStack: 4291stack: 4292constants: 4293body: | 4294 bb.0.entry: 4295 liveins: $x3, $x4 4296 4297 %1 = COPY $x4 4298 %0 = COPY $x3 4299 %2 = COPY %1.sub_32 4300 %3 = LI -22 4301 %4 = RLWINMo %3, 0, 24, 31, implicit-def $cr0 4302 ; CHECK: LI -22 4303 ; CHECK: ANDIo %3, 65514 4304 ; CHECK-LATE: li 3, -22 4305 ; CHECK-LATE: andi. 5, 3, 234 4306 %5 = COPY killed $cr0 4307 %6 = ISEL %2, %3, %5.sub_eq 4308 %8 = IMPLICIT_DEF 4309 %7 = INSERT_SUBREG %8, killed %6, 1 4310 %9 = RLDICL killed %7, 0, 32 4311 $x3 = COPY %9 4312 BLR8 implicit $lr8, implicit $rm, implicit $x3 4313 4314... 4315--- 4316name: testRLWINMo2 4317# CHECK-ALL: name: testRLWINMo2 4318alignment: 4 4319exposesReturnsTwice: false 4320legalized: false 4321regBankSelected: false 4322selected: false 4323tracksRegLiveness: true 4324registers: 4325 - { id: 0, class: g8rc, preferred-register: '' } 4326 - { id: 1, class: g8rc, preferred-register: '' } 4327 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 4328 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 4329 - { id: 4, class: gprc, preferred-register: '' } 4330 - { id: 5, class: crrc, preferred-register: '' } 4331 - { id: 6, class: gprc, preferred-register: '' } 4332 - { id: 7, class: g8rc, preferred-register: '' } 4333 - { id: 8, class: g8rc, preferred-register: '' } 4334 - { id: 9, class: g8rc, preferred-register: '' } 4335liveins: 4336 - { reg: '$x3', virtual-reg: '%0' } 4337 - { reg: '$x4', virtual-reg: '%1' } 4338frameInfo: 4339 isFrameAddressTaken: false 4340 isReturnAddressTaken: false 4341 hasStackMap: false 4342 hasPatchPoint: false 4343 stackSize: 0 4344 offsetAdjustment: 0 4345 maxAlignment: 0 4346 adjustsStack: false 4347 hasCalls: false 4348 stackProtector: '' 4349 maxCallFrameSize: 4294967295 4350 hasOpaqueSPAdjustment: false 4351 hasVAStart: false 4352 hasMustTailInVarArgFunc: false 4353 savePoint: '' 4354 restorePoint: '' 4355fixedStack: 4356stack: 4357constants: 4358body: | 4359 bb.0.entry: 4360 liveins: $x3, $x4 4361 4362 %1 = COPY $x4 4363 %0 = COPY $x3 4364 %2 = COPY %1.sub_32 4365 %3 = LI -22 4366 %4 = RLWINMo %3, 5, 24, 31, implicit-def $cr0 4367 ; CHECK: LI -22 4368 ; CHECK-NOT: ANDIo8 %3, 65514 4369 ; CHECK-LATE-NOT: andi. 4370 %5 = COPY killed $cr0 4371 %6 = ISEL %2, %3, %5.sub_eq 4372 %8 = IMPLICIT_DEF 4373 %7 = INSERT_SUBREG %8, killed %6, 1 4374 %9 = RLDICL killed %7, 0, 32 4375 $x3 = COPY %9 4376 BLR8 implicit $lr8, implicit $rm, implicit $x3 4377 4378... 4379--- 4380name: testRLWINM8o 4381# CHECK-ALL: name: testRLWINM8o 4382alignment: 4 4383exposesReturnsTwice: false 4384legalized: false 4385regBankSelected: false 4386selected: false 4387tracksRegLiveness: true 4388registers: 4389 - { id: 0, class: g8rc, preferred-register: '' } 4390 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4391 - { id: 2, class: g8rc, preferred-register: '' } 4392 - { id: 3, class: g8rc, preferred-register: '' } 4393 - { id: 4, class: g8rc, preferred-register: '' } 4394 - { id: 5, class: g8rc, preferred-register: '' } 4395 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4396 - { id: 7, class: crrc, preferred-register: '' } 4397 - { id: 8, class: g8rc, preferred-register: '' } 4398liveins: 4399 - { reg: '$x3', virtual-reg: '%0' } 4400 - { reg: '$x4', virtual-reg: '%1' } 4401frameInfo: 4402 isFrameAddressTaken: false 4403 isReturnAddressTaken: false 4404 hasStackMap: false 4405 hasPatchPoint: false 4406 stackSize: 0 4407 offsetAdjustment: 0 4408 maxAlignment: 0 4409 adjustsStack: false 4410 hasCalls: false 4411 stackProtector: '' 4412 maxCallFrameSize: 4294967295 4413 hasOpaqueSPAdjustment: false 4414 hasVAStart: false 4415 hasMustTailInVarArgFunc: false 4416 savePoint: '' 4417 restorePoint: '' 4418fixedStack: 4419stack: 4420constants: 4421body: | 4422 bb.0.entry: 4423 liveins: $x3, $x4 4424 4425 %1 = COPY $x4 4426 %0 = COPY $x3 4427 %2 = LI8 -18 4428 %3 = RLWINM8o %2, 4, 20, 27, implicit-def $cr0 4429 ; CHECK: ANDIo8 %2, 3808 4430 ; CHECK-LATE: li 3, -18 4431 ; CHECK-LATE: andi. 3, 3, 3808 4432 %7 = COPY killed $cr0 4433 %6 = RLDICL killed %3, 0, 32 4434 %8 = ISEL8 %1, %6, %7.sub_eq 4435 $x3 = COPY %8 4436 BLR8 implicit $lr8, implicit $rm, implicit $x3 4437 4438... 4439--- 4440name: testSLD 4441# CHECK-ALL: name: testSLD 4442alignment: 4 4443exposesReturnsTwice: false 4444legalized: false 4445regBankSelected: false 4446selected: false 4447tracksRegLiveness: true 4448registers: 4449 - { id: 0, class: g8rc, preferred-register: '' } 4450 - { id: 1, class: g8rc, preferred-register: '' } 4451 - { id: 2, class: gprc, preferred-register: '' } 4452 - { id: 3, class: g8rc, preferred-register: '' } 4453liveins: 4454 - { reg: '$x3', virtual-reg: '%0' } 4455 - { reg: '$x4', virtual-reg: '%1' } 4456frameInfo: 4457 isFrameAddressTaken: false 4458 isReturnAddressTaken: false 4459 hasStackMap: false 4460 hasPatchPoint: false 4461 stackSize: 0 4462 offsetAdjustment: 0 4463 maxAlignment: 0 4464 adjustsStack: false 4465 hasCalls: false 4466 stackProtector: '' 4467 maxCallFrameSize: 4294967295 4468 hasOpaqueSPAdjustment: false 4469 hasVAStart: false 4470 hasMustTailInVarArgFunc: false 4471 savePoint: '' 4472 restorePoint: '' 4473fixedStack: 4474stack: 4475constants: 4476body: | 4477 bb.0.entry: 4478 liveins: $x3, $x4 4479 4480 %1 = COPY $x4 4481 %0 = COPY $x3 4482 %2 = LI 13 4483 %3 = SLD %0, killed %2 4484 ; CHECK: RLDICR %0, 13, 50 4485 ; CHECK-LATE: sldi 3, 3, 13 4486 $x3 = COPY %3 4487 BLR8 implicit $lr8, implicit $rm, implicit $x3 4488 4489... 4490--- 4491name: testSLDo 4492# CHECK-ALL: name: testSLDo 4493alignment: 4 4494exposesReturnsTwice: false 4495legalized: false 4496regBankSelected: false 4497selected: false 4498tracksRegLiveness: true 4499registers: 4500 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4501 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4502 - { id: 2, class: gprc, preferred-register: '' } 4503 - { id: 3, class: g8rc, preferred-register: '' } 4504 - { id: 4, class: crrc, preferred-register: '' } 4505 - { id: 5, class: g8rc, preferred-register: '' } 4506liveins: 4507 - { reg: '$x3', virtual-reg: '%0' } 4508 - { reg: '$x4', virtual-reg: '%1' } 4509frameInfo: 4510 isFrameAddressTaken: false 4511 isReturnAddressTaken: false 4512 hasStackMap: false 4513 hasPatchPoint: false 4514 stackSize: 0 4515 offsetAdjustment: 0 4516 maxAlignment: 0 4517 adjustsStack: false 4518 hasCalls: false 4519 stackProtector: '' 4520 maxCallFrameSize: 4294967295 4521 hasOpaqueSPAdjustment: false 4522 hasVAStart: false 4523 hasMustTailInVarArgFunc: false 4524 savePoint: '' 4525 restorePoint: '' 4526fixedStack: 4527stack: 4528constants: 4529body: | 4530 bb.0.entry: 4531 liveins: $x3, $x4 4532 4533 %1 = COPY $x4 4534 %0 = COPY $x3 4535 %2 = LI 17 4536 %3 = SLDo %0, killed %2, implicit-def $cr0 4537 ; CHECK: RLDICRo %0, 17, 46, implicit-def $cr0 4538 ; CHECK-LATE: rldicr. 5, 3, 17, 46 4539 %4 = COPY killed $cr0 4540 %5 = ISEL8 %1, %0, %4.sub_eq 4541 $x3 = COPY %5 4542 BLR8 implicit $lr8, implicit $rm, implicit $x3 4543 4544... 4545--- 4546name: testSRD 4547# CHECK-ALL: name: testSRD 4548alignment: 4 4549exposesReturnsTwice: false 4550legalized: false 4551regBankSelected: false 4552selected: false 4553tracksRegLiveness: true 4554registers: 4555 - { id: 0, class: g8rc, preferred-register: '' } 4556 - { id: 1, class: g8rc, preferred-register: '' } 4557 - { id: 2, class: gprc, preferred-register: '' } 4558 - { id: 3, class: g8rc, preferred-register: '' } 4559liveins: 4560 - { reg: '$x3', virtual-reg: '%0' } 4561 - { reg: '$x4', virtual-reg: '%1' } 4562frameInfo: 4563 isFrameAddressTaken: false 4564 isReturnAddressTaken: false 4565 hasStackMap: false 4566 hasPatchPoint: false 4567 stackSize: 0 4568 offsetAdjustment: 0 4569 maxAlignment: 0 4570 adjustsStack: false 4571 hasCalls: false 4572 stackProtector: '' 4573 maxCallFrameSize: 4294967295 4574 hasOpaqueSPAdjustment: false 4575 hasVAStart: false 4576 hasMustTailInVarArgFunc: false 4577 savePoint: '' 4578 restorePoint: '' 4579fixedStack: 4580stack: 4581constants: 4582body: | 4583 bb.0.entry: 4584 liveins: $x3, $x4 4585 4586 %1 = COPY $x4 4587 %0 = COPY $x3 4588 %2 = LI 4 4589 %3 = SRD %0, killed %2 4590 ; CHECK: RLDICL %0, 60, 4 4591 ; CHECK-LATE: rldicl 3, 3, 60, 4 4592 $x3 = COPY %3 4593 BLR8 implicit $lr8, implicit $rm, implicit $x3 4594 4595... 4596--- 4597name: testSRDo 4598# CHECK-ALL: name: testSRDo 4599alignment: 4 4600exposesReturnsTwice: false 4601legalized: false 4602regBankSelected: false 4603selected: false 4604tracksRegLiveness: true 4605registers: 4606 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4607 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 4608 - { id: 2, class: gprc, preferred-register: '' } 4609 - { id: 3, class: g8rc, preferred-register: '' } 4610 - { id: 4, class: crrc, preferred-register: '' } 4611 - { id: 5, class: g8rc, preferred-register: '' } 4612liveins: 4613 - { reg: '$x3', virtual-reg: '%0' } 4614 - { reg: '$x4', virtual-reg: '%1' } 4615frameInfo: 4616 isFrameAddressTaken: false 4617 isReturnAddressTaken: false 4618 hasStackMap: false 4619 hasPatchPoint: false 4620 stackSize: 0 4621 offsetAdjustment: 0 4622 maxAlignment: 0 4623 adjustsStack: false 4624 hasCalls: false 4625 stackProtector: '' 4626 maxCallFrameSize: 4294967295 4627 hasOpaqueSPAdjustment: false 4628 hasVAStart: false 4629 hasMustTailInVarArgFunc: false 4630 savePoint: '' 4631 restorePoint: '' 4632fixedStack: 4633stack: 4634constants: 4635body: | 4636 bb.0.entry: 4637 liveins: $x3, $x4 4638 4639 %1 = COPY $x4 4640 %0 = COPY $x3 4641 %2 = LI 17 4642 %3 = SRDo %0, killed %2, implicit-def $cr0 4643 ; CHECK: RLDICLo %0, 47, 17, implicit-def $cr0 4644 ; CHECK-LATE: rldicl. 5, 3, 47, 17 4645 %4 = COPY killed $cr0 4646 %5 = ISEL8 %1, %0, %4.sub_eq 4647 $x3 = COPY %5 4648 BLR8 implicit $lr8, implicit $rm, implicit $x3 4649 4650... 4651--- 4652name: testSLW 4653# CHECK-ALL: name: testSLW 4654alignment: 4 4655exposesReturnsTwice: false 4656legalized: false 4657regBankSelected: false 4658selected: false 4659tracksRegLiveness: true 4660registers: 4661 - { id: 0, class: g8rc, preferred-register: '' } 4662 - { id: 1, class: g8rc, preferred-register: '' } 4663 - { id: 2, class: gprc, preferred-register: '' } 4664 - { id: 3, class: g8rc, preferred-register: '' } 4665 - { id: 4, class: g8rc, preferred-register: '' } 4666 - { id: 5, class: gprc, preferred-register: '' } 4667 - { id: 6, class: g8rc, preferred-register: '' } 4668 - { id: 7, class: g8rc, preferred-register: '' } 4669 - { id: 8, class: gprc, preferred-register: '' } 4670liveins: 4671 - { reg: '$x3', virtual-reg: '%0' } 4672 - { reg: '$x4', virtual-reg: '%1' } 4673frameInfo: 4674 isFrameAddressTaken: false 4675 isReturnAddressTaken: false 4676 hasStackMap: false 4677 hasPatchPoint: false 4678 stackSize: 0 4679 offsetAdjustment: 0 4680 maxAlignment: 0 4681 adjustsStack: false 4682 hasCalls: false 4683 stackProtector: '' 4684 maxCallFrameSize: 4294967295 4685 hasOpaqueSPAdjustment: false 4686 hasVAStart: false 4687 hasMustTailInVarArgFunc: false 4688 savePoint: '' 4689 restorePoint: '' 4690fixedStack: 4691stack: 4692constants: 4693body: | 4694 bb.0.entry: 4695 liveins: $x3, $x4 4696 4697 %1 = COPY $x4 4698 %0 = COPY $x3 4699 %2 = COPY %1.sub_32 4700 %5 = LI 21 4701 %8 = SLW killed %2, killed %5 4702 ; CHECK: RLWINM killed %2, 21, 0, 10 4703 ; CHECK-LATE: slwi 3, 4, 21 4704 $x3 = EXTSW_32_64 %8 4705 BLR8 implicit $lr8, implicit $rm, implicit $x3 4706 4707... 4708--- 4709name: testSLWo 4710# CHECK-ALL: name: testSLWo 4711alignment: 4 4712exposesReturnsTwice: false 4713legalized: false 4714regBankSelected: false 4715selected: false 4716tracksRegLiveness: true 4717registers: 4718 - { id: 0, class: g8rc, preferred-register: '' } 4719 - { id: 1, class: g8rc, preferred-register: '' } 4720 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 4721 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 4722 - { id: 4, class: gprc, preferred-register: '' } 4723 - { id: 5, class: crrc, preferred-register: '' } 4724 - { id: 6, class: gprc, preferred-register: '' } 4725 - { id: 7, class: g8rc, preferred-register: '' } 4726 - { id: 8, class: g8rc, preferred-register: '' } 4727 - { id: 9, class: g8rc, preferred-register: '' } 4728liveins: 4729 - { reg: '$x3', virtual-reg: '%0' } 4730 - { reg: '$x4', virtual-reg: '%1' } 4731frameInfo: 4732 isFrameAddressTaken: false 4733 isReturnAddressTaken: false 4734 hasStackMap: false 4735 hasPatchPoint: false 4736 stackSize: 0 4737 offsetAdjustment: 0 4738 maxAlignment: 0 4739 adjustsStack: false 4740 hasCalls: false 4741 stackProtector: '' 4742 maxCallFrameSize: 4294967295 4743 hasOpaqueSPAdjustment: false 4744 hasVAStart: false 4745 hasMustTailInVarArgFunc: false 4746 savePoint: '' 4747 restorePoint: '' 4748fixedStack: 4749stack: 4750constants: 4751body: | 4752 bb.0.entry: 4753 liveins: $x3, $x4 4754 4755 %1 = COPY $x4 4756 %0 = COPY $x3 4757 %2 = LI 11 4758 %3 = COPY %0.sub_32 4759 %4 = SLWo %3, %2, implicit-def $cr0 4760 ; CHECK: RLWINMo %3, 11, 0, 20, implicit-def $cr0 4761 ; CHECK-LATE: rlwinm. 5, 3, 11, 0, 20 4762 %5 = COPY killed $cr0 4763 %6 = ISEL %2, %3, %5.sub_eq 4764 %8 = IMPLICIT_DEF 4765 %7 = INSERT_SUBREG %8, killed %6, 1 4766 %9 = RLDICL killed %7, 0, 32 4767 $x3 = COPY %9 4768 BLR8 implicit $lr8, implicit $rm, implicit $x3 4769 4770... 4771--- 4772name: testSRW 4773# CHECK-ALL: name: testSRW 4774alignment: 4 4775exposesReturnsTwice: false 4776legalized: false 4777regBankSelected: false 4778selected: false 4779tracksRegLiveness: true 4780registers: 4781 - { id: 0, class: g8rc, preferred-register: '' } 4782 - { id: 1, class: g8rc, preferred-register: '' } 4783 - { id: 2, class: gprc, preferred-register: '' } 4784 - { id: 3, class: g8rc, preferred-register: '' } 4785 - { id: 4, class: g8rc, preferred-register: '' } 4786 - { id: 5, class: gprc, preferred-register: '' } 4787 - { id: 6, class: g8rc, preferred-register: '' } 4788 - { id: 7, class: g8rc, preferred-register: '' } 4789 - { id: 8, class: gprc, preferred-register: '' } 4790liveins: 4791 - { reg: '$x3', virtual-reg: '%0' } 4792 - { reg: '$x4', virtual-reg: '%1' } 4793frameInfo: 4794 isFrameAddressTaken: false 4795 isReturnAddressTaken: false 4796 hasStackMap: false 4797 hasPatchPoint: false 4798 stackSize: 0 4799 offsetAdjustment: 0 4800 maxAlignment: 0 4801 adjustsStack: false 4802 hasCalls: false 4803 stackProtector: '' 4804 maxCallFrameSize: 4294967295 4805 hasOpaqueSPAdjustment: false 4806 hasVAStart: false 4807 hasMustTailInVarArgFunc: false 4808 savePoint: '' 4809 restorePoint: '' 4810fixedStack: 4811stack: 4812constants: 4813body: | 4814 bb.0.entry: 4815 liveins: $x3, $x4 4816 4817 %1 = COPY $x4 4818 %0 = COPY $x3 4819 %2 = LI 8 4820 %5 = COPY %0.sub_32 4821 %8 = SRW killed %5, killed %2 4822 ; CHECK: RLWINM killed %5, 24, 8, 31 4823 ; CHECK-LATE: srwi 3, 3, 8 4824 $x3 = EXTSW_32_64 %8 4825 BLR8 implicit $lr8, implicit $rm, implicit $x3 4826 4827... 4828--- 4829name: testSRWo 4830# CHECK-ALL: name: testSRWo 4831alignment: 4 4832exposesReturnsTwice: false 4833legalized: false 4834regBankSelected: false 4835selected: false 4836tracksRegLiveness: true 4837registers: 4838 - { id: 0, class: g8rc, preferred-register: '' } 4839 - { id: 1, class: g8rc, preferred-register: '' } 4840 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 4841 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 4842 - { id: 4, class: gprc, preferred-register: '' } 4843 - { id: 5, class: crrc, preferred-register: '' } 4844 - { id: 6, class: gprc, preferred-register: '' } 4845 - { id: 7, class: g8rc, preferred-register: '' } 4846 - { id: 8, class: g8rc, preferred-register: '' } 4847 - { id: 9, class: g8rc, preferred-register: '' } 4848liveins: 4849 - { reg: '$x3', virtual-reg: '%0' } 4850 - { reg: '$x4', virtual-reg: '%1' } 4851frameInfo: 4852 isFrameAddressTaken: false 4853 isReturnAddressTaken: false 4854 hasStackMap: false 4855 hasPatchPoint: false 4856 stackSize: 0 4857 offsetAdjustment: 0 4858 maxAlignment: 0 4859 adjustsStack: false 4860 hasCalls: false 4861 stackProtector: '' 4862 maxCallFrameSize: 4294967295 4863 hasOpaqueSPAdjustment: false 4864 hasVAStart: false 4865 hasMustTailInVarArgFunc: false 4866 savePoint: '' 4867 restorePoint: '' 4868fixedStack: 4869stack: 4870constants: 4871body: | 4872 bb.0.entry: 4873 liveins: $x3, $x4 4874 4875 %1 = COPY $x4 4876 %0 = COPY $x3 4877 %2 = LI 7 4878 %3 = COPY %0.sub_32 4879 %4 = SRWo %3, %2, implicit-def $cr0 4880 ; CHECK: RLWINMo %3, 25, 7, 31 4881 ; CHECK-LATE: rlwinm. 5, 3, 25, 7, 31 4882 %5 = COPY killed $cr0 4883 %6 = ISEL %2, %3, %5.sub_eq 4884 %8 = IMPLICIT_DEF 4885 %7 = INSERT_SUBREG %8, killed %6, 1 4886 %9 = RLDICL killed %7, 0, 32 4887 $x3 = COPY %9 4888 BLR8 implicit $lr8, implicit $rm, implicit $x3 4889 4890... 4891--- 4892name: testSRAW 4893# CHECK-ALL: name: testSRAW 4894alignment: 4 4895exposesReturnsTwice: false 4896legalized: false 4897regBankSelected: false 4898selected: false 4899tracksRegLiveness: true 4900registers: 4901 - { id: 0, class: g8rc, preferred-register: '' } 4902 - { id: 1, class: g8rc, preferred-register: '' } 4903 - { id: 2, class: gprc, preferred-register: '' } 4904 - { id: 3, class: gprc, preferred-register: '' } 4905 - { id: 4, class: gprc, preferred-register: '' } 4906 - { id: 5, class: g8rc, preferred-register: '' } 4907liveins: 4908 - { reg: '$x3', virtual-reg: '%0' } 4909 - { reg: '$x4', virtual-reg: '%1' } 4910frameInfo: 4911 isFrameAddressTaken: false 4912 isReturnAddressTaken: false 4913 hasStackMap: false 4914 hasPatchPoint: false 4915 stackSize: 0 4916 offsetAdjustment: 0 4917 maxAlignment: 0 4918 adjustsStack: false 4919 hasCalls: false 4920 stackProtector: '' 4921 maxCallFrameSize: 4294967295 4922 hasOpaqueSPAdjustment: false 4923 hasVAStart: false 4924 hasMustTailInVarArgFunc: false 4925 savePoint: '' 4926 restorePoint: '' 4927fixedStack: 4928stack: 4929constants: 4930body: | 4931 bb.0.entry: 4932 liveins: $x3, $x4 4933 4934 %1 = COPY $x4 4935 %0 = COPY $x3 4936 %2 = LI 15 4937 %3 = COPY %0.sub_32 4938 %4 = SRAW killed %3, killed %2, implicit-def dead $carry 4939 ; CHECK: SRAWI killed %3, 15, implicit-def dead $carry 4940 ; CHECK-LATE: srawi 3, 3, 15 4941 %5 = EXTSW_32_64 killed %4 4942 $x3 = COPY %5 4943 BLR8 implicit $lr8, implicit $rm, implicit $x3 4944 4945... 4946--- 4947name: testSRAWo 4948# CHECK-ALL: name: testSRAWo 4949alignment: 4 4950exposesReturnsTwice: false 4951legalized: false 4952regBankSelected: false 4953selected: false 4954tracksRegLiveness: true 4955registers: 4956 - { id: 0, class: g8rc, preferred-register: '' } 4957 - { id: 1, class: g8rc, preferred-register: '' } 4958 - { id: 2, class: gprc_and_gprc_nor0, preferred-register: '' } 4959 - { id: 3, class: gprc, preferred-register: '' } 4960 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 4961 - { id: 5, class: crrc, preferred-register: '' } 4962 - { id: 6, class: gprc, preferred-register: '' } 4963 - { id: 7, class: g8rc, preferred-register: '' } 4964liveins: 4965 - { reg: '$x3', virtual-reg: '%0' } 4966 - { reg: '$x4', virtual-reg: '%1' } 4967frameInfo: 4968 isFrameAddressTaken: false 4969 isReturnAddressTaken: false 4970 hasStackMap: false 4971 hasPatchPoint: false 4972 stackSize: 0 4973 offsetAdjustment: 0 4974 maxAlignment: 0 4975 adjustsStack: false 4976 hasCalls: false 4977 stackProtector: '' 4978 maxCallFrameSize: 4294967295 4979 hasOpaqueSPAdjustment: false 4980 hasVAStart: false 4981 hasMustTailInVarArgFunc: false 4982 savePoint: '' 4983 restorePoint: '' 4984fixedStack: 4985stack: 4986constants: 4987body: | 4988 bb.0.entry: 4989 liveins: $x3, $x4 4990 4991 %1 = COPY $x4 4992 %0 = COPY $x3 4993 %2 = LI 8 4994 %3 = COPY %0.sub_32 4995 %4 = SRAWo killed %3, %2, implicit-def dead $carry, implicit-def $cr0 4996 ; CHECK: SRAWIo killed %3, 8, implicit-def dead $carry, implicit-def $cr0 4997 ; CHECK-LATE: srawi. 3, 3, 8 4998 %5 = COPY killed $cr0 4999 %6 = ISEL %2, %4, %5.sub_eq 5000 %7 = EXTSW_32_64 killed %6 5001 $x3 = COPY %7 5002 BLR8 implicit $lr8, implicit $rm, implicit $x3 5003 5004... 5005--- 5006name: testSRAD 5007# CHECK-ALL: name: testSRAD 5008alignment: 4 5009exposesReturnsTwice: false 5010legalized: false 5011regBankSelected: false 5012selected: false 5013tracksRegLiveness: true 5014registers: 5015 - { id: 0, class: g8rc, preferred-register: '' } 5016 - { id: 1, class: g8rc, preferred-register: '' } 5017 - { id: 2, class: gprc, preferred-register: '' } 5018 - { id: 3, class: g8rc, preferred-register: '' } 5019liveins: 5020 - { reg: '$x3', virtual-reg: '%0' } 5021 - { reg: '$x4', virtual-reg: '%1' } 5022frameInfo: 5023 isFrameAddressTaken: false 5024 isReturnAddressTaken: false 5025 hasStackMap: false 5026 hasPatchPoint: false 5027 stackSize: 0 5028 offsetAdjustment: 0 5029 maxAlignment: 0 5030 adjustsStack: false 5031 hasCalls: false 5032 stackProtector: '' 5033 maxCallFrameSize: 4294967295 5034 hasOpaqueSPAdjustment: false 5035 hasVAStart: false 5036 hasMustTailInVarArgFunc: false 5037 savePoint: '' 5038 restorePoint: '' 5039fixedStack: 5040stack: 5041constants: 5042body: | 5043 bb.0.entry: 5044 liveins: $x3, $x4 5045 5046 %1 = COPY $x4 5047 %0 = COPY $x3 5048 %2 = LI 44 5049 %3 = SRAD %0, killed %2, implicit-def dead $carry 5050 ; CHECK: SRADI %0, 44, implicit-def dead $carry 5051 ; CHECK-LATE: sradi 3, 3, 44 5052 $x3 = COPY %3 5053 BLR8 implicit $lr8, implicit $rm, implicit $x3 5054 5055... 5056--- 5057name: testSRADo 5058# CHECK-ALL: name: testSRADo 5059alignment: 4 5060exposesReturnsTwice: false 5061legalized: false 5062regBankSelected: false 5063selected: false 5064tracksRegLiveness: true 5065registers: 5066 - { id: 0, class: g8rc, preferred-register: '' } 5067 - { id: 1, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5068 - { id: 2, class: gprc, preferred-register: '' } 5069 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5070 - { id: 4, class: crrc, preferred-register: '' } 5071 - { id: 5, class: g8rc, preferred-register: '' } 5072liveins: 5073 - { reg: '$x3', virtual-reg: '%0' } 5074 - { reg: '$x4', virtual-reg: '%1' } 5075frameInfo: 5076 isFrameAddressTaken: false 5077 isReturnAddressTaken: false 5078 hasStackMap: false 5079 hasPatchPoint: false 5080 stackSize: 0 5081 offsetAdjustment: 0 5082 maxAlignment: 0 5083 adjustsStack: false 5084 hasCalls: false 5085 stackProtector: '' 5086 maxCallFrameSize: 4294967295 5087 hasOpaqueSPAdjustment: false 5088 hasVAStart: false 5089 hasMustTailInVarArgFunc: false 5090 savePoint: '' 5091 restorePoint: '' 5092fixedStack: 5093stack: 5094constants: 5095body: | 5096 bb.0.entry: 5097 liveins: $x3, $x4 5098 5099 %1 = COPY $x4 5100 %0 = COPY $x3 5101 %2 = LI 61 5102 %3 = SRADo %0, killed %2, implicit-def dead $carry, implicit-def $cr0 5103 ; CHECK: SRADIo %0, 61, implicit-def dead $carry, implicit-def $cr0 5104 ; CHECK-LATE: sradi. 3, 3, 61 5105 %4 = COPY killed $cr0 5106 %5 = ISEL8 %1, %3, %4.sub_eq 5107 $x3 = COPY %5 5108 BLR8 implicit $lr8, implicit $rm, implicit $x3 5109 5110... 5111--- 5112name: testSTBUX 5113# CHECK-ALL: name: testSTBUX 5114alignment: 4 5115exposesReturnsTwice: false 5116legalized: false 5117regBankSelected: false 5118selected: false 5119tracksRegLiveness: true 5120registers: 5121 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5122 - { id: 1, class: g8rc, preferred-register: '' } 5123 - { id: 2, class: g8rc, preferred-register: '' } 5124 - { id: 3, class: gprc, preferred-register: '' } 5125 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 5126 - { id: 5, class: gprc, preferred-register: '' } 5127 - { id: 6, class: g8rc, preferred-register: '' } 5128 - { id: 7, class: g8rc, preferred-register: '' } 5129 - { id: 8, class: g8rc, preferred-register: '' } 5130 - { id: 9, class: gprc, preferred-register: '' } 5131 - { id: 10, class: g8rc, preferred-register: '' } 5132 - { id: 11, class: g8rc, preferred-register: '' } 5133 - { id: 12, class: g8rc, preferred-register: '' } 5134 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5135 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5136liveins: 5137 - { reg: '$x3', virtual-reg: '%0' } 5138 - { reg: '$x4', virtual-reg: '%1' } 5139 - { reg: '$x5', virtual-reg: '%2' } 5140frameInfo: 5141 isFrameAddressTaken: false 5142 isReturnAddressTaken: false 5143 hasStackMap: false 5144 hasPatchPoint: false 5145 stackSize: 0 5146 offsetAdjustment: 0 5147 maxAlignment: 0 5148 adjustsStack: false 5149 hasCalls: false 5150 stackProtector: '' 5151 maxCallFrameSize: 4294967295 5152 hasOpaqueSPAdjustment: false 5153 hasVAStart: false 5154 hasMustTailInVarArgFunc: false 5155 savePoint: '' 5156 restorePoint: '' 5157fixedStack: 5158stack: 5159constants: 5160body: | 5161 bb.0.entry: 5162 liveins: $x3, $x4, $x5 5163 5164 %2 = COPY $x5 5165 %1 = COPY $x4 5166 %0 = COPY $x3 5167 %3 = COPY %1.sub_32 5168 %4 = COPY %2.sub_32 5169 %5 = ADDI %4, 1 5170 %7 = IMPLICIT_DEF 5171 %6 = INSERT_SUBREG %7, killed %5, 1 5172 %8 = LI8 966 5173 %13 = STBUX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3) 5174 ; CHECK: STBU %3, 966, %0 5175 ; CHECK-LATE: {{[0-9]+}}, 966({{[0-9]+}}) 5176 %9 = ADDI %4, 2 5177 %11 = IMPLICIT_DEF 5178 %10 = INSERT_SUBREG %11, killed %9, 1 5179 %12 = LI8 777 5180 %14 = STBUX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3) 5181 ; CHECK: STBU %3, 777, %0 5182 ; CHECK-LATE: {{[0-9]+}}, 777({{[0-9]+}}) 5183 BLR8 implicit $lr8, implicit $rm 5184 5185... 5186--- 5187name: testSTBX 5188# CHECK-ALL: name: testSTBX 5189alignment: 4 5190exposesReturnsTwice: false 5191legalized: false 5192regBankSelected: false 5193selected: false 5194tracksRegLiveness: true 5195registers: 5196 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5197 - { id: 1, class: g8rc, preferred-register: '' } 5198 - { id: 2, class: g8rc, preferred-register: '' } 5199 - { id: 3, class: gprc, preferred-register: '' } 5200 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 5201 - { id: 5, class: gprc, preferred-register: '' } 5202 - { id: 6, class: g8rc, preferred-register: '' } 5203 - { id: 7, class: g8rc, preferred-register: '' } 5204 - { id: 8, class: g8rc, preferred-register: '' } 5205 - { id: 9, class: gprc, preferred-register: '' } 5206 - { id: 10, class: g8rc, preferred-register: '' } 5207 - { id: 11, class: g8rc, preferred-register: '' } 5208 - { id: 12, class: g8rc, preferred-register: '' } 5209liveins: 5210 - { reg: '$x3', virtual-reg: '%0' } 5211 - { reg: '$x4', virtual-reg: '%1' } 5212 - { reg: '$x5', virtual-reg: '%2' } 5213frameInfo: 5214 isFrameAddressTaken: false 5215 isReturnAddressTaken: false 5216 hasStackMap: false 5217 hasPatchPoint: false 5218 stackSize: 0 5219 offsetAdjustment: 0 5220 maxAlignment: 0 5221 adjustsStack: false 5222 hasCalls: false 5223 stackProtector: '' 5224 maxCallFrameSize: 4294967295 5225 hasOpaqueSPAdjustment: false 5226 hasVAStart: false 5227 hasMustTailInVarArgFunc: false 5228 savePoint: '' 5229 restorePoint: '' 5230fixedStack: 5231stack: 5232constants: 5233body: | 5234 bb.0.entry: 5235 liveins: $x3, $x4, $x5 5236 5237 %2 = COPY $x5 5238 %1 = COPY $x4 5239 %0 = LI8 975 5240 %3 = COPY %1.sub_32 5241 %4 = COPY %2.sub_32 5242 %5 = ADDI %4, 1 5243 %7 = IMPLICIT_DEF 5244 %6 = INSERT_SUBREG %7, killed %5, 1 5245 %8 = RLDICL killed %6, 0, 32 5246 STBX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3) 5247 ; CHECK: STB %3, 975, killed %8 5248 ; CHECK-LATE: stb 4, 975(6) 5249 %9 = ADDI %4, 2 5250 %11 = IMPLICIT_DEF 5251 %10 = INSERT_SUBREG %11, killed %9, 1 5252 %12 = RLDICL killed %10, 0, 32 5253 STBX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3) 5254 ; CHECK: STB %3, 975, killed %12 5255 ; CHECK-LATE: stb 4, 975(5) 5256 BLR8 implicit $lr8, implicit $rm 5257 5258... 5259--- 5260name: testSTHUX 5261# CHECK-ALL: name: testSTHUX 5262alignment: 4 5263exposesReturnsTwice: false 5264legalized: false 5265regBankSelected: false 5266selected: false 5267tracksRegLiveness: true 5268registers: 5269 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5270 - { id: 1, class: g8rc, preferred-register: '' } 5271 - { id: 2, class: g8rc, preferred-register: '' } 5272 - { id: 3, class: gprc, preferred-register: '' } 5273 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 5274 - { id: 5, class: gprc, preferred-register: '' } 5275 - { id: 6, class: g8rc, preferred-register: '' } 5276 - { id: 7, class: g8rc, preferred-register: '' } 5277 - { id: 8, class: g8rc, preferred-register: '' } 5278 - { id: 9, class: gprc, preferred-register: '' } 5279 - { id: 10, class: g8rc, preferred-register: '' } 5280 - { id: 11, class: g8rc, preferred-register: '' } 5281 - { id: 12, class: g8rc, preferred-register: '' } 5282 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5283 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5284liveins: 5285 - { reg: '$x3', virtual-reg: '%0' } 5286 - { reg: '$x4', virtual-reg: '%1' } 5287 - { reg: '$x5', virtual-reg: '%2' } 5288frameInfo: 5289 isFrameAddressTaken: false 5290 isReturnAddressTaken: false 5291 hasStackMap: false 5292 hasPatchPoint: false 5293 stackSize: 0 5294 offsetAdjustment: 0 5295 maxAlignment: 0 5296 adjustsStack: false 5297 hasCalls: false 5298 stackProtector: '' 5299 maxCallFrameSize: 4294967295 5300 hasOpaqueSPAdjustment: false 5301 hasVAStart: false 5302 hasMustTailInVarArgFunc: false 5303 savePoint: '' 5304 restorePoint: '' 5305fixedStack: 5306stack: 5307constants: 5308body: | 5309 bb.0.entry: 5310 liveins: $x3, $x4, $x5 5311 5312 %2 = COPY $x5 5313 %1 = COPY $x4 5314 %0 = COPY $x3 5315 %3 = COPY %1.sub_32 5316 %4 = COPY %2.sub_32 5317 %5 = ADDI %4, 1 5318 %7 = IMPLICIT_DEF 5319 %6 = INSERT_SUBREG %7, killed %5, 1 5320 %8 = LI8 32000 5321 %13 = STHUX %3, %0, killed %8 :: (store 2 into %ir.arrayidx, !tbaa !6) 5322 ; CHECK: STHU %3, 32000, %0 5323 ; CHECK-LATE: sthu {{[0-9]+}}, 32000({{[0-9]+}}) 5324 %9 = ADDI %4, 2 5325 %11 = IMPLICIT_DEF 5326 %10 = INSERT_SUBREG %11, killed %9, 1 5327 %12 = LI8 -761 5328 %14 = STHUX %3, %0, killed %12 :: (store 2 into %ir.arrayidx3, !tbaa !6) 5329 ; CHECK: STHU %3, -761, %0 5330 ; CHECK-LATE: sthu {{[0-9]+}}, -761({{[0-9]+}}) 5331 BLR8 implicit $lr8, implicit $rm 5332 5333... 5334--- 5335name: testSTHX 5336# CHECK-ALL: name: testSTHX 5337alignment: 4 5338exposesReturnsTwice: false 5339legalized: false 5340regBankSelected: false 5341selected: false 5342tracksRegLiveness: true 5343registers: 5344 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5345 - { id: 1, class: g8rc, preferred-register: '' } 5346 - { id: 2, class: g8rc, preferred-register: '' } 5347 - { id: 3, class: gprc, preferred-register: '' } 5348 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 5349 - { id: 5, class: gprc, preferred-register: '' } 5350 - { id: 6, class: g8rc, preferred-register: '' } 5351 - { id: 7, class: g8rc, preferred-register: '' } 5352 - { id: 8, class: g8rc, preferred-register: '' } 5353 - { id: 9, class: gprc, preferred-register: '' } 5354 - { id: 10, class: g8rc, preferred-register: '' } 5355 - { id: 11, class: g8rc, preferred-register: '' } 5356 - { id: 12, class: g8rc, preferred-register: '' } 5357liveins: 5358 - { reg: '$x3', virtual-reg: '%0' } 5359 - { reg: '$x4', virtual-reg: '%1' } 5360 - { reg: '$x5', virtual-reg: '%2' } 5361frameInfo: 5362 isFrameAddressTaken: false 5363 isReturnAddressTaken: false 5364 hasStackMap: false 5365 hasPatchPoint: false 5366 stackSize: 0 5367 offsetAdjustment: 0 5368 maxAlignment: 0 5369 adjustsStack: false 5370 hasCalls: false 5371 stackProtector: '' 5372 maxCallFrameSize: 4294967295 5373 hasOpaqueSPAdjustment: false 5374 hasVAStart: false 5375 hasMustTailInVarArgFunc: false 5376 savePoint: '' 5377 restorePoint: '' 5378fixedStack: 5379stack: 5380constants: 5381body: | 5382 bb.0.entry: 5383 liveins: $x3, $x4, $x5 5384 5385 %2 = COPY $x5 5386 %1 = COPY $x4 5387 %0 = COPY $x3 5388 %3 = COPY %1.sub_32 5389 %4 = COPY %2.sub_32 5390 %5 = ADDI %4, 1 5391 %7 = IMPLICIT_DEF 5392 %6 = INSERT_SUBREG %7, killed %5, 1 5393 %8 = LI8 900 5394 STHX %3, %0, killed %8 :: (store 1 into %ir.arrayidx, !tbaa !3) 5395 ; CHECK: STH %3, 900, %0 5396 ; CHECK-LATE: sth {{[0-9]+}}, 900({{[0-9]+}}) 5397 %9 = ADDI %4, 2 5398 %11 = IMPLICIT_DEF 5399 %10 = INSERT_SUBREG %11, killed %9, 1 5400 %12 = LI8 -900 5401 STHX %3, %0, killed %12 :: (store 1 into %ir.arrayidx3, !tbaa !3) 5402 ; CHECK: STH %3, -900, %0 5403 ; CHECK-LATE: sth {{[0-9]+}}, -900({{[0-9]+}}) 5404 BLR8 implicit $lr8, implicit $rm 5405 5406... 5407--- 5408name: testSTWUX 5409# CHECK-ALL: name: testSTWUX 5410alignment: 4 5411exposesReturnsTwice: false 5412legalized: false 5413regBankSelected: false 5414selected: false 5415tracksRegLiveness: true 5416registers: 5417 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5418 - { id: 1, class: g8rc, preferred-register: '' } 5419 - { id: 2, class: g8rc, preferred-register: '' } 5420 - { id: 3, class: gprc, preferred-register: '' } 5421 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 5422 - { id: 5, class: gprc, preferred-register: '' } 5423 - { id: 6, class: g8rc, preferred-register: '' } 5424 - { id: 7, class: g8rc, preferred-register: '' } 5425 - { id: 8, class: g8rc, preferred-register: '' } 5426 - { id: 9, class: gprc, preferred-register: '' } 5427 - { id: 10, class: g8rc, preferred-register: '' } 5428 - { id: 11, class: g8rc, preferred-register: '' } 5429 - { id: 12, class: g8rc, preferred-register: '' } 5430 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5431 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5432liveins: 5433 - { reg: '$x3', virtual-reg: '%0' } 5434 - { reg: '$x4', virtual-reg: '%1' } 5435 - { reg: '$x5', virtual-reg: '%2' } 5436frameInfo: 5437 isFrameAddressTaken: false 5438 isReturnAddressTaken: false 5439 hasStackMap: false 5440 hasPatchPoint: false 5441 stackSize: 0 5442 offsetAdjustment: 0 5443 maxAlignment: 0 5444 adjustsStack: false 5445 hasCalls: false 5446 stackProtector: '' 5447 maxCallFrameSize: 4294967295 5448 hasOpaqueSPAdjustment: false 5449 hasVAStart: false 5450 hasMustTailInVarArgFunc: false 5451 savePoint: '' 5452 restorePoint: '' 5453fixedStack: 5454stack: 5455constants: 5456body: | 5457 bb.0.entry: 5458 liveins: $x3, $x4, $x5 5459 5460 %2 = COPY $x5 5461 %1 = COPY $x4 5462 %0 = COPY $x3 5463 %3 = COPY %1.sub_32 5464 %4 = COPY %2.sub_32 5465 %5 = ADDI %4, 1 5466 %7 = IMPLICIT_DEF 5467 %6 = INSERT_SUBREG %7, killed %5, 1 5468 %8 = LI8 111 5469 %13 = STWUX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8) 5470 ; CHECK: STWU %3, 111, %0 5471 ; CHECK-LATE: stwu {{[0-9]+}}, 111({{[0-9]+}}) 5472 %9 = ADDI %4, 2 5473 %11 = IMPLICIT_DEF 5474 %10 = INSERT_SUBREG %11, killed %9, 1 5475 %12 = LI8 0 5476 %14 = STWUX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8) 5477 ; CHECK: STWU %3, 0, %0 5478 ; CHECK-LATE: stwu {{[0-9]+}}, 0({{[0-9]+}}) 5479 BLR8 implicit $lr8, implicit $rm 5480 5481... 5482--- 5483name: testSTWX 5484# CHECK-ALL: name: testSTWX 5485alignment: 4 5486exposesReturnsTwice: false 5487legalized: false 5488regBankSelected: false 5489selected: false 5490tracksRegLiveness: true 5491registers: 5492 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5493 - { id: 1, class: g8rc, preferred-register: '' } 5494 - { id: 2, class: g8rc, preferred-register: '' } 5495 - { id: 3, class: gprc, preferred-register: '' } 5496 - { id: 4, class: gprc_and_gprc_nor0, preferred-register: '' } 5497 - { id: 5, class: gprc, preferred-register: '' } 5498 - { id: 6, class: g8rc, preferred-register: '' } 5499 - { id: 7, class: g8rc, preferred-register: '' } 5500 - { id: 8, class: g8rc, preferred-register: '' } 5501 - { id: 9, class: gprc, preferred-register: '' } 5502 - { id: 10, class: g8rc, preferred-register: '' } 5503 - { id: 11, class: g8rc, preferred-register: '' } 5504 - { id: 12, class: g8rc, preferred-register: '' } 5505liveins: 5506 - { reg: '$x3', virtual-reg: '%0' } 5507 - { reg: '$x4', virtual-reg: '%1' } 5508 - { reg: '$x5', virtual-reg: '%2' } 5509frameInfo: 5510 isFrameAddressTaken: false 5511 isReturnAddressTaken: false 5512 hasStackMap: false 5513 hasPatchPoint: false 5514 stackSize: 0 5515 offsetAdjustment: 0 5516 maxAlignment: 0 5517 adjustsStack: false 5518 hasCalls: false 5519 stackProtector: '' 5520 maxCallFrameSize: 4294967295 5521 hasOpaqueSPAdjustment: false 5522 hasVAStart: false 5523 hasMustTailInVarArgFunc: false 5524 savePoint: '' 5525 restorePoint: '' 5526fixedStack: 5527stack: 5528constants: 5529body: | 5530 bb.0.entry: 5531 liveins: $x3, $x4, $x5 5532 5533 %2 = COPY $x5 5534 %1 = COPY $x4 5535 %0 = COPY $x3 5536 %3 = COPY %1.sub_32 5537 %4 = COPY %2.sub_32 5538 %5 = ADDI %4, 1 5539 %7 = IMPLICIT_DEF 5540 %6 = INSERT_SUBREG %7, killed %5, 1 5541 %8 = LI8 2 5542 STWX %3, %0, killed %8 :: (store 4 into %ir.arrayidx, !tbaa !8) 5543 ; CHECK: STW %3, 2, %0 5544 ; CHECK-LATE: stw 4, 2(3) 5545 %9 = ADDI %4, 2 5546 %11 = IMPLICIT_DEF 5547 %10 = INSERT_SUBREG %11, killed %9, 1 5548 %12 = LI8 99 5549 STWX %3, %0, killed %12 :: (store 4 into %ir.arrayidx3, !tbaa !8) 5550 ; CHECK: STW %3, 99, %0 5551 ; CHECK-LATE: stw 4, 99(3) 5552 BLR8 implicit $lr8, implicit $rm 5553 5554... 5555--- 5556name: testSTDUX 5557# CHECK-ALL: name: testSTDUX 5558alignment: 4 5559exposesReturnsTwice: false 5560legalized: false 5561regBankSelected: false 5562selected: false 5563tracksRegLiveness: true 5564registers: 5565 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5566 - { id: 1, class: g8rc, preferred-register: '' } 5567 - { id: 2, class: g8rc, preferred-register: '' } 5568 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 5569 - { id: 4, class: gprc, preferred-register: '' } 5570 - { id: 5, class: g8rc, preferred-register: '' } 5571 - { id: 6, class: g8rc, preferred-register: '' } 5572 - { id: 7, class: g8rc, preferred-register: '' } 5573 - { id: 8, class: gprc, preferred-register: '' } 5574 - { id: 9, class: g8rc, preferred-register: '' } 5575 - { id: 10, class: g8rc, preferred-register: '' } 5576 - { id: 11, class: g8rc, preferred-register: '' } 5577 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5578 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5579liveins: 5580 - { reg: '$x3', virtual-reg: '%0' } 5581 - { reg: '$x4', virtual-reg: '%1' } 5582 - { reg: '$x5', virtual-reg: '%2' } 5583frameInfo: 5584 isFrameAddressTaken: false 5585 isReturnAddressTaken: false 5586 hasStackMap: false 5587 hasPatchPoint: false 5588 stackSize: 0 5589 offsetAdjustment: 0 5590 maxAlignment: 0 5591 adjustsStack: false 5592 hasCalls: false 5593 stackProtector: '' 5594 maxCallFrameSize: 4294967295 5595 hasOpaqueSPAdjustment: false 5596 hasVAStart: false 5597 hasMustTailInVarArgFunc: false 5598 savePoint: '' 5599 restorePoint: '' 5600fixedStack: 5601stack: 5602constants: 5603body: | 5604 bb.0.entry: 5605 liveins: $x3, $x4, $x5 5606 5607 %2 = COPY $x5 5608 %1 = COPY $x4 5609 %0 = COPY $x3 5610 %3 = COPY %2.sub_32 5611 %4 = ADDI %3, 1 5612 %6 = IMPLICIT_DEF 5613 %5 = INSERT_SUBREG %6, killed %4, 1 5614 %7 = LI8 444 5615 %12 = STDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10) 5616 ; CHECK: STDU %1, 444, %0 5617 ; CHECK-LATE: stdu {{[0-9]+}}, 444({{[0-9]+}}) 5618 %8 = ADDI %3, 2 5619 %10 = IMPLICIT_DEF 5620 %9 = INSERT_SUBREG %10, killed %8, 1 5621 %11 = LI8 -8 5622 %13 = STDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10) 5623 ; CHECK: STDU %1, -8, %0 5624 ; CHECK-LATE: stdu {{[0-9]+}}, -8({{[0-9]+}}) 5625 BLR8 implicit $lr8, implicit $rm 5626 5627... 5628--- 5629name: testSTDX 5630# CHECK-ALL: name: testSTDX 5631alignment: 4 5632exposesReturnsTwice: false 5633legalized: false 5634regBankSelected: false 5635selected: false 5636tracksRegLiveness: true 5637registers: 5638 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5639 - { id: 1, class: g8rc, preferred-register: '' } 5640 - { id: 2, class: g8rc, preferred-register: '' } 5641 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 5642 - { id: 4, class: gprc, preferred-register: '' } 5643 - { id: 5, class: g8rc, preferred-register: '' } 5644 - { id: 6, class: g8rc, preferred-register: '' } 5645 - { id: 7, class: g8rc, preferred-register: '' } 5646 - { id: 8, class: gprc, preferred-register: '' } 5647 - { id: 9, class: g8rc, preferred-register: '' } 5648 - { id: 10, class: g8rc, preferred-register: '' } 5649 - { id: 11, class: g8rc, preferred-register: '' } 5650liveins: 5651 - { reg: '$x3', virtual-reg: '%0' } 5652 - { reg: '$x4', virtual-reg: '%1' } 5653 - { reg: '$x5', virtual-reg: '%2' } 5654frameInfo: 5655 isFrameAddressTaken: false 5656 isReturnAddressTaken: false 5657 hasStackMap: false 5658 hasPatchPoint: false 5659 stackSize: 0 5660 offsetAdjustment: 0 5661 maxAlignment: 0 5662 adjustsStack: false 5663 hasCalls: false 5664 stackProtector: '' 5665 maxCallFrameSize: 4294967295 5666 hasOpaqueSPAdjustment: false 5667 hasVAStart: false 5668 hasMustTailInVarArgFunc: false 5669 savePoint: '' 5670 restorePoint: '' 5671fixedStack: 5672stack: 5673constants: 5674body: | 5675 bb.0.entry: 5676 liveins: $x3, $x4, $x5 5677 5678 %2 = COPY $x5 5679 %1 = COPY $x4 5680 %0 = LI8 1000 5681 %3 = COPY %2.sub_32 5682 %4 = ADDI %3, 1 5683 %6 = IMPLICIT_DEF 5684 %5 = INSERT_SUBREG %6, killed %4, 1 5685 %7 = LI8 900 5686 STDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !10) 5687 ; CHECK: STD %1, 1000, killed %7 5688 ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}}) 5689 %8 = ADDI %3, 2 5690 %10 = IMPLICIT_DEF 5691 %9 = INSERT_SUBREG %10, killed %8, 1 5692 %11 = LI8 -900 5693 STDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !10) 5694 ; CHECK: STD %1, 1000, killed %11 5695 ; CHECK-LATE: {{[0-9]+}}, 1000({{[0-9]+}}) 5696 BLR8 implicit $lr8, implicit $rm 5697 5698... 5699--- 5700name: testSTFSX 5701# CHECK-ALL: name: testSTFSX 5702alignment: 4 5703exposesReturnsTwice: false 5704legalized: false 5705regBankSelected: false 5706selected: false 5707tracksRegLiveness: true 5708registers: 5709 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5710 - { id: 1, class: f4rc, preferred-register: '' } 5711 - { id: 2, class: g8rc, preferred-register: '' } 5712 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 5713 - { id: 4, class: gprc, preferred-register: '' } 5714 - { id: 5, class: g8rc, preferred-register: '' } 5715 - { id: 6, class: g8rc, preferred-register: '' } 5716 - { id: 7, class: g8rc, preferred-register: '' } 5717 - { id: 8, class: gprc, preferred-register: '' } 5718 - { id: 9, class: g8rc, preferred-register: '' } 5719 - { id: 10, class: g8rc, preferred-register: '' } 5720 - { id: 11, class: g8rc, preferred-register: '' } 5721liveins: 5722 - { reg: '$x3', virtual-reg: '%0' } 5723 - { reg: '$f1', virtual-reg: '%1' } 5724 - { reg: '$x5', virtual-reg: '%2' } 5725frameInfo: 5726 isFrameAddressTaken: false 5727 isReturnAddressTaken: false 5728 hasStackMap: false 5729 hasPatchPoint: false 5730 stackSize: 0 5731 offsetAdjustment: 0 5732 maxAlignment: 0 5733 adjustsStack: false 5734 hasCalls: false 5735 stackProtector: '' 5736 maxCallFrameSize: 4294967295 5737 hasOpaqueSPAdjustment: false 5738 hasVAStart: false 5739 hasMustTailInVarArgFunc: false 5740 savePoint: '' 5741 restorePoint: '' 5742fixedStack: 5743stack: 5744constants: 5745body: | 5746 bb.0.entry: 5747 liveins: $x3, $f1, $x5 5748 5749 %2 = COPY $x5 5750 %1 = COPY $f1 5751 %0 = COPY $x3 5752 %3 = COPY %2.sub_32 5753 %4 = ADDI %3, 1 5754 %6 = IMPLICIT_DEF 5755 %5 = INSERT_SUBREG %6, killed %4, 1 5756 %7 = LI8 400 5757 STFSX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14) 5758 ; CHECK: STFS %1, 400, %0 5759 ; CHECK-LATE: stfs 1, 400(3) 5760 %8 = ADDI %3, 2 5761 %10 = IMPLICIT_DEF 5762 %9 = INSERT_SUBREG %10, killed %8, 1 5763 %11 = LI8 -401 5764 STFSX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14) 5765 ; CHECK: STFS %1, -401, %0 5766 ; CHECK-LATE: stfs 1, -401(3) 5767 BLR8 implicit $lr8, implicit $rm 5768 5769... 5770--- 5771name: testSTFSUX 5772# CHECK-ALL: name: testSTFSUX 5773alignment: 4 5774exposesReturnsTwice: false 5775legalized: false 5776regBankSelected: false 5777selected: false 5778tracksRegLiveness: true 5779registers: 5780 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5781 - { id: 1, class: f4rc, preferred-register: '' } 5782 - { id: 2, class: g8rc, preferred-register: '' } 5783 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 5784 - { id: 4, class: gprc, preferred-register: '' } 5785 - { id: 5, class: g8rc, preferred-register: '' } 5786 - { id: 6, class: g8rc, preferred-register: '' } 5787 - { id: 7, class: g8rc, preferred-register: '' } 5788 - { id: 8, class: gprc, preferred-register: '' } 5789 - { id: 9, class: g8rc, preferred-register: '' } 5790 - { id: 10, class: g8rc, preferred-register: '' } 5791 - { id: 11, class: g8rc, preferred-register: '' } 5792 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5793 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5794liveins: 5795 - { reg: '$x3', virtual-reg: '%0' } 5796 - { reg: '$f1', virtual-reg: '%1' } 5797 - { reg: '$x5', virtual-reg: '%2' } 5798frameInfo: 5799 isFrameAddressTaken: false 5800 isReturnAddressTaken: false 5801 hasStackMap: false 5802 hasPatchPoint: false 5803 stackSize: 0 5804 offsetAdjustment: 0 5805 maxAlignment: 0 5806 adjustsStack: false 5807 hasCalls: false 5808 stackProtector: '' 5809 maxCallFrameSize: 4294967295 5810 hasOpaqueSPAdjustment: false 5811 hasVAStart: false 5812 hasMustTailInVarArgFunc: false 5813 savePoint: '' 5814 restorePoint: '' 5815fixedStack: 5816stack: 5817constants: 5818body: | 5819 bb.0.entry: 5820 liveins: $x3, $f1, $x5 5821 5822 %2 = COPY $x5 5823 %1 = COPY $f1 5824 %0 = COPY $x3 5825 %3 = COPY %2.sub_32 5826 %4 = ADDI %3, 1 5827 %6 = IMPLICIT_DEF 5828 %5 = INSERT_SUBREG %6, killed %4, 1 5829 %7 = LI8 111 5830 %12 = STFSUX %1, %0, killed %7 :: (store 4 into %ir.arrayidx, !tbaa !14) 5831 ; CHECK: STFSU %1, 111, %0 5832 ; CHECK-LATE: stfsu {{[0-9]+}}, 111({{[0-9]+}}) 5833 %8 = ADDI %3, 2 5834 %10 = IMPLICIT_DEF 5835 %9 = INSERT_SUBREG %10, killed %8, 1 5836 %11 = LI8 987 5837 %13 = STFSUX %1, %0, killed %11 :: (store 4 into %ir.arrayidx3, !tbaa !14) 5838 ; CHECK: STFSU %1, 987, %0 5839 ; CHECK-LATE: stfsu {{[0-9]+}}, 987({{[0-9]+}}) 5840 BLR8 implicit $lr8, implicit $rm 5841 5842... 5843--- 5844name: testSTFDX 5845# CHECK-ALL: name: testSTFDX 5846alignment: 4 5847exposesReturnsTwice: false 5848legalized: false 5849regBankSelected: false 5850selected: false 5851tracksRegLiveness: true 5852registers: 5853 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5854 - { id: 1, class: f8rc, preferred-register: '' } 5855 - { id: 2, class: g8rc, preferred-register: '' } 5856 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 5857 - { id: 4, class: gprc, preferred-register: '' } 5858 - { id: 5, class: g8rc, preferred-register: '' } 5859 - { id: 6, class: g8rc, preferred-register: '' } 5860 - { id: 7, class: g8rc, preferred-register: '' } 5861 - { id: 8, class: gprc, preferred-register: '' } 5862 - { id: 9, class: g8rc, preferred-register: '' } 5863 - { id: 10, class: g8rc, preferred-register: '' } 5864 - { id: 11, class: g8rc, preferred-register: '' } 5865liveins: 5866 - { reg: '$x3', virtual-reg: '%0' } 5867 - { reg: '$f1', virtual-reg: '%1' } 5868 - { reg: '$x5', virtual-reg: '%2' } 5869frameInfo: 5870 isFrameAddressTaken: false 5871 isReturnAddressTaken: false 5872 hasStackMap: false 5873 hasPatchPoint: false 5874 stackSize: 0 5875 offsetAdjustment: 0 5876 maxAlignment: 0 5877 adjustsStack: false 5878 hasCalls: false 5879 stackProtector: '' 5880 maxCallFrameSize: 4294967295 5881 hasOpaqueSPAdjustment: false 5882 hasVAStart: false 5883 hasMustTailInVarArgFunc: false 5884 savePoint: '' 5885 restorePoint: '' 5886fixedStack: 5887stack: 5888constants: 5889body: | 5890 bb.0.entry: 5891 liveins: $x3, $f1, $x5 5892 5893 %2 = COPY $x5 5894 %1 = COPY $f1 5895 %0 = COPY $x3 5896 %3 = COPY %2.sub_32 5897 %4 = ADDI %3, 1 5898 %6 = IMPLICIT_DEF 5899 %5 = INSERT_SUBREG %6, killed %4, 1 5900 %7 = LI8 876 5901 STFDX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12) 5902 ; CHECK: STFD %1, 876, %0 5903 ; CHECK-LATE: stfd 1, 876(3) 5904 %8 = ADDI %3, 2 5905 %10 = IMPLICIT_DEF 5906 %9 = INSERT_SUBREG %10, killed %8, 1 5907 %11 = LI8 -873 5908 STFDX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12) 5909 ; CHECK: STFD %1, -873, %0 5910 ; CHECK-LATE: stfd 1, -873(3) 5911 BLR8 implicit $lr8, implicit $rm 5912 5913... 5914--- 5915name: testSTFDUX 5916# CHECK-ALL: name: testSTFDUX 5917alignment: 4 5918exposesReturnsTwice: false 5919legalized: false 5920regBankSelected: false 5921selected: false 5922tracksRegLiveness: true 5923registers: 5924 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5925 - { id: 1, class: f8rc, preferred-register: '' } 5926 - { id: 2, class: g8rc, preferred-register: '' } 5927 - { id: 3, class: gprc_and_gprc_nor0, preferred-register: '' } 5928 - { id: 4, class: gprc, preferred-register: '' } 5929 - { id: 5, class: g8rc, preferred-register: '' } 5930 - { id: 6, class: g8rc, preferred-register: '' } 5931 - { id: 7, class: g8rc, preferred-register: '' } 5932 - { id: 8, class: gprc, preferred-register: '' } 5933 - { id: 9, class: g8rc, preferred-register: '' } 5934 - { id: 10, class: g8rc, preferred-register: '' } 5935 - { id: 11, class: g8rc, preferred-register: '' } 5936 - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5937 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5938liveins: 5939 - { reg: '$x3', virtual-reg: '%0' } 5940 - { reg: '$f1', virtual-reg: '%1' } 5941 - { reg: '$x5', virtual-reg: '%2' } 5942frameInfo: 5943 isFrameAddressTaken: false 5944 isReturnAddressTaken: false 5945 hasStackMap: false 5946 hasPatchPoint: false 5947 stackSize: 0 5948 offsetAdjustment: 0 5949 maxAlignment: 0 5950 adjustsStack: false 5951 hasCalls: false 5952 stackProtector: '' 5953 maxCallFrameSize: 4294967295 5954 hasOpaqueSPAdjustment: false 5955 hasVAStart: false 5956 hasMustTailInVarArgFunc: false 5957 savePoint: '' 5958 restorePoint: '' 5959fixedStack: 5960stack: 5961constants: 5962body: | 5963 bb.0.entry: 5964 liveins: $x3, $f1, $x5 5965 5966 %2 = COPY $x5 5967 %1 = COPY $f1 5968 %0 = COPY $x3 5969 %3 = COPY %2.sub_32 5970 %4 = ADDI %3, 1 5971 %6 = IMPLICIT_DEF 5972 %5 = INSERT_SUBREG %6, killed %4, 1 5973 %7 = LI8 -9038 5974 %12 = STFDUX %1, %0, killed %7 :: (store 8 into %ir.arrayidx, !tbaa !12) 5975 ; CHECK: STFDU %1, -9038, %0 5976 ; CHECK-LATE: stfdu {{[0-9]+}}, -9038({{[0-9]+}}) 5977 %8 = ADDI %3, 2 5978 %10 = IMPLICIT_DEF 5979 %9 = INSERT_SUBREG %10, killed %8, 1 5980 %11 = LI8 6477 5981 %13 = STFDUX %1, %0, killed %11 :: (store 8 into %ir.arrayidx3, !tbaa !12) 5982 ; CHECK: STFDU %1, 6477, %0 5983 ; CHECK-LATE: stfdu {{[0-9]+}}, 6477({{[0-9]+}}) 5984 BLR8 implicit $lr8, implicit $rm 5985 5986... 5987--- 5988name: testSTXSSPX 5989# CHECK-ALL: name: testSTXSSPX 5990alignment: 4 5991exposesReturnsTwice: false 5992legalized: false 5993regBankSelected: false 5994selected: false 5995tracksRegLiveness: true 5996registers: 5997 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 5998 - { id: 1, class: vssrc, preferred-register: '' } 5999 - { id: 2, class: g8rc, preferred-register: '' } 6000 - { id: 3, class: g8rc, preferred-register: '' } 6001liveins: 6002 - { reg: '$x3', virtual-reg: '%0' } 6003 - { reg: '$f1', virtual-reg: '%1' } 6004 - { reg: '$x5', virtual-reg: '%2' } 6005frameInfo: 6006 isFrameAddressTaken: false 6007 isReturnAddressTaken: false 6008 hasStackMap: false 6009 hasPatchPoint: false 6010 stackSize: 0 6011 offsetAdjustment: 0 6012 maxAlignment: 0 6013 adjustsStack: false 6014 hasCalls: false 6015 stackProtector: '' 6016 maxCallFrameSize: 4294967295 6017 hasOpaqueSPAdjustment: false 6018 hasVAStart: false 6019 hasMustTailInVarArgFunc: false 6020 savePoint: '' 6021 restorePoint: '' 6022fixedStack: 6023stack: 6024constants: 6025body: | 6026 bb.0.entry: 6027 liveins: $x3, $f1, $x5 6028 6029 %2 = COPY $x5 6030 %1 = COPY $f1 6031 %0 = COPY $x3 6032 %3 = LI8 444 6033 STXSSPX %1, %0, killed %3 :: (store 4 into %ir.arrayidx, !tbaa !14) 6034 ; CHECK: DFSTOREf32 %1, 444, %0 6035 ; CHECK-LATE: stfs 1, 444(3) 6036 BLR8 implicit $lr8, implicit $rm 6037 6038... 6039--- 6040name: testSTXSDX 6041# CHECK-ALL: name: testSTXSDX 6042alignment: 4 6043exposesReturnsTwice: false 6044legalized: false 6045regBankSelected: false 6046selected: false 6047tracksRegLiveness: true 6048registers: 6049 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 6050 - { id: 1, class: vsfrc, preferred-register: '' } 6051 - { id: 2, class: g8rc, preferred-register: '' } 6052 - { id: 3, class: g8rc, preferred-register: '' } 6053liveins: 6054 - { reg: '$x3', virtual-reg: '%0' } 6055 - { reg: '$f1', virtual-reg: '%1' } 6056 - { reg: '$x5', virtual-reg: '%2' } 6057frameInfo: 6058 isFrameAddressTaken: false 6059 isReturnAddressTaken: false 6060 hasStackMap: false 6061 hasPatchPoint: false 6062 stackSize: 0 6063 offsetAdjustment: 0 6064 maxAlignment: 0 6065 adjustsStack: false 6066 hasCalls: false 6067 stackProtector: '' 6068 maxCallFrameSize: 4294967295 6069 hasOpaqueSPAdjustment: false 6070 hasVAStart: false 6071 hasMustTailInVarArgFunc: false 6072 savePoint: '' 6073 restorePoint: '' 6074fixedStack: 6075stack: 6076constants: 6077body: | 6078 bb.0.entry: 6079 liveins: $x3, $f1, $x5 6080 6081 %2 = COPY $x5 6082 %1 = COPY $f1 6083 %0 = COPY $x3 6084 %3 = LI8 4 6085 STXSDX %1, %0, killed %3, implicit $rm :: (store 8 into %ir.arrayidx, !tbaa !12) 6086 ; CHECK: DFSTOREf64 %1, 4, %0 6087 ; CHECK-LATE: stfd 1, 4(3) 6088 BLR8 implicit $lr8, implicit $rm 6089 6090... 6091--- 6092name: testSTXVX 6093# CHECK-ALL: name: testSTXVX 6094alignment: 4 6095exposesReturnsTwice: false 6096legalized: false 6097regBankSelected: false 6098selected: false 6099tracksRegLiveness: true 6100registers: 6101 - { id: 0, class: g8rc_and_g8rc_nox0, preferred-register: '' } 6102 - { id: 1, class: vrrc, preferred-register: '' } 6103 - { id: 2, class: g8rc, preferred-register: '' } 6104 - { id: 3, class: g8rc, preferred-register: '' } 6105liveins: 6106 - { reg: '$x3', virtual-reg: '%0' } 6107 - { reg: '$v2', virtual-reg: '%1' } 6108 - { reg: '$x7', virtual-reg: '%2' } 6109frameInfo: 6110 isFrameAddressTaken: false 6111 isReturnAddressTaken: false 6112 hasStackMap: false 6113 hasPatchPoint: false 6114 stackSize: 0 6115 offsetAdjustment: 0 6116 maxAlignment: 0 6117 adjustsStack: false 6118 hasCalls: false 6119 stackProtector: '' 6120 maxCallFrameSize: 4294967295 6121 hasOpaqueSPAdjustment: false 6122 hasVAStart: false 6123 hasMustTailInVarArgFunc: false 6124 savePoint: '' 6125 restorePoint: '' 6126fixedStack: 6127stack: 6128constants: 6129body: | 6130 bb.0.entry: 6131 liveins: $x3, $v2, $x7 6132 6133 %2 = COPY $x7 6134 %1 = COPY $v2 6135 %0 = LI8 16 6136 %3 = RLDICR %2, 4, 59 6137 STXVX %1, %0, killed %3 :: (store 16 into %ir.arrayidx, !tbaa !3) 6138 ; CHECK: STXV %1, 16, killed %3 6139 ; CHECK-LATE: stxv 34, 16(4) 6140 BLR8 implicit $lr8, implicit $rm 6141 6142... 6143--- 6144name: testSUBFC 6145# CHECK-ALL: name: testSUBFC 6146alignment: 4 6147exposesReturnsTwice: false 6148legalized: false 6149regBankSelected: false 6150selected: false 6151tracksRegLiveness: true 6152registers: 6153 - { id: 0, class: gprc, preferred-register: '' } 6154 - { id: 1, class: g8rc, preferred-register: '' } 6155 - { id: 2, class: g8rc, preferred-register: '' } 6156 - { id: 3, class: g8rc, preferred-register: '' } 6157 - { id: 4, class: gprc, preferred-register: '' } 6158 - { id: 5, class: gprc, preferred-register: '' } 6159 - { id: 6, class: gprc, preferred-register: '' } 6160 - { id: 7, class: gprc, preferred-register: '' } 6161 - { id: 8, class: gprc, preferred-register: '' } 6162liveins: 6163 - { reg: '$x3', virtual-reg: '%0' } 6164 - { reg: '$x4', virtual-reg: '%1' } 6165 - { reg: '$x5', virtual-reg: '%2' } 6166 - { reg: '$x6', virtual-reg: '%3' } 6167frameInfo: 6168 isFrameAddressTaken: false 6169 isReturnAddressTaken: false 6170 hasStackMap: false 6171 hasPatchPoint: false 6172 stackSize: 0 6173 offsetAdjustment: 0 6174 maxAlignment: 0 6175 adjustsStack: false 6176 hasCalls: false 6177 stackProtector: '' 6178 maxCallFrameSize: 4294967295 6179 hasOpaqueSPAdjustment: false 6180 hasVAStart: false 6181 hasMustTailInVarArgFunc: false 6182 savePoint: '' 6183 restorePoint: '' 6184fixedStack: 6185stack: 6186constants: 6187body: | 6188 bb.0.entry: 6189 liveins: $x3, $x4, $x5, $x6 6190 6191 %3 = COPY $x6 6192 %2 = COPY $x5 6193 %1 = COPY $x4 6194 %6 = COPY %3.sub_32 6195 %7 = COPY %2.sub_32 6196 %8 = COPY %1.sub_32 6197 %0 = LI 55 6198 %4 = SUBFC %7, %0, implicit-def $carry 6199 ; CHECK: SUBFIC %7, 55 6200 ; CHECK-LATE: subfic 3, 5, 55 6201 %5 = SUBFE %6, %8, implicit-def dead $carry, implicit $carry 6202 $x3 = EXTSW_32_64 %4 6203 $x4 = EXTSW_32_64 %5 6204 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4 6205 6206... 6207--- 6208name: testSUBFC8 6209# CHECK-ALL: name: testSUBFC8 6210alignment: 4 6211exposesReturnsTwice: false 6212legalized: false 6213regBankSelected: false 6214selected: false 6215tracksRegLiveness: true 6216registers: 6217 - { id: 0, class: g8rc, preferred-register: '' } 6218 - { id: 1, class: g8rc, preferred-register: '' } 6219 - { id: 2, class: g8rc, preferred-register: '' } 6220 - { id: 3, class: g8rc, preferred-register: '' } 6221 - { id: 4, class: g8rc, preferred-register: '' } 6222 - { id: 5, class: g8rc, preferred-register: '' } 6223liveins: 6224 - { reg: '$x3', virtual-reg: '%0' } 6225 - { reg: '$x4', virtual-reg: '%1' } 6226 - { reg: '$x5', virtual-reg: '%2' } 6227 - { reg: '$x6', virtual-reg: '%3' } 6228frameInfo: 6229 isFrameAddressTaken: false 6230 isReturnAddressTaken: false 6231 hasStackMap: false 6232 hasPatchPoint: false 6233 stackSize: 0 6234 offsetAdjustment: 0 6235 maxAlignment: 0 6236 adjustsStack: false 6237 hasCalls: false 6238 stackProtector: '' 6239 maxCallFrameSize: 4294967295 6240 hasOpaqueSPAdjustment: false 6241 hasVAStart: false 6242 hasMustTailInVarArgFunc: false 6243 savePoint: '' 6244 restorePoint: '' 6245fixedStack: 6246stack: 6247constants: 6248body: | 6249 bb.0.entry: 6250 liveins: $x3, $x4, $x5, $x6 6251 6252 %3 = COPY $x6 6253 %2 = COPY $x5 6254 %1 = COPY $x4 6255 %0 = LI8 7635 6256 %4 = SUBFC8 %2, %0, implicit-def $carry 6257 ; CHECK: SUBFIC8 %2, 7635 6258 ; CHECK-LATE: subfic 3, 5, 7635 6259 %5 = SUBFE8 %3, %1, implicit-def dead $carry, implicit $carry 6260 $x3 = COPY %4 6261 $x4 = COPY %5 6262 BLR8 implicit $lr8, implicit $rm, implicit $x3, implicit $x4 6263 6264... 6265--- 6266name: testXOR 6267# CHECK-ALL: name: testXOR 6268alignment: 4 6269exposesReturnsTwice: false 6270legalized: false 6271regBankSelected: false 6272selected: false 6273tracksRegLiveness: true 6274registers: 6275 - { id: 0, class: g8rc, preferred-register: '' } 6276 - { id: 1, class: gprc, preferred-register: '' } 6277 - { id: 2, class: gprc, preferred-register: '' } 6278 - { id: 3, class: gprc, preferred-register: '' } 6279liveins: 6280 - { reg: '$x3', virtual-reg: '%0' } 6281 - { reg: '$x4', virtual-reg: '%1' } 6282frameInfo: 6283 isFrameAddressTaken: false 6284 isReturnAddressTaken: false 6285 hasStackMap: false 6286 hasPatchPoint: false 6287 stackSize: 0 6288 offsetAdjustment: 0 6289 maxAlignment: 0 6290 adjustsStack: false 6291 hasCalls: false 6292 stackProtector: '' 6293 maxCallFrameSize: 4294967295 6294 hasOpaqueSPAdjustment: false 6295 hasVAStart: false 6296 hasMustTailInVarArgFunc: false 6297 savePoint: '' 6298 restorePoint: '' 6299fixedStack: 6300stack: 6301constants: 6302body: | 6303 bb.0.entry: 6304 liveins: $x3, $x4 6305 6306 %1 = LI 10101 6307 %0 = COPY $x3 6308 %3 = COPY %0.sub_32 6309 %2 = XOR %1, %3 6310 ; CHECK: XORI %3, 10101 6311 ; CHECK-LATE: 3, 3, 10101 6312 $x3 = EXTSW_32_64 %2 6313 BLR8 implicit $lr8, implicit $rm, implicit $x3 6314 6315... 6316--- 6317name: testXOR8 6318# CHECK-ALL: name: testXOR8 6319alignment: 4 6320exposesReturnsTwice: false 6321legalized: false 6322regBankSelected: false 6323selected: false 6324tracksRegLiveness: true 6325registers: 6326 - { id: 0, class: g8rc, preferred-register: '' } 6327 - { id: 1, class: g8rc, preferred-register: '' } 6328 - { id: 2, class: g8rc, preferred-register: '' } 6329liveins: 6330 - { reg: '$x3', virtual-reg: '%0' } 6331 - { reg: '$x4', virtual-reg: '%1' } 6332frameInfo: 6333 isFrameAddressTaken: false 6334 isReturnAddressTaken: false 6335 hasStackMap: false 6336 hasPatchPoint: false 6337 stackSize: 0 6338 offsetAdjustment: 0 6339 maxAlignment: 0 6340 adjustsStack: false 6341 hasCalls: false 6342 stackProtector: '' 6343 maxCallFrameSize: 4294967295 6344 hasOpaqueSPAdjustment: false 6345 hasVAStart: false 6346 hasMustTailInVarArgFunc: false 6347 savePoint: '' 6348 restorePoint: '' 6349fixedStack: 6350stack: 6351constants: 6352body: | 6353 bb.0.entry: 6354 liveins: $x3, $x4 6355 6356 %1 = COPY $x4 6357 %0 = LI8 5535 6358 %2 = XOR8 %1, %0 6359 ; CHECK: XORI8 %1, 5535 6360 ; CHECK-LATE: xori 3, 4, 5535 6361 $x3 = COPY %2 6362 BLR8 implicit $lr8, implicit $rm, implicit $x3 6363 6364... 6365--- 6366name: testXORI 6367# CHECK-ALL: name: testXORI 6368alignment: 4 6369exposesReturnsTwice: false 6370legalized: false 6371regBankSelected: false 6372selected: false 6373tracksRegLiveness: true 6374registers: 6375 - { id: 0, class: gprc, preferred-register: '' } 6376 - { id: 1, class: gprc, preferred-register: '' } 6377liveins: 6378 - { reg: '$x3', virtual-reg: '%0' } 6379frameInfo: 6380 isFrameAddressTaken: false 6381 isReturnAddressTaken: false 6382 hasStackMap: false 6383 hasPatchPoint: false 6384 stackSize: 0 6385 offsetAdjustment: 0 6386 maxAlignment: 0 6387 adjustsStack: false 6388 hasCalls: false 6389 stackProtector: '' 6390 maxCallFrameSize: 4294967295 6391 hasOpaqueSPAdjustment: false 6392 hasVAStart: false 6393 hasMustTailInVarArgFunc: false 6394 savePoint: '' 6395 restorePoint: '' 6396fixedStack: 6397stack: 6398constants: 6399body: | 6400 bb.0.entry: 6401 liveins: $x3 6402 6403 %0 = LI 871 6404 %1 = XORI %0, 17 6405 ; CHECK: LI 886 6406 ; CHECK-LATE: li 3, 886 6407 $x3 = EXTSW_32_64 %1 6408 BLR8 implicit $lr8, implicit $rm, implicit $x3 6409 6410... 6411--- 6412name: testXOR8I 6413# CHECK-ALL: name: testXOR8I 6414alignment: 4 6415exposesReturnsTwice: false 6416legalized: false 6417regBankSelected: false 6418selected: false 6419tracksRegLiveness: true 6420registers: 6421 - { id: 0, class: g8rc, preferred-register: '' } 6422 - { id: 1, class: g8rc, preferred-register: '' } 6423liveins: 6424 - { reg: '$x3', virtual-reg: '%0' } 6425frameInfo: 6426 isFrameAddressTaken: false 6427 isReturnAddressTaken: false 6428 hasStackMap: false 6429 hasPatchPoint: false 6430 stackSize: 0 6431 offsetAdjustment: 0 6432 maxAlignment: 0 6433 adjustsStack: false 6434 hasCalls: false 6435 stackProtector: '' 6436 maxCallFrameSize: 4294967295 6437 hasOpaqueSPAdjustment: false 6438 hasVAStart: false 6439 hasMustTailInVarArgFunc: false 6440 savePoint: '' 6441 restorePoint: '' 6442fixedStack: 6443stack: 6444constants: 6445body: | 6446 bb.0.entry: 6447 liveins: $x3 6448 6449 %0 = LI8 453 6450 %1 = XORI8 %0, 17 6451 ; CHECK: LI8 468 6452 ; CHECK-LATE: li 3, 468 6453 $x3 = COPY %1 6454 BLR8 implicit $lr8, implicit $rm, implicit $x3 6455 6456... 6457