1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
+ ; RUN: llc < %s -mtriple arm-eabi -mattr=+v5t | FileCheck %s --check-prefix=CHECK-5
2
3
; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 | FileCheck %s
3
4
; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 -mattr=+neon | FileCheck %s
4
5
; RUN: llc < %s -mtriple thumbv6m-none-eabi | FileCheck %s --check-prefix=CHECK-6M
@@ -14,6 +15,15 @@ declare i64 @llvm.cttz.i64(i64, i1)
14
15
;------------------------------------------------------------------------------
15
16
16
17
define i8 @test_i8 (i8 %a ) {
18
+ ; CHECK-5-LABEL: test_i8:
19
+ ; CHECK-5: @ %bb.0:
20
+ ; CHECK-5-NEXT: orr r0, r0, #256
21
+ ; CHECK-5-NEXT: sub r1, r0, #1
22
+ ; CHECK-5-NEXT: bic r0, r1, r0
23
+ ; CHECK-5-NEXT: clz r0, r0
24
+ ; CHECK-5-NEXT: rsb r0, r0, #32
25
+ ; CHECK-5-NEXT: bx lr
26
+ ;
17
27
; CHECK-LABEL: test_i8:
18
28
; CHECK: @ %bb.0:
19
29
; CHECK-NEXT: orr r0, r0, #256
@@ -81,6 +91,15 @@ define i8 @test_i8(i8 %a) {
81
91
}
82
92
83
93
define i16 @test_i16 (i16 %a ) {
94
+ ; CHECK-5-LABEL: test_i16:
95
+ ; CHECK-5: @ %bb.0:
96
+ ; CHECK-5-NEXT: orr r0, r0, #65536
97
+ ; CHECK-5-NEXT: sub r1, r0, #1
98
+ ; CHECK-5-NEXT: bic r0, r1, r0
99
+ ; CHECK-5-NEXT: clz r0, r0
100
+ ; CHECK-5-NEXT: rsb r0, r0, #32
101
+ ; CHECK-5-NEXT: bx lr
102
+ ;
84
103
; CHECK-LABEL: test_i16:
85
104
; CHECK: @ %bb.0:
86
105
; CHECK-NEXT: orr r0, r0, #65536
@@ -148,6 +167,14 @@ define i16 @test_i16(i16 %a) {
148
167
}
149
168
150
169
define i32 @test_i32 (i32 %a ) {
170
+ ; CHECK-5-LABEL: test_i32:
171
+ ; CHECK-5: @ %bb.0:
172
+ ; CHECK-5-NEXT: sub r1, r0, #1
173
+ ; CHECK-5-NEXT: bic r0, r1, r0
174
+ ; CHECK-5-NEXT: clz r0, r0
175
+ ; CHECK-5-NEXT: rsb r0, r0, #32
176
+ ; CHECK-5-NEXT: bx lr
177
+ ;
151
178
; CHECK-LABEL: test_i32:
152
179
; CHECK: @ %bb.0:
153
180
; CHECK-NEXT: rbit r0, r0
@@ -207,6 +234,21 @@ define i32 @test_i32(i32 %a) {
207
234
}
208
235
209
236
define i64 @test_i64 (i64 %a ) {
237
+ ; CHECK-5-LABEL: test_i64:
238
+ ; CHECK-5: @ %bb.0:
239
+ ; CHECK-5-NEXT: sub r3, r1, #1
240
+ ; CHECK-5-NEXT: sub r2, r0, #1
241
+ ; CHECK-5-NEXT: bic r1, r3, r1
242
+ ; CHECK-5-NEXT: bic r2, r2, r0
243
+ ; CHECK-5-NEXT: clz r1, r1
244
+ ; CHECK-5-NEXT: clz r2, r2
245
+ ; CHECK-5-NEXT: rsb r1, r1, #64
246
+ ; CHECK-5-NEXT: cmp r0, #0
247
+ ; CHECK-5-NEXT: rsbne r1, r2, #32
248
+ ; CHECK-5-NEXT: mov r0, r1
249
+ ; CHECK-5-NEXT: mov r1, #0
250
+ ; CHECK-5-NEXT: bx lr
251
+ ;
210
252
; CHECK-LABEL: test_i64:
211
253
; CHECK: @ %bb.0:
212
254
; CHECK-NEXT: rbit r1, r1
@@ -323,6 +365,14 @@ define i64 @test_i64(i64 %a) {
323
365
;------------------------------------------------------------------------------
324
366
325
367
define i8 @test_i8_zero_undef (i8 %a ) {
368
+ ; CHECK-5-LABEL: test_i8_zero_undef:
369
+ ; CHECK-5: @ %bb.0:
370
+ ; CHECK-5-NEXT: sub r1, r0, #1
371
+ ; CHECK-5-NEXT: bic r0, r1, r0
372
+ ; CHECK-5-NEXT: clz r0, r0
373
+ ; CHECK-5-NEXT: rsb r0, r0, #32
374
+ ; CHECK-5-NEXT: bx lr
375
+ ;
326
376
; CHECK-LABEL: test_i8_zero_undef:
327
377
; CHECK: @ %bb.0:
328
378
; CHECK-NEXT: rbit r0, r0
@@ -377,6 +427,14 @@ define i8 @test_i8_zero_undef(i8 %a) {
377
427
}
378
428
379
429
define i16 @test_i16_zero_undef (i16 %a ) {
430
+ ; CHECK-5-LABEL: test_i16_zero_undef:
431
+ ; CHECK-5: @ %bb.0:
432
+ ; CHECK-5-NEXT: sub r1, r0, #1
433
+ ; CHECK-5-NEXT: bic r0, r1, r0
434
+ ; CHECK-5-NEXT: clz r0, r0
435
+ ; CHECK-5-NEXT: rsb r0, r0, #32
436
+ ; CHECK-5-NEXT: bx lr
437
+ ;
380
438
; CHECK-LABEL: test_i16_zero_undef:
381
439
; CHECK: @ %bb.0:
382
440
; CHECK-NEXT: rbit r0, r0
@@ -432,6 +490,14 @@ define i16 @test_i16_zero_undef(i16 %a) {
432
490
433
491
434
492
define i32 @test_i32_zero_undef (i32 %a ) {
493
+ ; CHECK-5-LABEL: test_i32_zero_undef:
494
+ ; CHECK-5: @ %bb.0:
495
+ ; CHECK-5-NEXT: sub r1, r0, #1
496
+ ; CHECK-5-NEXT: bic r0, r1, r0
497
+ ; CHECK-5-NEXT: clz r0, r0
498
+ ; CHECK-5-NEXT: rsb r0, r0, #32
499
+ ; CHECK-5-NEXT: bx lr
500
+ ;
435
501
; CHECK-LABEL: test_i32_zero_undef:
436
502
; CHECK: @ %bb.0:
437
503
; CHECK-NEXT: rbit r0, r0
@@ -486,6 +552,21 @@ define i32 @test_i32_zero_undef(i32 %a) {
486
552
}
487
553
488
554
define i64 @test_i64_zero_undef (i64 %a ) {
555
+ ; CHECK-5-LABEL: test_i64_zero_undef:
556
+ ; CHECK-5: @ %bb.0:
557
+ ; CHECK-5-NEXT: sub r3, r1, #1
558
+ ; CHECK-5-NEXT: sub r2, r0, #1
559
+ ; CHECK-5-NEXT: bic r1, r3, r1
560
+ ; CHECK-5-NEXT: bic r2, r2, r0
561
+ ; CHECK-5-NEXT: clz r1, r1
562
+ ; CHECK-5-NEXT: clz r2, r2
563
+ ; CHECK-5-NEXT: rsb r1, r1, #64
564
+ ; CHECK-5-NEXT: cmp r0, #0
565
+ ; CHECK-5-NEXT: rsbne r1, r2, #32
566
+ ; CHECK-5-NEXT: mov r0, r1
567
+ ; CHECK-5-NEXT: mov r1, #0
568
+ ; CHECK-5-NEXT: bx lr
569
+ ;
489
570
; CHECK-LABEL: test_i64_zero_undef:
490
571
; CHECK: @ %bb.0:
491
572
; CHECK-NEXT: rbit r1, r1
0 commit comments