# RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu \ # RUN: -run-pass ppc-mi-peepholes %s -o - -verify-machineinstrs | FileCheck %s --- name: testFoldRLWINM #CHECK: name: testFoldRLWINM tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 27, 5, 31 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 5, 31 %3:gprc = RLWINM %2:gprc, 19, 0, 12 ; CHECK: %3:gprc = RLWINM %1, 14, 0, 12 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMSrcFullMask1 #CHECK: name: testFoldRLWINMSrcFullMask1 tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 27, 0, 31 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 0, 31 %3:gprc = RLWINM %2:gprc, 19, 0, 12 ; CHECK: %3:gprc = RLWINM %1, 14, 0, 12 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMSrcFullMask2 #CHECK: name: testFoldRLWINMSrcFullMask2 tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 27, 10, 9 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 10, 9 %3:gprc = RLWINM %2:gprc, 19, 10, 1 ; CHECK: %3:gprc = RLWINM %1, 14, 10, 1 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMSrcWrapped #CHECK: name: testFoldRLWINMSrcWrapped tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 27, 30, 10 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 30, 10 %3:gprc = RLWINM %2:gprc, 19, 0, 12 ; CHECK: %3:gprc = RLWINM %1, 14, 11, 12 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMUserWrapped #CHECK: name: testFoldRLWINMUserWrapped tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 10, 5, 31 ; CHECK: %2:gprc = RLWINM %1, 10, 5, 31 %3:gprc = RLWINM %2:gprc, 10, 30, 5 ; CHECK: %3:gprc = RLWINM %2, 10, 30, 5 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMResultWrapped #CHECK: name: testFoldRLWINMResultWrapped tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 10, 20, 10 ; CHECK: %2:gprc = RLWINM %1, 10, 20, 10 %3:gprc = RLWINM %2:gprc, 10, 0, 31 ; CHECK: %3:gprc = RLWINM %2, 10, 0, 31 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMMultipleUses #CHECK: name: testFoldRLWINMMultipleUses tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM killed %1:gprc, 27, 5, 31 ; CHECK: %2:gprc = RLWINM %1, 27, 5, 31 %3:gprc = RLWINM %2:gprc, 19, 0, 12 ; CHECK: %3:gprc = RLWINM killed %1, 14, 0, 12 STW %3:gprc, %2:gprc, 100 ; CHECK: STW %3, %2, 100 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMToZero #CHECK: name: testFoldRLWINMToZero tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 27, 5, 10 ; CHECK-NOT: RLWINM %1, %3:gprc = RLWINM %2:gprc, 8, 5, 10 ; CHECK: %3:gprc = LI 0 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINM_recToZero #CHECK: name: testFoldRLWINM_recToZero tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 27, 5, 10 ; CHECK-NOT: RLWINM %1, %3:gprc = RLWINM_rec %2:gprc, 8, 5, 10, implicit-def $cr0 ; CHECK: %3:gprc = ANDI_rec %1, 0, implicit-def $cr0 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMoToZeroSrcCanNotBeDeleted #CHECK: name: testFoldRLWINMoToZeroSrcCanNotBeDeleted tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM_rec %1:gprc, 27, 5, 10, implicit-def $cr0 ; CHECK: %2:gprc = RLWINM_rec %1, 27, 5, 10, implicit-def $cr0 %3:gprc = RLWINM_rec %2:gprc, 8, 5, 10, implicit-def $cr0 ; CHECK: %3:gprc = ANDI_rec %1, 0, implicit-def $cr0 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMInvalidMask #CHECK: name: testFoldRLWINMInvalidMask tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 20, 5, 31 ; CHECK: %2:gprc = RLWINM %1, 20, 5, 31 %3:gprc = RLWINM %2:gprc, 19, 10, 20 ; CHECK: %3:gprc = RLWINM %2, 19, 10, 20 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMLIWrapMask #CHECK: name: testFoldRLWINMLIWrapMask tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:gprc = COPY $x3 %1:gprc = LI 100 ; CHECK: %2:gprc = LI 200 %2:gprc = RLWINM %1:gprc, 1, 3, 2 STW %2:gprc, %0:gprc, 100 BLR8 implicit $lr8, implicit $rm ... --- name: testFoldRLWINMAndANDI tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 ; CHECK-LABEL: name: testFoldRLWINMAndANDI ; CHECK: liveins: $x3 ; CHECK: [[COPY:%[0-9]+]]:g8rc = COPY $x3 ; CHECK: [[COPY1:%[0-9]+]]:gprc = COPY [[COPY]].sub_32 ; CHECK: [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 4, 28, 31 ; CHECK: [[ANDI_rec:%[0-9]+]]:gprc = ANDI_rec [[RLWINM]], 4, implicit-def $cr0 ; CHECK: BLR8 implicit $lr8, implicit $rm %0:g8rc = COPY $x3 %1:gprc = COPY %0.sub_32:g8rc %2:gprc = RLWINM %1:gprc, 4, 28, 31 %3:gprc = ANDI_rec %2:gprc, 4, implicit-def $cr0 BLR8 implicit $lr8, implicit $rm ...