11; 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
23; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 | FileCheck %s
34; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 -mattr=+neon | FileCheck %s
45; RUN: llc < %s -mtriple thumbv6m-none-eabi | FileCheck %s --check-prefix=CHECK-6M
@@ -14,6 +15,15 @@ declare i64 @llvm.cttz.i64(i64, i1)
1415;------------------------------------------------------------------------------
1516
1617define 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+ ;
1727; CHECK-LABEL: test_i8:
1828; CHECK: @ %bb.0:
1929; CHECK-NEXT: orr r0, r0, #256
@@ -81,6 +91,15 @@ define i8 @test_i8(i8 %a) {
8191}
8292
8393define 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+ ;
84103; CHECK-LABEL: test_i16:
85104; CHECK: @ %bb.0:
86105; CHECK-NEXT: orr r0, r0, #65536
@@ -148,6 +167,14 @@ define i16 @test_i16(i16 %a) {
148167}
149168
150169define 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+ ;
151178; CHECK-LABEL: test_i32:
152179; CHECK: @ %bb.0:
153180; CHECK-NEXT: rbit r0, r0
@@ -207,6 +234,21 @@ define i32 @test_i32(i32 %a) {
207234}
208235
209236define 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+ ;
210252; CHECK-LABEL: test_i64:
211253; CHECK: @ %bb.0:
212254; CHECK-NEXT: rbit r1, r1
@@ -323,6 +365,14 @@ define i64 @test_i64(i64 %a) {
323365;------------------------------------------------------------------------------
324366
325367define 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+ ;
326376; CHECK-LABEL: test_i8_zero_undef:
327377; CHECK: @ %bb.0:
328378; CHECK-NEXT: rbit r0, r0
@@ -377,6 +427,14 @@ define i8 @test_i8_zero_undef(i8 %a) {
377427}
378428
379429define 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+ ;
380438; CHECK-LABEL: test_i16_zero_undef:
381439; CHECK: @ %bb.0:
382440; CHECK-NEXT: rbit r0, r0
@@ -432,6 +490,14 @@ define i16 @test_i16_zero_undef(i16 %a) {
432490
433491
434492define 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+ ;
435501; CHECK-LABEL: test_i32_zero_undef:
436502; CHECK: @ %bb.0:
437503; CHECK-NEXT: rbit r0, r0
@@ -486,6 +552,21 @@ define i32 @test_i32_zero_undef(i32 %a) {
486552}
487553
488554define 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+ ;
489570; CHECK-LABEL: test_i64_zero_undef:
490571; CHECK: @ %bb.0:
491572; CHECK-NEXT: rbit r1, r1
0 commit comments