summaryrefslogtreecommitdiff
path: root/llvm/test/CodeGen/AArch64/vector-to-scalar-bitmask.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/AArch64/vector-to-scalar-bitmask.ll')
-rw-r--r--llvm/test/CodeGen/AArch64/vector-to-scalar-bitmask.ll75
1 files changed, 75 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/vector-to-scalar-bitmask.ll b/llvm/test/CodeGen/AArch64/vector-to-scalar-bitmask.ll
new file mode 100644
index 000000000000..01c83ca220b6
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/vector-to-scalar-bitmask.ll
@@ -0,0 +1,75 @@
+; RUN: llc -O3 -mtriple=aarch64-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK-LE
+; RUN: llc -O3 -mtriple=aarch64_be-linux-gnu %s -o - | FileCheck %s --check-prefix=CHECK-BE
+
+define i16 @convert_to_bitmask16(<16 x i8> %vec) {
+ %cmp_result = icmp ne <16 x i8> %vec, zeroinitializer
+ %bitmask = bitcast <16 x i1> %cmp_result to i16
+ ret i16 %bitmask
+}
+
+define i16 @convert_to_bitmask8(<8 x i16> %vec) {
+ %cmp_result = icmp ne <8 x i16> %vec, zeroinitializer
+ %bitmask = bitcast <8 x i1> %cmp_result to i8
+ %extended_bitmask = zext i8 %bitmask to i16
+ ret i16 %extended_bitmask
+}
+
+; Little endian
+
+; CHECK-LE-LABEL: .LCPI0_0:
+; CHECK-LE-NEXT: .byte 1
+; CHECK-LE-NEXT: .byte 2
+; CHECK-LE-NEXT: .byte 4
+; CHECK-LE-NEXT: .byte 8
+; CHECK-LE-NEXT: .byte 16
+; CHECK-LE-NEXT: .byte 32
+; CHECK-LE-NEXT: .byte 64
+; CHECK-LE-NEXT: .byte 128
+; CHECK-LE-NEXT: .byte 1
+; CHECK-LE-NEXT: .byte 2
+; CHECK-LE-NEXT: .byte 4
+; CHECK-LE-NEXT: .byte 8
+; CHECK-LE-NEXT: .byte 16
+; CHECK-LE-NEXT: .byte 32
+; CHECK-LE-NEXT: .byte 64
+; CHECK-LE-NEXT: .byte 128
+
+; CHECK-LE-LABEL: .LCPI1_0:
+; CHECK-LE-NEXT: .hword 1
+; CHECK-LE-NEXT: .hword 2
+; CHECK-LE-NEXT: .hword 4
+; CHECK-LE-NEXT: .hword 8
+; CHECK-LE-NEXT: .hword 16
+; CHECK-LE-NEXT: .hword 32
+; CHECK-LE-NEXT: .hword 64
+; CHECK-LE-NEXT: .hword 128
+
+; Big endian
+
+; CHECK-BE-LABEL: .LCPI0_0:
+; CHECK-BE-NEXT: .byte 128
+; CHECK-BE-NEXT: .byte 64
+; CHECK-BE-NEXT: .byte 32
+; CHECK-BE-NEXT: .byte 16
+; CHECK-BE-NEXT: .byte 8
+; CHECK-BE-NEXT: .byte 4
+; CHECK-BE-NEXT: .byte 2
+; CHECK-BE-NEXT: .byte 1
+; CHECK-BE-NEXT: .byte 128
+; CHECK-BE-NEXT: .byte 64
+; CHECK-BE-NEXT: .byte 32
+; CHECK-BE-NEXT: .byte 16
+; CHECK-BE-NEXT: .byte 8
+; CHECK-BE-NEXT: .byte 4
+; CHECK-BE-NEXT: .byte 2
+; CHECK-BE-NEXT: .byte 1
+
+; CHECK-BE-LABEL: .LCPI1_0:
+; CHECK-BE-NEXT: .hword 128
+; CHECK-BE-NEXT: .hword 64
+; CHECK-BE-NEXT: .hword 32
+; CHECK-BE-NEXT: .hword 16
+; CHECK-BE-NEXT: .hword 8
+; CHECK-BE-NEXT: .hword 4
+; CHECK-BE-NEXT: .hword 2
+; CHECK-BE-NEXT: .hword 1