@@ -7,11 +7,9 @@ target triple = "aarch64-unknown-linux-gnu"
7
7
define i1 @extract_icmp_v4i32_const_splat_rhs (<4 x i32 > %a ) {
8
8
; CHECK-LABEL: extract_icmp_v4i32_const_splat_rhs:
9
9
; CHECK: // %bb.0:
10
- ; CHECK-NEXT: movi v1.4s, #5
11
- ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
12
- ; CHECK-NEXT: xtn v0.4h, v0.4s
13
- ; CHECK-NEXT: umov w8, v0.h[1]
14
- ; CHECK-NEXT: and w0, w8, #0x1
10
+ ; CHECK-NEXT: mov w8, v0.s[1]
11
+ ; CHECK-NEXT: cmp w8, #5
12
+ ; CHECK-NEXT: cset w0, lo
15
13
; CHECK-NEXT: ret
16
14
%icmp = icmp ult <4 x i32 > %a , splat (i32 5 )
17
15
%ext = extractelement <4 x i1 > %icmp , i32 1
@@ -21,11 +19,9 @@ define i1 @extract_icmp_v4i32_const_splat_rhs(<4 x i32> %a) {
21
19
define i1 @extract_icmp_v4i32_const_splat_lhs (<4 x i32 > %a ) {
22
20
; CHECK-LABEL: extract_icmp_v4i32_const_splat_lhs:
23
21
; CHECK: // %bb.0:
24
- ; CHECK-NEXT: movi v1.4s, #7
25
- ; CHECK-NEXT: cmhi v0.4s, v0.4s, v1.4s
26
- ; CHECK-NEXT: xtn v0.4h, v0.4s
27
- ; CHECK-NEXT: umov w8, v0.h[1]
28
- ; CHECK-NEXT: and w0, w8, #0x1
22
+ ; CHECK-NEXT: mov w8, v0.s[1]
23
+ ; CHECK-NEXT: cmp w8, #7
24
+ ; CHECK-NEXT: cset w0, hi
29
25
; CHECK-NEXT: ret
30
26
%icmp = icmp ult <4 x i32 > splat(i32 7 ), %a
31
27
%ext = extractelement <4 x i1 > %icmp , i32 1
@@ -35,12 +31,9 @@ define i1 @extract_icmp_v4i32_const_splat_lhs(<4 x i32> %a) {
35
31
define i1 @extract_icmp_v4i32_const_vec_rhs (<4 x i32 > %a ) {
36
32
; CHECK-LABEL: extract_icmp_v4i32_const_vec_rhs:
37
33
; CHECK: // %bb.0:
38
- ; CHECK-NEXT: adrp x8, .LCPI2_0
39
- ; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI2_0]
40
- ; CHECK-NEXT: cmhi v0.4s, v1.4s, v0.4s
41
- ; CHECK-NEXT: xtn v0.4h, v0.4s
42
- ; CHECK-NEXT: umov w8, v0.h[1]
43
- ; CHECK-NEXT: and w0, w8, #0x1
34
+ ; CHECK-NEXT: mov w8, v0.s[1]
35
+ ; CHECK-NEXT: cmp w8, #234
36
+ ; CHECK-NEXT: cset w0, lo
44
37
; CHECK-NEXT: ret
45
38
%icmp = icmp ult <4 x i32 > %a , <i32 5 , i32 234 , i32 -1 , i32 7 >
46
39
%ext = extractelement <4 x i1 > %icmp , i32 1
@@ -50,12 +43,10 @@ define i1 @extract_icmp_v4i32_const_vec_rhs(<4 x i32> %a) {
50
43
define i1 @extract_fcmp_v4f32_const_splat_rhs (<4 x float > %a ) {
51
44
; CHECK-LABEL: extract_fcmp_v4f32_const_splat_rhs:
52
45
; CHECK: // %bb.0:
53
- ; CHECK-NEXT: fmov v1.4s, #4.00000000
54
- ; CHECK-NEXT: fcmge v0.4s, v0.4s, v1.4s
55
- ; CHECK-NEXT: mvn v0.16b, v0.16b
56
- ; CHECK-NEXT: xtn v0.4h, v0.4s
57
- ; CHECK-NEXT: umov w8, v0.h[1]
58
- ; CHECK-NEXT: and w0, w8, #0x1
46
+ ; CHECK-NEXT: mov s0, v0.s[1]
47
+ ; CHECK-NEXT: fmov s1, #4.00000000
48
+ ; CHECK-NEXT: fcmp s0, s1
49
+ ; CHECK-NEXT: cset w0, lt
59
50
; CHECK-NEXT: ret
60
51
%fcmp = fcmp ult <4 x float > %a , splat(float 4 .0e+0 )
61
52
%ext = extractelement <4 x i1 > %fcmp , i32 1
@@ -66,66 +57,53 @@ define void @vector_loop_with_icmp(ptr nocapture noundef writeonly %dest) {
66
57
; CHECK-LABEL: vector_loop_with_icmp:
67
58
; CHECK: // %bb.0: // %entry
68
59
; CHECK-NEXT: index z0.d, #0, #1
69
- ; CHECK-NEXT: mov w8, #15 // =0xf
70
- ; CHECK-NEXT: mov w9, #4 // =0x4
60
+ ; CHECK-NEXT: mov w8, #4 // =0x4
61
+ ; CHECK-NEXT: mov w9, #16 // =0x10
71
62
; CHECK-NEXT: dup v2.2d, x8
72
- ; CHECK-NEXT: dup v3.2d, x9
73
- ; CHECK-NEXT: add x9, x0, #8
74
- ; CHECK-NEXT: mov w10, #16 // =0x10
75
- ; CHECK-NEXT: mov w11, #1 // =0x1
63
+ ; CHECK-NEXT: add x8, x0, #8
64
+ ; CHECK-NEXT: mov w10, #1 // =0x1
76
65
; CHECK-NEXT: mov z1.d, z0.d
77
66
; CHECK-NEXT: add z1.d, z1.d, #2 // =0x2
78
67
; CHECK-NEXT: b .LBB4_2
79
68
; CHECK-NEXT: .LBB4_1: // %pred.store.continue18
80
69
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
81
- ; CHECK-NEXT: add v1.2d, v1.2d, v3 .2d
82
- ; CHECK-NEXT: add v0.2d, v0.2d, v3 .2d
83
- ; CHECK-NEXT: subs x10, x10 , #4
84
- ; CHECK-NEXT: add x9, x9 , #16
70
+ ; CHECK-NEXT: add v1.2d, v1.2d, v2 .2d
71
+ ; CHECK-NEXT: add v0.2d, v0.2d, v2 .2d
72
+ ; CHECK-NEXT: subs x9, x9 , #4
73
+ ; CHECK-NEXT: add x8, x8 , #16
85
74
; CHECK-NEXT: b.eq .LBB4_10
86
75
; CHECK-NEXT: .LBB4_2: // %vector.body
87
76
; CHECK-NEXT: // =>This Inner Loop Header: Depth=1
88
- ; CHECK-NEXT: cmhi v4.2d, v2.2d, v0.2d
89
- ; CHECK-NEXT: xtn v4.2s, v4.2d
90
- ; CHECK-NEXT: uzp1 v4.4h, v4.4h, v0.4h
91
- ; CHECK-NEXT: umov w12, v4.h[0]
92
- ; CHECK-NEXT: tbz w12, #0, .LBB4_4
77
+ ; CHECK-NEXT: fmov x11, d0
78
+ ; CHECK-NEXT: cmp x11, #14
79
+ ; CHECK-NEXT: b.hi .LBB4_4
93
80
; CHECK-NEXT: // %bb.3: // %pred.store.if
94
81
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
95
- ; CHECK-NEXT: stur w11 , [x9 , #-8]
82
+ ; CHECK-NEXT: stur w10 , [x8 , #-8]
96
83
; CHECK-NEXT: .LBB4_4: // %pred.store.continue
97
84
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
98
- ; CHECK-NEXT: dup v4.2d, x8
99
- ; CHECK-NEXT: cmhi v4.2d, v4.2d, v0.2d
100
- ; CHECK-NEXT: xtn v4.2s, v4.2d
101
- ; CHECK-NEXT: uzp1 v4.4h, v4.4h, v0.4h
102
- ; CHECK-NEXT: umov w12, v4.h[1]
103
- ; CHECK-NEXT: tbz w12, #0, .LBB4_6
85
+ ; CHECK-NEXT: mov x11, v0.d[1]
86
+ ; CHECK-NEXT: cmp x11, #14
87
+ ; CHECK-NEXT: b.hi .LBB4_6
104
88
; CHECK-NEXT: // %bb.5: // %pred.store.if5
105
89
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
106
- ; CHECK-NEXT: stur w11 , [x9 , #-4]
90
+ ; CHECK-NEXT: stur w10 , [x8 , #-4]
107
91
; CHECK-NEXT: .LBB4_6: // %pred.store.continue6
108
92
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
109
- ; CHECK-NEXT: dup v4.2d, x8
110
- ; CHECK-NEXT: cmhi v4.2d, v4.2d, v1.2d
111
- ; CHECK-NEXT: xtn v4.2s, v4.2d
112
- ; CHECK-NEXT: uzp1 v4.4h, v0.4h, v4.4h
113
- ; CHECK-NEXT: umov w12, v4.h[2]
114
- ; CHECK-NEXT: tbz w12, #0, .LBB4_8
93
+ ; CHECK-NEXT: fmov x11, d1
94
+ ; CHECK-NEXT: cmp x11, #14
95
+ ; CHECK-NEXT: b.hi .LBB4_8
115
96
; CHECK-NEXT: // %bb.7: // %pred.store.if7
116
97
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
117
- ; CHECK-NEXT: str w11 , [x9 ]
98
+ ; CHECK-NEXT: str w10 , [x8 ]
118
99
; CHECK-NEXT: .LBB4_8: // %pred.store.continue8
119
100
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
120
- ; CHECK-NEXT: dup v4.2d, x8
121
- ; CHECK-NEXT: cmhi v4.2d, v4.2d, v1.2d
122
- ; CHECK-NEXT: xtn v4.2s, v4.2d
123
- ; CHECK-NEXT: uzp1 v4.4h, v0.4h, v4.4h
124
- ; CHECK-NEXT: umov w12, v4.h[3]
125
- ; CHECK-NEXT: tbz w12, #0, .LBB4_1
101
+ ; CHECK-NEXT: mov x11, v1.d[1]
102
+ ; CHECK-NEXT: cmp x11, #14
103
+ ; CHECK-NEXT: b.hi .LBB4_1
126
104
; CHECK-NEXT: // %bb.9: // %pred.store.if9
127
105
; CHECK-NEXT: // in Loop: Header=BB4_2 Depth=1
128
- ; CHECK-NEXT: str w11 , [x9 , #4]
106
+ ; CHECK-NEXT: str w10 , [x8 , #4]
129
107
; CHECK-NEXT: b .LBB4_1
130
108
; CHECK-NEXT: .LBB4_10: // %for.cond.cleanup
131
109
; CHECK-NEXT: ret
0 commit comments