2
2
; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx | FileCheck %s --check-prefixes=AVX1
3
3
; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX2
4
4
5
- ; TODO: PR90847 - failure to peek through FREEZE(SETCC()) results in VPMOVSMSKB(TRUNC()) instead of VMOVMSKPS
5
+ ; PR90847 - failure to peek through FREEZE(SETCC()) results in VPMOVSMSKB(TRUNC()) instead of VMOVMSKPS
6
6
7
7
define i32 @PR90847 (<8 x float > %x ) nounwind {
8
8
; AVX1-LABEL: PR90847:
@@ -14,14 +14,10 @@ define i32 @PR90847(<8 x float> %x) nounwind {
14
14
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,0,1]
15
15
; AVX1-NEXT: vminps %ymm2, %ymm1, %ymm1
16
16
; AVX1-NEXT: vcmpeqps %ymm0, %ymm1, %ymm0
17
- ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
18
- ; AVX1-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
19
- ; AVX1-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
20
- ; AVX1-NEXT: vpmovmskb %xmm0, %eax
21
- ; AVX1-NEXT: testb %al, %al
17
+ ; AVX1-NEXT: vmovmskps %ymm0, %eax
18
+ ; AVX1-NEXT: testl %eax, %eax
22
19
; AVX1-NEXT: je .LBB0_1
23
20
; AVX1-NEXT: # %bb.2: # %cond.false
24
- ; AVX1-NEXT: movzbl %al, %eax
25
21
; AVX1-NEXT: rep bsfl %eax, %eax
26
22
; AVX1-NEXT: vzeroupper
27
23
; AVX1-NEXT: retq
@@ -39,14 +35,10 @@ define i32 @PR90847(<8 x float> %x) nounwind {
39
35
; AVX2-NEXT: vpermpd {{.*#+}} ymm2 = ymm1[2,3,0,1]
40
36
; AVX2-NEXT: vminps %ymm2, %ymm1, %ymm1
41
37
; AVX2-NEXT: vcmpeqps %ymm0, %ymm1, %ymm0
42
- ; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm1
43
- ; AVX2-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
44
- ; AVX2-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
45
- ; AVX2-NEXT: vpmovmskb %xmm0, %eax
46
- ; AVX2-NEXT: testb %al, %al
38
+ ; AVX2-NEXT: vmovmskps %ymm0, %eax
39
+ ; AVX2-NEXT: testl %eax, %eax
47
40
; AVX2-NEXT: je .LBB0_1
48
41
; AVX2-NEXT: # %bb.2: # %cond.false
49
- ; AVX2-NEXT: movzbl %al, %eax
50
42
; AVX2-NEXT: rep bsfl %eax, %eax
51
43
; AVX2-NEXT: vzeroupper
52
44
; AVX2-NEXT: retq
0 commit comments