# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -run-pass=aarch64-mi-peephole-opt -o - -mtriple=aarch64-unknown-linux -verify-machineinstrs %s | FileCheck %s --- | define i64 @loop2(i32 noundef %width) { entry: %add = add i32 %width, -1 %zext = zext i32 %add to i64 %shl = shl nuw nsw i64 %zext, 1 ret i64 %shl } define <8 x i16> @pr63777(<8 x i16> %vmull.i, ptr %iPtr) { entry: %ld = load <8 x i8>, ptr %iPtr, align 1 %shuffle.i.i = shufflevector <8 x i8> %ld, <8 x i8> zeroinitializer, <16 x i32> %bc = bitcast <16 x i8> %shuffle.i.i to <8 x i16> %vecinit7.i = shufflevector <8 x i16> %bc, <8 x i16> zeroinitializer, <8 x i32> %mul.i109 = mul <8 x i16> %vecinit7.i, %vmull.i %or.i = or <8 x i16> %mul.i109, %bc ret <8 x i16> %or.i } ... --- --- name: loop2 alignment: 4 tracksRegLiveness: true registers: - { id: 0, class: gpr32common, preferred-register: '' } - { id: 1, class: gpr32common, preferred-register: '' } - { id: 2, class: gpr64, preferred-register: '' } - { id: 3, class: gpr64all, preferred-register: '' } - { id: 4, class: gpr64, preferred-register: '' } liveins: - { reg: '$w0', virtual-reg: '%0' } body: | bb.0.entry: liveins: $w0 ; CHECK-LABEL: name: loop2 ; CHECK: liveins: $w0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32common = COPY $w0 ; CHECK-NEXT: [[SUBWri:%[0-9]+]]:gpr32common = SUBWri [[COPY]], 1, 0 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gpr64all = IMPLICIT_DEF ; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64 = SUBREG_TO_REG 0, killed [[SUBWri]], %subreg.sub_32 ; CHECK-NEXT: [[UBFMXri:%[0-9]+]]:gpr64 = nuw nsw UBFMXri killed [[SUBREG_TO_REG]], 63, 31 ; CHECK-NEXT: $x0 = COPY [[UBFMXri]] ; CHECK-NEXT: RET_ReallyLR implicit $x0 %0:gpr32common = COPY $w0 %1:gpr32common = SUBWri %0, 1, 0 %3:gpr64all = IMPLICIT_DEF %2:gpr64 = INSERT_SUBREG %3, killed %1, %subreg.sub_32 %4:gpr64 = nuw nsw UBFMXri killed %2, 63, 31 $x0 = COPY %4 RET_ReallyLR implicit $x0 ... --- name: pr63777 tracksRegLiveness: true registers: - { id: 0, class: fpr128, preferred-register: '' } - { id: 1, class: gpr64common, preferred-register: '' } - { id: 2, class: fpr64, preferred-register: '' } - { id: 3, class: fpr128, preferred-register: '' } - { id: 4, class: fpr64, preferred-register: '' } - { id: 5, class: fpr128, preferred-register: '' } - { id: 6, class: fpr128, preferred-register: '' } - { id: 7, class: fpr128, preferred-register: '' } - { id: 8, class: fpr128, preferred-register: '' } - { id: 9, class: fpr128_lo, preferred-register: '' } - { id: 10, class: fpr128, preferred-register: '' } - { id: 11, class: fpr128, preferred-register: '' } liveins: - { reg: '$q0', virtual-reg: '%0' } - { reg: '$x0', virtual-reg: '%1' } body: | bb.0.entry: liveins: $q0, $x0 ; CHECK-LABEL: name: pr63777 ; CHECK: liveins: $q0, $x0 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr128 = COPY $q0 ; CHECK-NEXT: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 0 :: (load (s64) from %ir.iPtr, align 1) ; CHECK-NEXT: [[MOVIv2d_ns:%[0-9]+]]:fpr128 = MOVIv2d_ns 0 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:fpr64 = COPY [[MOVIv2d_ns]].dsub ; CHECK-NEXT: [[DEF:%[0-9]+]]:fpr128 = IMPLICIT_DEF ; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:fpr128 = INSERT_SUBREG [[DEF]], killed [[COPY2]], %subreg.dsub ; CHECK-NEXT: [[DEF1:%[0-9]+]]:fpr128 = IMPLICIT_DEF ; CHECK-NEXT: [[INSERT_SUBREG1:%[0-9]+]]:fpr128_lo = INSERT_SUBREG [[DEF1]], killed [[LDRDui]], %subreg.dsub ; CHECK-NEXT: [[MULv8i16_indexed:%[0-9]+]]:fpr128 = MULv8i16_indexed [[COPY1]], [[INSERT_SUBREG1]], 1 ; CHECK-NEXT: [[ORRv16i8_:%[0-9]+]]:fpr128 = ORRv16i8 killed [[MULv8i16_indexed]], [[INSERT_SUBREG1]] ; CHECK-NEXT: $q0 = COPY [[ORRv16i8_]] ; CHECK-NEXT: RET_ReallyLR implicit $q0 %1:gpr64common = COPY $x0 %0:fpr128 = COPY $q0 %2:fpr64 = LDRDui %1, 0 :: (load (s64) from %ir.iPtr, align 1) %3:fpr128 = MOVIv2d_ns 0 %4:fpr64 = COPY %3.dsub %6:fpr128 = IMPLICIT_DEF %5:fpr128 = INSERT_SUBREG %6, killed %4, %subreg.dsub %8:fpr128 = IMPLICIT_DEF %7:fpr128 = INSERT_SUBREG %8, killed %2, %subreg.dsub %9:fpr128_lo = INSvi64lane %7, 1, killed %5, 0 %10:fpr128 = MULv8i16_indexed %0, %9, 1 %11:fpr128 = ORRv16i8 killed %10, %9 $q0 = COPY %11 RET_ReallyLR implicit $q0 ...