OLD | NEW |
1 ; Tests the branch optimizations under O2 (against a lack of | 1 ; Tests the branch optimizations under O2 (against a lack of |
2 ; optimizations under Om1). | 2 ; optimizations under Om1). |
3 | 3 |
4 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 4 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
5 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 5 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
6 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=O2 %s | 6 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=O2 %s |
7 | 7 |
8 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 8 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
9 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 9 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
10 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OM1 %s | 10 ; RUN: | %if --need=target_X8632 --command FileCheck --check-prefix=OM1 %s |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 ; OM1: jmp | 89 ; OM1: jmp |
90 ; OM1: call | 90 ; OM1: call |
91 ; OM1: ret | 91 ; OM1: ret |
92 ; OM1: call | 92 ; OM1: call |
93 ; OM1: ret | 93 ; OM1: ret |
94 | 94 |
95 ; Note that compare and branch folding isn't implemented yet (unlike x86-32). | 95 ; Note that compare and branch folding isn't implemented yet (unlike x86-32). |
96 ; ARM32O2-LABEL: testCondFallthroughToNextBlock | 96 ; ARM32O2-LABEL: testCondFallthroughToNextBlock |
97 ; ARM32O2: cmp {{.*}}, #123 | 97 ; ARM32O2: cmp {{.*}}, #123 |
98 ; ARM32O2-NEXT: movge {{.*}}, #1 | 98 ; ARM32O2-NEXT: movge {{.*}}, #1 |
| 99 ; ARM32O2-NEXT: uxtb |
99 ; ARM32O2-NEXT: cmp {{.*}}, #0 | 100 ; ARM32O2-NEXT: cmp {{.*}}, #0 |
100 ; ARM32O2-NEXT: bne | 101 ; ARM32O2-NEXT: bne |
101 ; ARM32O2-NEXT: bl | 102 ; ARM32O2-NEXT: bl |
102 ; ARM32O2: bx lr | 103 ; ARM32O2: bx lr |
103 ; ARM32O2: bl | 104 ; ARM32O2: bl |
104 ; ARM32O2: bx lr | 105 ; ARM32O2: bx lr |
105 | 106 |
106 ; ARM32OM1-LABEL: testCondFallthroughToNextBlock | 107 ; ARM32OM1-LABEL: testCondFallthroughToNextBlock |
107 ; ARM32OM1: cmp {{.*}}, #123 | 108 ; ARM32OM1: cmp {{.*}}, #123 |
108 ; ARM32OM1-NEXT: movge {{.*}}, #1 | 109 ; ARM32OM1-NEXT: movge {{.*}}, #1 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 ; OM1: call | 148 ; OM1: call |
148 ; OM1: ret | 149 ; OM1: ret |
149 ; OM1: call | 150 ; OM1: call |
150 ; OM1: ret | 151 ; OM1: ret |
151 | 152 |
152 ; Note that compare and branch folding isn't implemented yet | 153 ; Note that compare and branch folding isn't implemented yet |
153 ; (compared to x86-32). | 154 ; (compared to x86-32). |
154 ; ARM32O2-LABEL: testCondTargetNextBlock | 155 ; ARM32O2-LABEL: testCondTargetNextBlock |
155 ; ARM32O2: cmp {{.*}}, #123 | 156 ; ARM32O2: cmp {{.*}}, #123 |
156 ; ARM32O2-NEXT: movge {{.*}}, #1 | 157 ; ARM32O2-NEXT: movge {{.*}}, #1 |
| 158 ; ARM32O2-NEXT: uxtb |
157 ; ARM32O2-NEXT: cmp {{.*}}, #0 | 159 ; ARM32O2-NEXT: cmp {{.*}}, #0 |
158 ; ARM32O2-NEXT: beq | 160 ; ARM32O2-NEXT: beq |
159 ; ARM32O2-NEXT: bl | 161 ; ARM32O2-NEXT: bl |
160 ; ARM32O2: bx lr | 162 ; ARM32O2: bx lr |
161 ; ARM32O2: bl | 163 ; ARM32O2: bl |
162 ; ARM32O2: bx lr | 164 ; ARM32O2: bx lr |
163 | 165 |
164 ; ARM32OM1-LABEL: testCondTargetNextBlock | 166 ; ARM32OM1-LABEL: testCondTargetNextBlock |
165 ; ARM32OM1: cmp {{.*}}, #123 | 167 ; ARM32OM1: cmp {{.*}}, #123 |
166 ; ARM32OM1: movge {{.*}}, #1 | 168 ; ARM32OM1: movge {{.*}}, #1 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 ; OM1: call | 200 ; OM1: call |
199 | 201 |
200 ; ARM32O2-LABEL: testUncondToBlockAfterContract | 202 ; ARM32O2-LABEL: testUncondToBlockAfterContract |
201 ; ARM32O2: bl {{.*}} dummy | 203 ; ARM32O2: bl {{.*}} dummy |
202 ; ARM32O2-NEXT: bl {{.*}} dummy | 204 ; ARM32O2-NEXT: bl {{.*}} dummy |
203 | 205 |
204 ; ARM32OM1-LABEL: testUncondToBlockAfterContract | 206 ; ARM32OM1-LABEL: testUncondToBlockAfterContract |
205 ; ARM32OM1: bl {{.*}} dummy | 207 ; ARM32OM1: bl {{.*}} dummy |
206 ; ARM32OM1-NEXT: b | 208 ; ARM32OM1-NEXT: b |
207 ; ARM32OM1-NEXT: bl {{.*}} dummy | 209 ; ARM32OM1-NEXT: bl {{.*}} dummy |
OLD | NEW |