11; RUN: llc -O3 -mtriple=aarch64-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK-LE
22; RUN: llc -O3 -mtriple=aarch64_be-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK-BE
33
4- @haystack4 = internal unnamed_addr constant [4 x i32 ] [i32 0 , i32 1 , i32 2 , i32 3 ], align 4
5- @haystack16 = internal unnamed_addr constant [16 x i8 ] [i8 0 , i8 1 , i8 2 , i8 3 , i8 4 , i8 5 , i8 6 , i8 7 , i8 8 , i8 9 , i8 10 , i8 11 , i8 12 , i8 13 , i8 14 , i8 15 ], align 16
6-
7-
8- define i8 @test4 () {
9- %matches = alloca <4 x i1 >, align 1
10- %index_ptr = alloca i64 , align 8
11- store i64 0 , ptr %index_ptr , align 8
12- %index_val = load i64 , ptr %index_ptr , align 8
13- %haystack = getelementptr inbounds i32 , ptr getelementptr inbounds (i8 , ptr @haystack4 , i64 0 ), i64 %index_val
14- %h_vec = load <4 x i32 >, ptr %haystack , align 4
15- %cmp_vec = icmp eq <4 x i32 > %h_vec , <i32 2 , i32 2 , i32 2 , i32 2 >
16- store volatile <4 x i1 > %cmp_vec , ptr %matches , align 1
17- %cmp_load = load volatile <4 x i1 >, ptr %matches , align 1
18- %extr = extractelement <4 x i1 > %cmp_load , i64 2
19- %ret = zext i1 %extr to i8
20- ret i8 %ret
4+ define i16 @convert_to_bitmask16 (<16 x i8 > %vec ) {
5+ %cmp_result = icmp ne <16 x i8 > %vec , zeroinitializer
6+ %bitmask = bitcast <16 x i1 > %cmp_result to i16
7+ ret i16 %bitmask
218}
229
23- define i8 @test16 () {
24- %matches = alloca <16 x i1 >, align 2
25- %index_ptr = alloca i64 , align 8
26- store i64 0 , ptr %index_ptr , align 8
27- %index_val = load i64 , ptr %index_ptr , align 8
28- %haystack = getelementptr inbounds i8 , ptr getelementptr inbounds (i8 , ptr @haystack16 , i64 0 ), i64 %index_val
29- %h_vec = load <16 x i8 >, ptr %haystack , align 16
30- %cmp_vec = icmp eq <16 x i8 > %h_vec , <i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 , i8 2 >
31- store volatile <16 x i1 > %cmp_vec , ptr %matches , align 2
32- %cmp_load = load volatile <16 x i1 >, ptr %matches , align 2
33- %extr = extractelement <16 x i1 > %cmp_load , i64 7
34- %ret = zext i1 %extr to i8
35- ret i8 %ret
10+ define i16 @convert_to_bitmask8 (<8 x i16 > %vec ) {
11+ %cmp_result = icmp ne <8 x i16 > %vec , zeroinitializer
12+ %bitmask = bitcast <8 x i1 > %cmp_result to i8
13+ %extended_bitmask = zext i8 %bitmask to i16
14+ ret i16 %extended_bitmask
3615}
3716
3817; Little endian
3918
4019; CHECK-LE-LABEL: .LCPI0_0:
41- ; CHECK-LE-NEXT: .word 1
42- ; CHECK-LE-NEXT: .word 2
43- ; CHECK-LE-NEXT: .word 4
44- ; CHECK-LE-NEXT: .word 8
45-
46- ; CHECK-LE-LABEL: .LCPI1_0:
4720; CHECK-LE-NEXT: .byte 1
4821; CHECK-LE-NEXT: .byte 2
4922; CHECK-LE-NEXT: .byte 4
@@ -61,16 +34,19 @@ define i8 @test16() {
6134; CHECK-LE-NEXT: .byte 64
6235; CHECK-LE-NEXT: .byte 128
6336
37+ ; CHECK-LE-LABEL: .LCPI1_0:
38+ ; CHECK-LE-NEXT: .hword 1
39+ ; CHECK-LE-NEXT: .hword 2
40+ ; CHECK-LE-NEXT: .hword 4
41+ ; CHECK-LE-NEXT: .hword 8
42+ ; CHECK-LE-NEXT: .hword 16
43+ ; CHECK-LE-NEXT: .hword 32
44+ ; CHECK-LE-NEXT: .hword 64
45+ ; CHECK-LE-NEXT: .hword 128
6446
6547; Big endian
6648
6749; CHECK-BE-LABEL: .LCPI0_0:
68- ; CHECK-BE-NEXT: .word 8
69- ; CHECK-BE-NEXT: .word 4
70- ; CHECK-BE-NEXT: .word 2
71- ; CHECK-BE-NEXT: .word 1
72-
73- ; CHECK-BE-LABEL: .LCPI1_0:
7450; CHECK-BE-NEXT: .byte 128
7551; CHECK-BE-NEXT: .byte 64
7652; CHECK-BE-NEXT: .byte 32
@@ -87,3 +63,13 @@ define i8 @test16() {
8763; CHECK-BE-NEXT: .byte 4
8864; CHECK-BE-NEXT: .byte 2
8965; CHECK-BE-NEXT: .byte 1
66+
67+ ; CHECK-BE-LABEL: .LCPI1_0:
68+ ; CHECK-BE-NEXT: .hword 128
69+ ; CHECK-BE-NEXT: .hword 64
70+ ; CHECK-BE-NEXT: .hword 32
71+ ; CHECK-BE-NEXT: .hword 16
72+ ; CHECK-BE-NEXT: .hword 8
73+ ; CHECK-BE-NEXT: .hword 4
74+ ; CHECK-BE-NEXT: .hword 2
75+ ; CHECK-BE-NEXT: .hword 1
0 commit comments