Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / PowerPC / fold-rot-and-peephole.mir
blob543b844fa33e607e51cca278d977bf25f16d6035
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple powerpc64le-unknown-linux-gnu -mcpu=pwr8 -x mir \
3 # RUN:     -verify-machineinstrs -run-pass ppc-mi-peepholes < %s | FileCheck %s
5 ---
6 name: fold_RLDICL_ANDI
7 tracksRegLiveness: true
8 body: |
9   bb.0.entry:
10     liveins: $x3
11     ; CHECK-LABEL: name: fold_RLDICL_ANDI
12     ; CHECK: liveins: $x3
13     ; CHECK-NEXT: {{  $}}
14     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
15     ; CHECK-NEXT: dead [[RLDICL:%[0-9]+]]:g8rc = RLDICL [[COPY]], 0, 32
16     ; CHECK-NEXT: [[ANDI8_rec:%[0-9]+]]:g8rc = ANDI8_rec killed [[COPY]], 1, implicit-def dead $cr0
17     ; CHECK-NEXT: $x3 = COPY killed [[ANDI8_rec]]
18     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
19     %1:g8rc = COPY $x3
20     %2:g8rc = RLDICL %1:g8rc, 0, 32
21     %3:g8rc = ANDI8_rec killed %2:g8rc, 1, implicit-def dead $cr0
22     $x3 = COPY %3:g8rc
23     BLR8 implicit $lr8, implicit $rm, implicit $x3
24 ...
25 ---
26 name: fold_RLDICL_ANDI2
27 tracksRegLiveness: true
28 body: |
29   bb.0.entry:
30     liveins: $x3
31     ; CHECK-LABEL: name: fold_RLDICL_ANDI2
32     ; CHECK: liveins: $x3
33     ; CHECK-NEXT: {{  $}}
34     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
35     ; CHECK-NEXT: dead [[RLDICL:%[0-9]+]]:g8rc = RLDICL [[COPY]], 10, 60
36     ; CHECK-NEXT: [[ANDI8_rec:%[0-9]+]]:g8rc = ANDI8_rec killed [[COPY]], 0, implicit-def dead $cr0
37     ; CHECK-NEXT: $x3 = COPY killed [[ANDI8_rec]]
38     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
39     %1:g8rc = COPY $x3
40     %2:g8rc = RLDICL %1:g8rc, 10, 60
41     %3:g8rc = ANDI8_rec killed %2:g8rc, 32, implicit-def dead $cr0
42     $x3 = COPY %3:g8rc
43     BLR8 implicit $lr8, implicit $rm, implicit $x3
44 ...
45 ---
46 name: fold_RLDICR_ANDI
47 tracksRegLiveness: true
48 body: |
49   bb.0.entry:
50     liveins: $x3
51     ; CHECK-LABEL: name: fold_RLDICR_ANDI
52     ; CHECK: liveins: $x3
53     ; CHECK-NEXT: {{  $}}
54     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
55     ; CHECK-NEXT: dead [[RLDICR:%[0-9]+]]:g8rc = RLDICR [[COPY]], 0, 60
56     ; CHECK-NEXT: [[ANDI8_rec:%[0-9]+]]:g8rc = ANDI8_rec killed [[COPY]], 16, implicit-def dead $cr0
57     ; CHECK-NEXT: $x3 = COPY killed [[ANDI8_rec]]
58     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
59     %1:g8rc = COPY $x3
60     %2:g8rc = RLDICR %1:g8rc, 0, 60
61     %3:g8rc = ANDI8_rec killed %2:g8rc, 16, implicit-def dead $cr0
62     $x3 = COPY %3:g8rc
63     BLR8 implicit $lr8, implicit $rm, implicit $x3
64 ...
65 ---
66 name: fold_RLDICR_ANDI2
67 tracksRegLiveness: true
68 body: |
69   bb.0.entry:
70     liveins: $x3
71     ; CHECK-LABEL: name: fold_RLDICR_ANDI2
72     ; CHECK: liveins: $x3
73     ; CHECK-NEXT: {{  $}}
74     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
75     ; CHECK-NEXT: dead [[RLDICR:%[0-9]+]]:g8rc = RLDICR [[COPY]], 10, 60
76     ; CHECK-NEXT: [[ANDI8_rec:%[0-9]+]]:g8rc = ANDI8_rec killed [[COPY]], 0, implicit-def dead $cr0
77     ; CHECK-NEXT: $x3 = COPY killed [[ANDI8_rec]]
78     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
79     %1:g8rc = COPY $x3
80     %2:g8rc = RLDICR %1:g8rc, 10, 60
81     %3:g8rc = ANDI8_rec killed %2:g8rc, 1, implicit-def dead $cr0
82     $x3 = COPY %3:g8rc
83     BLR8 implicit $lr8, implicit $rm, implicit $x3
84 ...
85 ---
86 name: fold_RLDICL_ANDIS
87 tracksRegLiveness: true
88 body: |
89   bb.0.entry:
90     liveins: $x3
91     ; CHECK-LABEL: name: fold_RLDICL_ANDIS
92     ; CHECK: liveins: $x3
93     ; CHECK-NEXT: {{  $}}
94     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
95     ; CHECK-NEXT: dead [[RLDICL:%[0-9]+]]:g8rc = RLDICL [[COPY]], 0, 32
96     ; CHECK-NEXT: [[ANDIS8_rec:%[0-9]+]]:g8rc = ANDIS8_rec killed [[COPY]], 1, implicit-def dead $cr0
97     ; CHECK-NEXT: $x3 = COPY killed [[ANDIS8_rec]]
98     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
99     %1:g8rc = COPY $x3
100     %2:g8rc = RLDICL %1:g8rc, 0, 32
101     %3:g8rc = ANDIS8_rec killed %2:g8rc, 1, implicit-def dead $cr0
102     $x3 = COPY %3:g8rc
103     BLR8 implicit $lr8, implicit $rm, implicit $x3
106 name: fold_RLDICL_ANDIS2
107 tracksRegLiveness: true
108 body: |
109   bb.0.entry:
110     liveins: $x3
111     ; CHECK-LABEL: name: fold_RLDICL_ANDIS2
112     ; CHECK: liveins: $x3
113     ; CHECK-NEXT: {{  $}}
114     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
115     ; CHECK-NEXT: dead [[RLDICL:%[0-9]+]]:g8rc = RLDICL [[COPY]], 10, 60
116     ; CHECK-NEXT: [[ANDIS8_rec:%[0-9]+]]:g8rc = ANDIS8_rec killed [[COPY]], 0, implicit-def dead $cr0
117     ; CHECK-NEXT: $x3 = COPY killed [[ANDIS8_rec]]
118     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
119     %1:g8rc = COPY $x3
120     %2:g8rc = RLDICL %1:g8rc, 10, 60
121     %3:g8rc = ANDIS8_rec killed %2:g8rc, 16, implicit-def dead $cr0
122     $x3 = COPY %3:g8rc
123     BLR8 implicit $lr8, implicit $rm, implicit $x3
126 name: fold_RLDICR_ANDIS
127 tracksRegLiveness: true
128 body: |
129   bb.0.entry:
130     liveins: $x3
131     ; CHECK-LABEL: name: fold_RLDICR_ANDIS
132     ; CHECK: liveins: $x3
133     ; CHECK-NEXT: {{  $}}
134     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
135     ; CHECK-NEXT: dead [[RLDICR:%[0-9]+]]:g8rc = RLDICR [[COPY]], 0, 60
136     ; CHECK-NEXT: [[ANDIS8_rec:%[0-9]+]]:g8rc = ANDIS8_rec killed [[COPY]], 16, implicit-def dead $cr0
137     ; CHECK-NEXT: $x3 = COPY killed [[ANDIS8_rec]]
138     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
139     %1:g8rc = COPY $x3
140     %2:g8rc = RLDICR %1:g8rc, 0, 60
141     %3:g8rc = ANDIS8_rec killed %2:g8rc, 16, implicit-def dead $cr0
142     $x3 = COPY %3:g8rc
143     BLR8 implicit $lr8, implicit $rm, implicit $x3
146 name: fold_RLDICR_ANDIS2
147 tracksRegLiveness: true
148 body: |
149   bb.0.entry:
150     liveins: $x3
151     ; CHECK-LABEL: name: fold_RLDICR_ANDIS2
152     ; CHECK: liveins: $x3
153     ; CHECK-NEXT: {{  $}}
154     ; CHECK-NEXT: [[COPY:%[0-9]+]]:g8rc = COPY killed $x3
155     ; CHECK-NEXT: dead [[RLDICR:%[0-9]+]]:g8rc = RLDICR [[COPY]], 10, 32
156     ; CHECK-NEXT: [[ANDIS8_rec:%[0-9]+]]:g8rc = ANDIS8_rec killed [[COPY]], 0, implicit-def dead $cr0
157     ; CHECK-NEXT: $x3 = COPY killed [[ANDIS8_rec]]
158     ; CHECK-NEXT: BLR8 implicit $lr8, implicit $rm, implicit killed $x3
159     %1:g8rc = COPY $x3
160     %2:g8rc = RLDICR %1:g8rc, 10, 32
161     %3:g8rc = ANDIS8_rec killed %2:g8rc, 1, implicit-def dead $cr0
162     $x3 = COPY %3:g8rc
163     BLR8 implicit $lr8, implicit $rm, implicit $x3