@@ -320,3 +320,245 @@ body: |
320320 RET_ReallyLR
321321
322322 ...
323+ ---
324+ name : rhs_add_nuw
325+ alignment : 4
326+ liveins :
327+ - { reg: '$x0' }
328+ - { reg: '$x1' }
329+ body : |
330+ bb.1:
331+ liveins: $x0, $x1
332+
333+ ; CHECK-LABEL: name: rhs_add_nuw
334+ ; CHECK: liveins: $x0, $x1
335+ ; CHECK-NEXT: {{ $}}
336+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
337+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
338+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
339+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[COPY1]](s64)
340+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD]], [[C]](s64)
341+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
342+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
343+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
344+ %0:_(p0) = COPY $x0
345+ %1:_(s64) = COPY $x1
346+ %2:_(s64) = G_CONSTANT i64 1
347+ %3:_(s64) = nuw G_ADD %1, %2
348+ %4:_(p0) = nuw G_PTR_ADD %0, %3(s64)
349+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
350+ $w0 = COPY %7(s32)
351+ RET_ReallyLR implicit $w0
352+
353+ ...
354+ ---
355+ name : rhs_add_nuw_nusw
356+ alignment : 4
357+ liveins :
358+ - { reg: '$x0' }
359+ - { reg: '$x1' }
360+ body : |
361+ bb.1:
362+ liveins: $x0, $x1
363+
364+ ; CHECK-LABEL: name: rhs_add_nuw_nusw
365+ ; CHECK: liveins: $x0, $x1
366+ ; CHECK-NEXT: {{ $}}
367+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
368+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
369+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
370+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[COPY1]](s64)
371+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD]], [[C]](s64)
372+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
373+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
374+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
375+ %0:_(p0) = COPY $x0
376+ %1:_(s64) = COPY $x1
377+ %2:_(s64) = G_CONSTANT i64 1
378+ %3:_(s64) = nuw G_ADD %1, %2
379+ %4:_(p0) = nuw nusw G_PTR_ADD %0, %3(s64)
380+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
381+ $w0 = COPY %7(s32)
382+ RET_ReallyLR implicit $w0
383+
384+ ...
385+ ---
386+ name : rhs_add_nuw_inbounds
387+ alignment : 4
388+ liveins :
389+ - { reg: '$x0' }
390+ - { reg: '$x1' }
391+ body : |
392+ bb.1:
393+ liveins: $x0, $x1
394+
395+ ; CHECK-LABEL: name: rhs_add_nuw_inbounds
396+ ; CHECK: liveins: $x0, $x1
397+ ; CHECK-NEXT: {{ $}}
398+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
399+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
400+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
401+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[COPY1]](s64)
402+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD]], [[C]](s64)
403+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
404+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
405+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
406+ %0:_(p0) = COPY $x0
407+ %1:_(s64) = COPY $x1
408+ %2:_(s64) = G_CONSTANT i64 1
409+ %3:_(s64) = nuw G_ADD %1, %2
410+ %4:_(p0) = nuw nusw inbounds G_PTR_ADD %0, %3(s64)
411+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
412+ $w0 = COPY %7(s32)
413+ RET_ReallyLR implicit $w0
414+
415+ ...
416+ ---
417+ name : reassoc_nuw
418+ alignment : 4
419+ liveins :
420+ - { reg: '$x0' }
421+ - { reg: '$x1' }
422+ body : |
423+ bb.1:
424+ liveins: $x0, $x1
425+
426+ ; CHECK-LABEL: name: reassoc_nuw
427+ ; CHECK: liveins: $x0, $x1
428+ ; CHECK-NEXT: {{ $}}
429+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
430+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
431+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
432+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[COPY1]](s64)
433+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[PTR_ADD]], [[C]](s64)
434+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
435+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
436+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
437+ %0:_(p0) = COPY $x0
438+ %1:_(s64) = COPY $x1
439+ %2:_(s64) = G_CONSTANT i64 1
440+ %3:_(p0) = nuw G_PTR_ADD %0, %2(s64)
441+ %4:_(p0) = nuw G_PTR_ADD %3(p0), %1
442+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
443+ $w0 = COPY %7(s32)
444+ RET_ReallyLR implicit $w0
445+
446+ ...
447+ ---
448+ name : reassoc_nuw_nusw
449+ alignment : 4
450+ liveins :
451+ - { reg: '$x0' }
452+ - { reg: '$x1' }
453+ body : |
454+ bb.1:
455+ liveins: $x0, $x1
456+
457+ ; CHECK-LABEL: name: reassoc_nuw_nusw
458+ ; CHECK: liveins: $x0, $x1
459+ ; CHECK-NEXT: {{ $}}
460+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
461+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
462+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
463+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[COPY]], [[COPY1]](s64)
464+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw G_PTR_ADD [[PTR_ADD]], [[C]](s64)
465+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
466+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
467+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
468+ %0:_(p0) = COPY $x0
469+ %1:_(s64) = COPY $x1
470+ %2:_(s64) = G_CONSTANT i64 1
471+ %3:_(p0) = nuw nusw G_PTR_ADD %0, %2(s64)
472+ %4:_(p0) = nuw nusw G_PTR_ADD %3(p0), %1
473+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
474+ $w0 = COPY %7(s32)
475+ RET_ReallyLR implicit $w0
476+
477+ ...
478+ ---
479+ name : reassoc_nuw_inbounds
480+ alignment : 4
481+ liveins :
482+ - { reg: '$x0' }
483+ - { reg: '$x1' }
484+ body : |
485+ bb.1:
486+ liveins: $x0, $x1
487+
488+ ; CHECK-LABEL: name: reassoc_nuw_inbounds
489+ ; CHECK: liveins: $x0, $x1
490+ ; CHECK-NEXT: {{ $}}
491+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
492+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
493+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
494+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[COPY1]](s64)
495+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[PTR_ADD]], [[C]](s64)
496+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
497+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
498+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
499+ %0:_(p0) = COPY $x0
500+ %1:_(s64) = COPY $x1
501+ %2:_(s64) = G_CONSTANT i64 1
502+ %3:_(p0) = nuw nusw inbounds G_PTR_ADD %0, %2(s64)
503+ %4:_(p0) = nuw nusw inbounds G_PTR_ADD %3(p0), %1
504+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
505+ $w0 = COPY %7(s32)
506+ RET_ReallyLR implicit $w0
507+
508+ ...
509+ ---
510+ name : combine_offsets_nuw
511+ alignment : 4
512+ liveins :
513+ - { reg: '$x0' }
514+ body : |
515+ bb.1:
516+ liveins: $x0
517+
518+ ; CHECK-LABEL: name: combine_offsets_nuw
519+ ; CHECK: liveins: $x0
520+ ; CHECK-NEXT: {{ $}}
521+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
522+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11
523+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw G_PTR_ADD [[COPY]], [[C]](s64)
524+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s8))
525+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
526+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
527+ %0:_(p0) = COPY $x0
528+ %1:_(s64) = G_CONSTANT i64 10
529+ %2:_(s64) = G_CONSTANT i64 1
530+ %3:_(p0) = nuw G_PTR_ADD %0, %1
531+ %4:_(p0) = nuw G_PTR_ADD %3(p0), %2
532+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
533+ $w0 = COPY %7(s32)
534+ RET_ReallyLR implicit $w0
535+
536+ ...
537+ ---
538+ name : combine_offsets_nuw_inbounds
539+ alignment : 4
540+ liveins :
541+ - { reg: '$x0' }
542+ body : |
543+ bb.1:
544+ liveins: $x0
545+
546+ ; CHECK-LABEL: name: combine_offsets_nuw_inbounds
547+ ; CHECK: liveins: $x0
548+ ; CHECK-NEXT: {{ $}}
549+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
550+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11
551+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw nusw inbounds G_PTR_ADD [[COPY]], [[C]](s64)
552+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s8))
553+ ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
554+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
555+ %0:_(p0) = COPY $x0
556+ %1:_(s64) = G_CONSTANT i64 10
557+ %2:_(s64) = G_CONSTANT i64 1
558+ %3:_(p0) = nuw nusw inbounds G_PTR_ADD %0, %1
559+ %4:_(p0) = nuw nusw inbounds G_PTR_ADD %3(p0), %2
560+ %7:_(s32) = G_LOAD %4(p0) :: (load 1)
561+ $w0 = COPY %7(s32)
562+ RET_ReallyLR implicit $w0
563+
564+ ...
0 commit comments