[X86] Update test/CodeGen/X86/avg.ll with the help of update_llc_test_checks.py....
[oota-llvm.git] / test / CodeGen / X86 / avx512bw-mask-op.ll
1 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s
2
3 define i32 @mask32(i32 %x) {
4   %m0 = bitcast i32 %x to <32 x i1>
5   %m1 = xor <32 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
6                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
7                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
8                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>
9   %ret = bitcast <32 x i1> %m1 to i32
10   ret i32 %ret
11 ; CHECK-LABEL: mask32
12 ; CHECK: kmovd
13 ; CHECK-NEXT: knotd
14 ; CHECK-NEXT: kmovd
15 ; CHECK_NEXT: ret
16 }
17
18 define i64 @mask64(i64 %x) {
19   %m0 = bitcast i64 %x to <64 x i1>
20   %m1 = xor <64 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
21                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
22                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
23                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
24                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
25                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
26                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
27                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>
28   %ret = bitcast <64 x i1> %m1 to i64
29   ret i64 %ret
30 ; CHECK-LABEL: mask64
31 ; CHECK: kmovq
32 ; CHECK-NEXT: knotq
33 ; CHECK-NEXT: kmovq
34 ; CHECK_NEXT: ret
35 }
36
37 define void @mask32_mem(i32* %ptr) {
38   %x = load i32, i32* %ptr, align 4
39   %m0 = bitcast i32 %x to <32 x i1>
40   %m1 = xor <32 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
41                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
42                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
43                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>
44   %ret = bitcast <32 x i1> %m1 to i32
45   store i32 %ret, i32* %ptr, align 4
46   ret void
47 ; CHECK-LABEL: mask32_mem
48 ; CHECK: kmovd ([[ARG1:%rdi|%rcx]]), %k{{[0-7]}}
49 ; CHECK-NEXT: knotd
50 ; CHECK-NEXT: kmovd %k{{[0-7]}}, ([[ARG1]])
51 ; CHECK_NEXT: ret
52 }
53
54 define void @mask64_mem(i64* %ptr) {
55   %x = load i64, i64* %ptr, align 4
56   %m0 = bitcast i64 %x to <64 x i1>
57   %m1 = xor <64 x i1> %m0, <i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
58                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
59                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
60                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
61                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
62                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
63                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1,
64                             i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1, i1 -1>
65   %ret = bitcast <64 x i1> %m1 to i64
66   store i64 %ret, i64* %ptr, align 4
67   ret void
68 ; CHECK-LABEL: mask64_mem
69 ; CHECK: kmovq ([[ARG1]]), %k{{[0-7]}}
70 ; CHECK-NEXT: knotq
71 ; CHECK-NEXT: kmovq %k{{[0-7]}}, ([[ARG1]])
72 ; CHECK_NEXT: ret
73 }
74
75 define i32 @mand32(i32 %x, i32 %y) {
76   %ma = bitcast i32 %x to <32 x i1>
77   %mb = bitcast i32 %y to <32 x i1>
78   %mc = and <32 x i1> %ma, %mb
79   %md = xor <32 x i1> %ma, %mb
80   %me = or <32 x i1> %mc, %md
81   %ret = bitcast <32 x i1> %me to i32
82 ; CHECK: kandd
83 ; CHECK: kxord
84 ; CHECK: kord
85   ret i32 %ret
86 }
87
88 define i64 @mand64(i64 %x, i64 %y) {
89   %ma = bitcast i64 %x to <64 x i1>
90   %mb = bitcast i64 %y to <64 x i1>
91   %mc = and <64 x i1> %ma, %mb
92   %md = xor <64 x i1> %ma, %mb
93   %me = or <64 x i1> %mc, %md
94   %ret = bitcast <64 x i1> %me to i64
95 ; CHECK: kandq
96 ; CHECK: kxorq
97 ; CHECK: korq
98   ret i64 %ret
99 }