1# RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu \ 2# RUN: -run-pass ppc-mi-peepholes %s -o - -verify-machineinstrs | FileCheck %s 3 4--- 5name: testFoldRLWINM 6#CHECK: name: testFoldRLWINM 7tracksRegLiveness: true 8body: | 9 bb.0.entry: 10 liveins: $x3 11 %0:g8rc = COPY $x3 12 %1:gprc = COPY %0.sub_32:g8rc 13 %2:gprc = RLWINM %1:gprc, 27, 5, 31 14 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 5, 31 15 %3:gprc = RLWINM %2:gprc, 19, 0, 12 16 ; CHECK: %3:gprc = RLWINM %1, 14, 0, 12 17 BLR8 implicit $lr8, implicit $rm 18... 19--- 20name: testFoldRLWINMSrcFullMask1 21#CHECK: name: testFoldRLWINMSrcFullMask1 22tracksRegLiveness: true 23body: | 24 bb.0.entry: 25 liveins: $x3 26 %0:g8rc = COPY $x3 27 %1:gprc = COPY %0.sub_32:g8rc 28 %2:gprc = RLWINM %1:gprc, 27, 0, 31 29 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 0, 31 30 %3:gprc = RLWINM %2:gprc, 19, 0, 12 31 ; CHECK: %3:gprc = RLWINM %1, 14, 0, 12 32 BLR8 implicit $lr8, implicit $rm 33... 34--- 35name: testFoldRLWINMSrcFullMask2 36#CHECK: name: testFoldRLWINMSrcFullMask2 37tracksRegLiveness: true 38body: | 39 bb.0.entry: 40 liveins: $x3 41 %0:g8rc = COPY $x3 42 %1:gprc = COPY %0.sub_32:g8rc 43 %2:gprc = RLWINM %1:gprc, 27, 10, 9 44 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 10, 9 45 %3:gprc = RLWINM %2:gprc, 19, 10, 1 46 ; CHECK: %3:gprc = RLWINM %1, 14, 10, 1 47 BLR8 implicit $lr8, implicit $rm 48... 49--- 50name: testFoldRLWINMSrcWrapped 51#CHECK: name: testFoldRLWINMSrcWrapped 52tracksRegLiveness: true 53body: | 54 bb.0.entry: 55 liveins: $x3 56 %0:g8rc = COPY $x3 57 %1:gprc = COPY %0.sub_32:g8rc 58 %2:gprc = RLWINM %1:gprc, 27, 30, 10 59 ; CHECK-NOT: %2:gprc = RLWINM %1, 27, 30, 10 60 %3:gprc = RLWINM %2:gprc, 19, 0, 12 61 ; CHECK: %3:gprc = RLWINM %1, 14, 11, 12 62 BLR8 implicit $lr8, implicit $rm 63... 64--- 65name: testFoldRLWINMUserWrapped 66#CHECK: name: testFoldRLWINMUserWrapped 67tracksRegLiveness: true 68body: | 69 bb.0.entry: 70 liveins: $x3 71 %0:g8rc = COPY $x3 72 %1:gprc = COPY %0.sub_32:g8rc 73 %2:gprc = RLWINM %1:gprc, 10, 5, 31 74 ; CHECK: %2:gprc = RLWINM %1, 10, 5, 31 75 %3:gprc = RLWINM %2:gprc, 10, 30, 5 76 ; CHECK: %3:gprc = RLWINM %2, 10, 30, 5 77 BLR8 implicit $lr8, implicit $rm 78... 79--- 80name: testFoldRLWINMResultWrapped 81#CHECK: name: testFoldRLWINMResultWrapped 82tracksRegLiveness: true 83body: | 84 bb.0.entry: 85 liveins: $x3 86 %0:g8rc = COPY $x3 87 %1:gprc = COPY %0.sub_32:g8rc 88 %2:gprc = RLWINM %1:gprc, 10, 20, 10 89 ; CHECK: %2:gprc = RLWINM %1, 10, 20, 10 90 %3:gprc = RLWINM %2:gprc, 10, 0, 31 91 ; CHECK: %3:gprc = RLWINM %2, 10, 0, 31 92 BLR8 implicit $lr8, implicit $rm 93... 94--- 95name: testFoldRLWINMMultipleUses 96#CHECK: name: testFoldRLWINMMultipleUses 97tracksRegLiveness: true 98body: | 99 bb.0.entry: 100 liveins: $x3 101 %0:g8rc = COPY $x3 102 %1:gprc = COPY %0.sub_32:g8rc 103 %2:gprc = RLWINM killed %1:gprc, 27, 5, 31 104 ; CHECK: %2:gprc = RLWINM %1, 27, 5, 31 105 %3:gprc = RLWINM %2:gprc, 19, 0, 12 106 ; CHECK: %3:gprc = RLWINM killed %1, 14, 0, 12 107 STW %3:gprc, %2:gprc, 100 108 ; CHECK: STW %3, %2, 100 109 BLR8 implicit $lr8, implicit $rm 110... 111--- 112name: testFoldRLWINMToZero 113#CHECK: name: testFoldRLWINMToZero 114tracksRegLiveness: true 115body: | 116 bb.0.entry: 117 liveins: $x3 118 %0:g8rc = COPY $x3 119 %1:gprc = COPY %0.sub_32:g8rc 120 %2:gprc = RLWINM %1:gprc, 27, 5, 10 121 ; CHECK-NOT: RLWINM %1, 122 %3:gprc = RLWINM %2:gprc, 8, 5, 10 123 ; CHECK: %3:gprc = LI 0 124 BLR8 implicit $lr8, implicit $rm 125... 126--- 127name: testFoldRLWINM_recToZero 128#CHECK: name: testFoldRLWINM_recToZero 129tracksRegLiveness: true 130body: | 131 bb.0.entry: 132 liveins: $x3 133 %0:g8rc = COPY $x3 134 %1:gprc = COPY %0.sub_32:g8rc 135 %2:gprc = RLWINM %1:gprc, 27, 5, 10 136 ; CHECK-NOT: RLWINM %1, 137 %3:gprc = RLWINM_rec %2:gprc, 8, 5, 10, implicit-def $cr0 138 ; CHECK: %3:gprc = ANDI_rec %1, 0, implicit-def $cr0 139 BLR8 implicit $lr8, implicit $rm 140... 141--- 142name: testFoldRLWINMoToZeroSrcCanNotBeDeleted 143#CHECK: name: testFoldRLWINMoToZeroSrcCanNotBeDeleted 144tracksRegLiveness: true 145body: | 146 bb.0.entry: 147 liveins: $x3 148 %0:g8rc = COPY $x3 149 %1:gprc = COPY %0.sub_32:g8rc 150 %2:gprc = RLWINM_rec %1:gprc, 27, 5, 10, implicit-def $cr0 151 ; CHECK: %2:gprc = RLWINM_rec %1, 27, 5, 10, implicit-def $cr0 152 %3:gprc = RLWINM_rec %2:gprc, 8, 5, 10, implicit-def $cr0 153 ; CHECK: %3:gprc = ANDI_rec %1, 0, implicit-def $cr0 154 BLR8 implicit $lr8, implicit $rm 155... 156--- 157name: testFoldRLWINMInvalidMask 158#CHECK: name: testFoldRLWINMInvalidMask 159tracksRegLiveness: true 160body: | 161 bb.0.entry: 162 liveins: $x3 163 %0:g8rc = COPY $x3 164 %1:gprc = COPY %0.sub_32:g8rc 165 %2:gprc = RLWINM %1:gprc, 20, 5, 31 166 ; CHECK: %2:gprc = RLWINM %1, 20, 5, 31 167 %3:gprc = RLWINM %2:gprc, 19, 10, 20 168 ; CHECK: %3:gprc = RLWINM %2, 19, 10, 20 169 BLR8 implicit $lr8, implicit $rm 170... 171--- 172name: testFoldRLWINMLIWrapMask 173#CHECK: name: testFoldRLWINMLIWrapMask 174tracksRegLiveness: true 175body: | 176 bb.0.entry: 177 liveins: $x3 178 %0:gprc = COPY $x3 179 %1:gprc = LI 100 180 ; CHECK: %2:gprc = LI 200 181 %2:gprc = RLWINM %1:gprc, 1, 3, 2 182 STW %2:gprc, %0:gprc, 100 183 BLR8 implicit $lr8, implicit $rm 184... 185--- 186name: testFoldRLWINMAndANDI 187tracksRegLiveness: true 188body: | 189 bb.0.entry: 190 liveins: $x3 191 ; CHECK-LABEL: name: testFoldRLWINMAndANDI 192 ; CHECK: liveins: $x3 193 ; CHECK: [[COPY:%[0-9]+]]:g8rc = COPY $x3 194 ; CHECK: [[COPY1:%[0-9]+]]:gprc = COPY [[COPY]].sub_32 195 ; CHECK: [[RLWINM:%[0-9]+]]:gprc = RLWINM [[COPY1]], 4, 28, 31 196 ; CHECK: [[ANDI_rec:%[0-9]+]]:gprc = ANDI_rec [[RLWINM]], 4, implicit-def $cr0 197 ; CHECK: BLR8 implicit $lr8, implicit $rm 198 %0:g8rc = COPY $x3 199 %1:gprc = COPY %0.sub_32:g8rc 200 %2:gprc = RLWINM %1:gprc, 4, 28, 31 201 %3:gprc = ANDI_rec %2:gprc, 4, implicit-def $cr0 202 BLR8 implicit $lr8, implicit $rm 203... 204