@@ -73,77 +73,133 @@ define <2 x i64> @cmeq2xi64(<2 x i64> %A, <2 x i64> %B) {
73
73
}
74
74
75
75
define <8 x i8 > @cmne8xi8 (<8 x i8 > %A , <8 x i8 > %B ) {
76
- ; CHECK-LABEL: cmne8xi8:
77
- ; CHECK: // %bb.0:
78
- ; CHECK-NEXT: cmeq v0.8b, v0.8b, v1.8b
79
- ; CHECK-NEXT: mvn v0.8b, v0.8b
80
- ; CHECK-NEXT: ret
76
+ ; CHECK-SD-LABEL: cmne8xi8:
77
+ ; CHECK-SD: // %bb.0:
78
+ ; CHECK-SD-NEXT: cmeq v0.8b, v0.8b, v1.8b
79
+ ; CHECK-SD-NEXT: mvn v0.8b, v0.8b
80
+ ; CHECK-SD-NEXT: ret
81
+ ;
82
+ ; CHECK-GI-LABEL: cmne8xi8:
83
+ ; CHECK-GI: // %bb.0:
84
+ ; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v1.8b
85
+ ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
86
+ ; CHECK-GI-NEXT: shl v0.8b, v0.8b, #7
87
+ ; CHECK-GI-NEXT: sshr v0.8b, v0.8b, #7
88
+ ; CHECK-GI-NEXT: ret
81
89
%tmp3 = icmp ne <8 x i8 > %A , %B
82
90
%tmp4 = sext <8 x i1 > %tmp3 to <8 x i8 >
83
91
ret <8 x i8 > %tmp4
84
92
}
85
93
86
94
define <16 x i8 > @cmne16xi8 (<16 x i8 > %A , <16 x i8 > %B ) {
87
- ; CHECK-LABEL: cmne16xi8:
88
- ; CHECK: // %bb.0:
89
- ; CHECK-NEXT: cmeq v0.16b, v0.16b, v1.16b
90
- ; CHECK-NEXT: mvn v0.16b, v0.16b
91
- ; CHECK-NEXT: ret
95
+ ; CHECK-SD-LABEL: cmne16xi8:
96
+ ; CHECK-SD: // %bb.0:
97
+ ; CHECK-SD-NEXT: cmeq v0.16b, v0.16b, v1.16b
98
+ ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
99
+ ; CHECK-SD-NEXT: ret
100
+ ;
101
+ ; CHECK-GI-LABEL: cmne16xi8:
102
+ ; CHECK-GI: // %bb.0:
103
+ ; CHECK-GI-NEXT: cmeq v0.16b, v0.16b, v1.16b
104
+ ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
105
+ ; CHECK-GI-NEXT: shl v0.16b, v0.16b, #7
106
+ ; CHECK-GI-NEXT: sshr v0.16b, v0.16b, #7
107
+ ; CHECK-GI-NEXT: ret
92
108
%tmp3 = icmp ne <16 x i8 > %A , %B
93
109
%tmp4 = sext <16 x i1 > %tmp3 to <16 x i8 >
94
110
ret <16 x i8 > %tmp4
95
111
}
96
112
97
113
define <4 x i16 > @cmne4xi16 (<4 x i16 > %A , <4 x i16 > %B ) {
98
- ; CHECK-LABEL: cmne4xi16:
99
- ; CHECK: // %bb.0:
100
- ; CHECK-NEXT: cmeq v0.4h, v0.4h, v1.4h
101
- ; CHECK-NEXT: mvn v0.8b, v0.8b
102
- ; CHECK-NEXT: ret
114
+ ; CHECK-SD-LABEL: cmne4xi16:
115
+ ; CHECK-SD: // %bb.0:
116
+ ; CHECK-SD-NEXT: cmeq v0.4h, v0.4h, v1.4h
117
+ ; CHECK-SD-NEXT: mvn v0.8b, v0.8b
118
+ ; CHECK-SD-NEXT: ret
119
+ ;
120
+ ; CHECK-GI-LABEL: cmne4xi16:
121
+ ; CHECK-GI: // %bb.0:
122
+ ; CHECK-GI-NEXT: cmeq v0.4h, v0.4h, v1.4h
123
+ ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
124
+ ; CHECK-GI-NEXT: shl v0.4h, v0.4h, #15
125
+ ; CHECK-GI-NEXT: sshr v0.4h, v0.4h, #15
126
+ ; CHECK-GI-NEXT: ret
103
127
%tmp3 = icmp ne <4 x i16 > %A , %B
104
128
%tmp4 = sext <4 x i1 > %tmp3 to <4 x i16 >
105
129
ret <4 x i16 > %tmp4
106
130
}
107
131
108
132
define <8 x i16 > @cmne8xi16 (<8 x i16 > %A , <8 x i16 > %B ) {
109
- ; CHECK-LABEL: cmne8xi16:
110
- ; CHECK: // %bb.0:
111
- ; CHECK-NEXT: cmeq v0.8h, v0.8h, v1.8h
112
- ; CHECK-NEXT: mvn v0.16b, v0.16b
113
- ; CHECK-NEXT: ret
133
+ ; CHECK-SD-LABEL: cmne8xi16:
134
+ ; CHECK-SD: // %bb.0:
135
+ ; CHECK-SD-NEXT: cmeq v0.8h, v0.8h, v1.8h
136
+ ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
137
+ ; CHECK-SD-NEXT: ret
138
+ ;
139
+ ; CHECK-GI-LABEL: cmne8xi16:
140
+ ; CHECK-GI: // %bb.0:
141
+ ; CHECK-GI-NEXT: cmeq v0.8h, v0.8h, v1.8h
142
+ ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
143
+ ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #15
144
+ ; CHECK-GI-NEXT: sshr v0.8h, v0.8h, #15
145
+ ; CHECK-GI-NEXT: ret
114
146
%tmp3 = icmp ne <8 x i16 > %A , %B
115
147
%tmp4 = sext <8 x i1 > %tmp3 to <8 x i16 >
116
148
ret <8 x i16 > %tmp4
117
149
}
118
150
119
151
define <2 x i32 > @cmne2xi32 (<2 x i32 > %A , <2 x i32 > %B ) {
120
- ; CHECK-LABEL: cmne2xi32:
121
- ; CHECK: // %bb.0:
122
- ; CHECK-NEXT: cmeq v0.2s, v0.2s, v1.2s
123
- ; CHECK-NEXT: mvn v0.8b, v0.8b
124
- ; CHECK-NEXT: ret
152
+ ; CHECK-SD-LABEL: cmne2xi32:
153
+ ; CHECK-SD: // %bb.0:
154
+ ; CHECK-SD-NEXT: cmeq v0.2s, v0.2s, v1.2s
155
+ ; CHECK-SD-NEXT: mvn v0.8b, v0.8b
156
+ ; CHECK-SD-NEXT: ret
157
+ ;
158
+ ; CHECK-GI-LABEL: cmne2xi32:
159
+ ; CHECK-GI: // %bb.0:
160
+ ; CHECK-GI-NEXT: cmeq v0.2s, v0.2s, v1.2s
161
+ ; CHECK-GI-NEXT: mvn v0.8b, v0.8b
162
+ ; CHECK-GI-NEXT: shl v0.2s, v0.2s, #31
163
+ ; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #31
164
+ ; CHECK-GI-NEXT: ret
125
165
%tmp3 = icmp ne <2 x i32 > %A , %B
126
166
%tmp4 = sext <2 x i1 > %tmp3 to <2 x i32 >
127
167
ret <2 x i32 > %tmp4
128
168
}
129
169
130
170
define <4 x i32 > @cmne4xi32 (<4 x i32 > %A , <4 x i32 > %B ) {
131
- ; CHECK-LABEL: cmne4xi32:
132
- ; CHECK: // %bb.0:
133
- ; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
134
- ; CHECK-NEXT: mvn v0.16b, v0.16b
135
- ; CHECK-NEXT: ret
171
+ ; CHECK-SD-LABEL: cmne4xi32:
172
+ ; CHECK-SD: // %bb.0:
173
+ ; CHECK-SD-NEXT: cmeq v0.4s, v0.4s, v1.4s
174
+ ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
175
+ ; CHECK-SD-NEXT: ret
176
+ ;
177
+ ; CHECK-GI-LABEL: cmne4xi32:
178
+ ; CHECK-GI: // %bb.0:
179
+ ; CHECK-GI-NEXT: cmeq v0.4s, v0.4s, v1.4s
180
+ ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
181
+ ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #31
182
+ ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
183
+ ; CHECK-GI-NEXT: ret
136
184
%tmp3 = icmp ne <4 x i32 > %A , %B
137
185
%tmp4 = sext <4 x i1 > %tmp3 to <4 x i32 >
138
186
ret <4 x i32 > %tmp4
139
187
}
140
188
141
189
define <2 x i64 > @cmne2xi64 (<2 x i64 > %A , <2 x i64 > %B ) {
142
- ; CHECK-LABEL: cmne2xi64:
143
- ; CHECK: // %bb.0:
144
- ; CHECK-NEXT: cmeq v0.2d, v0.2d, v1.2d
145
- ; CHECK-NEXT: mvn v0.16b, v0.16b
146
- ; CHECK-NEXT: ret
190
+ ; CHECK-SD-LABEL: cmne2xi64:
191
+ ; CHECK-SD: // %bb.0:
192
+ ; CHECK-SD-NEXT: cmeq v0.2d, v0.2d, v1.2d
193
+ ; CHECK-SD-NEXT: mvn v0.16b, v0.16b
194
+ ; CHECK-SD-NEXT: ret
195
+ ;
196
+ ; CHECK-GI-LABEL: cmne2xi64:
197
+ ; CHECK-GI: // %bb.0:
198
+ ; CHECK-GI-NEXT: cmeq v0.2d, v0.2d, v1.2d
199
+ ; CHECK-GI-NEXT: mvn v0.16b, v0.16b
200
+ ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #63
201
+ ; CHECK-GI-NEXT: sshr v0.2d, v0.2d, #63
202
+ ; CHECK-GI-NEXT: ret
147
203
%tmp3 = icmp ne <2 x i64 > %A , %B
148
204
%tmp4 = sext <2 x i1 > %tmp3 to <2 x i64 >
149
205
ret <2 x i64 > %tmp4
@@ -749,6 +805,8 @@ define <8 x i8> @cmtst8xi8(<8 x i8> %A, <8 x i8> %B) {
749
805
; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
750
806
; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v2.8b
751
807
; CHECK-GI-NEXT: mvn v0.8b, v0.8b
808
+ ; CHECK-GI-NEXT: shl v0.8b, v0.8b, #7
809
+ ; CHECK-GI-NEXT: sshr v0.8b, v0.8b, #7
752
810
; CHECK-GI-NEXT: ret
753
811
%tmp3 = and <8 x i8 > %A , %B
754
812
%tmp4 = icmp ne <8 x i8 > %tmp3 , zeroinitializer
@@ -768,6 +826,8 @@ define <16 x i8> @cmtst16xi8(<16 x i8> %A, <16 x i8> %B) {
768
826
; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
769
827
; CHECK-GI-NEXT: cmeq v0.16b, v0.16b, v2.16b
770
828
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
829
+ ; CHECK-GI-NEXT: shl v0.16b, v0.16b, #7
830
+ ; CHECK-GI-NEXT: sshr v0.16b, v0.16b, #7
771
831
; CHECK-GI-NEXT: ret
772
832
%tmp3 = and <16 x i8 > %A , %B
773
833
%tmp4 = icmp ne <16 x i8 > %tmp3 , zeroinitializer
@@ -787,6 +847,8 @@ define <4 x i16> @cmtst4xi16(<4 x i16> %A, <4 x i16> %B) {
787
847
; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
788
848
; CHECK-GI-NEXT: cmeq v0.4h, v0.4h, v2.4h
789
849
; CHECK-GI-NEXT: mvn v0.8b, v0.8b
850
+ ; CHECK-GI-NEXT: shl v0.4h, v0.4h, #15
851
+ ; CHECK-GI-NEXT: sshr v0.4h, v0.4h, #15
790
852
; CHECK-GI-NEXT: ret
791
853
%tmp3 = and <4 x i16 > %A , %B
792
854
%tmp4 = icmp ne <4 x i16 > %tmp3 , zeroinitializer
@@ -806,6 +868,8 @@ define <8 x i16> @cmtst8xi16(<8 x i16> %A, <8 x i16> %B) {
806
868
; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
807
869
; CHECK-GI-NEXT: cmeq v0.8h, v0.8h, v2.8h
808
870
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
871
+ ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #15
872
+ ; CHECK-GI-NEXT: sshr v0.8h, v0.8h, #15
809
873
; CHECK-GI-NEXT: ret
810
874
%tmp3 = and <8 x i16 > %A , %B
811
875
%tmp4 = icmp ne <8 x i16 > %tmp3 , zeroinitializer
@@ -825,6 +889,8 @@ define <2 x i32> @cmtst2xi32(<2 x i32> %A, <2 x i32> %B) {
825
889
; CHECK-GI-NEXT: and v0.8b, v0.8b, v1.8b
826
890
; CHECK-GI-NEXT: cmeq v0.2s, v0.2s, v2.2s
827
891
; CHECK-GI-NEXT: mvn v0.8b, v0.8b
892
+ ; CHECK-GI-NEXT: shl v0.2s, v0.2s, #31
893
+ ; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #31
828
894
; CHECK-GI-NEXT: ret
829
895
%tmp3 = and <2 x i32 > %A , %B
830
896
%tmp4 = icmp ne <2 x i32 > %tmp3 , zeroinitializer
@@ -844,6 +910,8 @@ define <4 x i32> @cmtst4xi32(<4 x i32> %A, <4 x i32> %B) {
844
910
; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
845
911
; CHECK-GI-NEXT: cmeq v0.4s, v0.4s, v2.4s
846
912
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
913
+ ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #31
914
+ ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
847
915
; CHECK-GI-NEXT: ret
848
916
%tmp3 = and <4 x i32 > %A , %B
849
917
%tmp4 = icmp ne <4 x i32 > %tmp3 , zeroinitializer
@@ -863,6 +931,8 @@ define <2 x i64> @cmtst2xi64(<2 x i64> %A, <2 x i64> %B) {
863
931
; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
864
932
; CHECK-GI-NEXT: cmeq v0.2d, v0.2d, v2.2d
865
933
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
934
+ ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #63
935
+ ; CHECK-GI-NEXT: sshr v0.2d, v0.2d, #63
866
936
; CHECK-GI-NEXT: ret
867
937
%tmp3 = and <2 x i64 > %A , %B
868
938
%tmp4 = icmp ne <2 x i64 > %tmp3 , zeroinitializer
@@ -1919,6 +1989,8 @@ define <8 x i8> @cmneqz8xi8(<8 x i8> %A) {
1919
1989
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1920
1990
; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v1.8b
1921
1991
; CHECK-GI-NEXT: mvn v0.8b, v0.8b
1992
+ ; CHECK-GI-NEXT: shl v0.8b, v0.8b, #7
1993
+ ; CHECK-GI-NEXT: sshr v0.8b, v0.8b, #7
1922
1994
; CHECK-GI-NEXT: ret
1923
1995
%tmp3 = icmp ne <8 x i8 > %A , zeroinitializer
1924
1996
%tmp4 = sext <8 x i1 > %tmp3 to <8 x i8 >
@@ -1936,6 +2008,8 @@ define <16 x i8> @cmneqz16xi8(<16 x i8> %A) {
1936
2008
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1937
2009
; CHECK-GI-NEXT: cmeq v0.16b, v0.16b, v1.16b
1938
2010
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
2011
+ ; CHECK-GI-NEXT: shl v0.16b, v0.16b, #7
2012
+ ; CHECK-GI-NEXT: sshr v0.16b, v0.16b, #7
1939
2013
; CHECK-GI-NEXT: ret
1940
2014
%tmp3 = icmp ne <16 x i8 > %A , zeroinitializer
1941
2015
%tmp4 = sext <16 x i1 > %tmp3 to <16 x i8 >
@@ -1953,6 +2027,8 @@ define <4 x i16> @cmneqz4xi16(<4 x i16> %A) {
1953
2027
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1954
2028
; CHECK-GI-NEXT: cmeq v0.4h, v0.4h, v1.4h
1955
2029
; CHECK-GI-NEXT: mvn v0.8b, v0.8b
2030
+ ; CHECK-GI-NEXT: shl v0.4h, v0.4h, #15
2031
+ ; CHECK-GI-NEXT: sshr v0.4h, v0.4h, #15
1956
2032
; CHECK-GI-NEXT: ret
1957
2033
%tmp3 = icmp ne <4 x i16 > %A , zeroinitializer
1958
2034
%tmp4 = sext <4 x i1 > %tmp3 to <4 x i16 >
@@ -1970,6 +2046,8 @@ define <8 x i16> @cmneqz8xi16(<8 x i16> %A) {
1970
2046
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1971
2047
; CHECK-GI-NEXT: cmeq v0.8h, v0.8h, v1.8h
1972
2048
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
2049
+ ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #15
2050
+ ; CHECK-GI-NEXT: sshr v0.8h, v0.8h, #15
1973
2051
; CHECK-GI-NEXT: ret
1974
2052
%tmp3 = icmp ne <8 x i16 > %A , zeroinitializer
1975
2053
%tmp4 = sext <8 x i1 > %tmp3 to <8 x i16 >
@@ -1987,6 +2065,8 @@ define <2 x i32> @cmneqz2xi32(<2 x i32> %A) {
1987
2065
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
1988
2066
; CHECK-GI-NEXT: cmeq v0.2s, v0.2s, v1.2s
1989
2067
; CHECK-GI-NEXT: mvn v0.8b, v0.8b
2068
+ ; CHECK-GI-NEXT: shl v0.2s, v0.2s, #31
2069
+ ; CHECK-GI-NEXT: sshr v0.2s, v0.2s, #31
1990
2070
; CHECK-GI-NEXT: ret
1991
2071
%tmp3 = icmp ne <2 x i32 > %A , zeroinitializer
1992
2072
%tmp4 = sext <2 x i1 > %tmp3 to <2 x i32 >
@@ -2004,6 +2084,8 @@ define <4 x i32> @cmneqz4xi32(<4 x i32> %A) {
2004
2084
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
2005
2085
; CHECK-GI-NEXT: cmeq v0.4s, v0.4s, v1.4s
2006
2086
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
2087
+ ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #31
2088
+ ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #31
2007
2089
; CHECK-GI-NEXT: ret
2008
2090
%tmp3 = icmp ne <4 x i32 > %A , zeroinitializer
2009
2091
%tmp4 = sext <4 x i1 > %tmp3 to <4 x i32 >
@@ -2021,6 +2103,8 @@ define <2 x i64> @cmneqz2xi64(<2 x i64> %A) {
2021
2103
; CHECK-GI-NEXT: movi v1.2d, #0000000000000000
2022
2104
; CHECK-GI-NEXT: cmeq v0.2d, v0.2d, v1.2d
2023
2105
; CHECK-GI-NEXT: mvn v0.16b, v0.16b
2106
+ ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #63
2107
+ ; CHECK-GI-NEXT: sshr v0.2d, v0.2d, #63
2024
2108
; CHECK-GI-NEXT: ret
2025
2109
%tmp3 = icmp ne <2 x i64 > %A , zeroinitializer
2026
2110
%tmp4 = sext <2 x i1 > %tmp3 to <2 x i64 >
0 commit comments