blob: b2c619c48d4d3ebf7f4f2b6713f285662bd0133f [file] [log] [blame]
Zvi Rackoverc20c6d02017-05-18 07:04:48 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Zvi Rackoverd17d13d2017-05-18 09:32:56 +00002; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx2 < %s | FileCheck %s --check-prefix=AVX2
3; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=x86-64 -mattr=+avx512f,+avx512vl,+avx512bw < %s | FileCheck %s --check-prefix=AVX512
Zvi Rackoverc20c6d02017-05-18 07:04:48 +00004
5define i16 @v16i16(<16 x i16> %a, <16 x i16> %b) {
6; AVX2-LABEL: v16i16:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +00007; AVX2: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +00008; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0
9; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
10; AVX2-NEXT: vpacksswb %xmm1, %xmm0, %xmm0
Zvi Rackover76937332017-06-01 11:27:57 +000011; AVX2-NEXT: vpmovmskb %xmm0, %eax
12; AVX2-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000013; AVX2-NEXT: vzeroupper
14; AVX2-NEXT: retq
15;
16; AVX512-LABEL: v16i16:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000017; AVX512: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000018; AVX512-NEXT: vpcmpgtw %ymm1, %ymm0, %k0
19; AVX512-NEXT: kmovd %k0, %eax
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000020; AVX512-NEXT: ## kill: %AX<def> %AX<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000021; AVX512-NEXT: vzeroupper
22; AVX512-NEXT: retq
23 %x = icmp sgt <16 x i16> %a, %b
24 %res = bitcast <16 x i1> %x to i16
25 ret i16 %res
26}
27
28define i8 @v8i32(<8 x i32> %a, <8 x i32> %b) {
29; AVX2-LABEL: v8i32:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000030; AVX2: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000031; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +000032; AVX2-NEXT: vmovmskps %ymm0, %eax
33; AVX2-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000034; AVX2-NEXT: vzeroupper
35; AVX2-NEXT: retq
36;
37; AVX512-LABEL: v8i32:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000038; AVX512: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000039; AVX512-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
40; AVX512-NEXT: kmovd %k0, %eax
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000041; AVX512-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000042; AVX512-NEXT: vzeroupper
43; AVX512-NEXT: retq
44 %x = icmp sgt <8 x i32> %a, %b
45 %res = bitcast <8 x i1> %x to i8
46 ret i8 %res
47}
48
49define i8 @v8f32(<8 x float> %a, <8 x float> %b) {
50; AVX2-LABEL: v8f32:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000051; AVX2: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000052; AVX2-NEXT: vcmpltps %ymm0, %ymm1, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +000053; AVX2-NEXT: vmovmskps %ymm0, %eax
54; AVX2-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000055; AVX2-NEXT: vzeroupper
56; AVX2-NEXT: retq
57;
58; AVX512-LABEL: v8f32:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000059; AVX512: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000060; AVX512-NEXT: vcmpltps %ymm0, %ymm1, %k0
61; AVX512-NEXT: kmovd %k0, %eax
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000062; AVX512-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000063; AVX512-NEXT: vzeroupper
64; AVX512-NEXT: retq
65 %x = fcmp ogt <8 x float> %a, %b
66 %res = bitcast <8 x i1> %x to i8
67 ret i8 %res
68}
69
70define i32 @v32i8(<32 x i8> %a, <32 x i8> %b) {
71; AVX2-LABEL: v32i8:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000072; AVX2: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000073; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +000074; AVX2-NEXT: vpmovmskb %ymm0, %eax
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000075; AVX2-NEXT: vzeroupper
76; AVX2-NEXT: retq
77;
78; AVX512-LABEL: v32i8:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000079; AVX512: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000080; AVX512-NEXT: vpcmpgtb %ymm1, %ymm0, %k0
81; AVX512-NEXT: kmovd %k0, %eax
82; AVX512-NEXT: vzeroupper
83; AVX512-NEXT: retq
84 %x = icmp sgt <32 x i8> %a, %b
85 %res = bitcast <32 x i1> %x to i32
86 ret i32 %res
87}
88
89define i4 @v4i64(<4 x i64> %a, <4 x i64> %b) {
90; AVX2-LABEL: v4i64:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000091; AVX2: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000092; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +000093; AVX2-NEXT: vmovmskpd %ymm0, %eax
94; AVX2-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +000095; AVX2-NEXT: vzeroupper
96; AVX2-NEXT: retq
97;
98; AVX512-LABEL: v4i64:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +000099; AVX512: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000100; AVX512-NEXT: vpcmpgtq %ymm1, %ymm0, %k0
101; AVX512-NEXT: kmovd %k0, %eax
102; AVX512-NEXT: movb %al, -{{[0-9]+}}(%rsp)
103; AVX512-NEXT: movb -{{[0-9]+}}(%rsp), %al
104; AVX512-NEXT: vzeroupper
105; AVX512-NEXT: retq
106 %x = icmp sgt <4 x i64> %a, %b
107 %res = bitcast <4 x i1> %x to i4
108 ret i4 %res
109}
110
111define i4 @v4f64(<4 x double> %a, <4 x double> %b) {
112; AVX2-LABEL: v4f64:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +0000113; AVX2: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000114; AVX2-NEXT: vcmpltpd %ymm0, %ymm1, %ymm0
Zvi Rackover76937332017-06-01 11:27:57 +0000115; AVX2-NEXT: vmovmskpd %ymm0, %eax
116; AVX2-NEXT: ## kill: %AL<def> %AL<kill> %EAX<kill>
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000117; AVX2-NEXT: vzeroupper
118; AVX2-NEXT: retq
119;
120; AVX512-LABEL: v4f64:
Zvi Rackoverd17d13d2017-05-18 09:32:56 +0000121; AVX512: ## BB#0:
Zvi Rackoverc20c6d02017-05-18 07:04:48 +0000122; AVX512-NEXT: vcmpltpd %ymm0, %ymm1, %k0
123; AVX512-NEXT: kmovd %k0, %eax
124; AVX512-NEXT: movb %al, -{{[0-9]+}}(%rsp)
125; AVX512-NEXT: movb -{{[0-9]+}}(%rsp), %al
126; AVX512-NEXT: vzeroupper
127; AVX512-NEXT: retq
128 %x = fcmp ogt <4 x double> %a, %b
129 %res = bitcast <4 x i1> %x to i4
130 ret i4 %res
131}