@@ -105,12 +105,11 @@ define <4 x i1> @whilewr_32(ptr %a, ptr %b) {
105105;
106106; CHECK-NOSVE-LABEL: whilewr_32:
107107; CHECK-NOSVE: // %bb.0: // %entry
108- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
108+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
109109; CHECK-NOSVE-NEXT: adrp x8, .LCPI2_0
110110; CHECK-NOSVE-NEXT: add x10, x9, #3
111- ; CHECK-NOSVE-NEXT: cmp x9, #0
112111; CHECK-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI2_0]
113- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
112+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
114113; CHECK-NOSVE-NEXT: adrp x10, .LCPI2_1
115114; CHECK-NOSVE-NEXT: asr x9, x9, #2
116115; CHECK-NOSVE-NEXT: ldr q2, [x10, :lo12:.LCPI2_1]
@@ -139,12 +138,11 @@ define <2 x i1> @whilewr_64(ptr %a, ptr %b) {
139138;
140139; CHECK-NOSVE-LABEL: whilewr_64:
141140; CHECK-NOSVE: // %bb.0: // %entry
142- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
141+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
143142; CHECK-NOSVE-NEXT: adrp x8, .LCPI3_0
144143; CHECK-NOSVE-NEXT: add x10, x9, #7
145- ; CHECK-NOSVE-NEXT: cmp x9, #0
146144; CHECK-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI3_0]
147- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
145+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
148146; CHECK-NOSVE-NEXT: asr x9, x9, #3
149147; CHECK-NOSVE-NEXT: dup v0.2d, x9
150148; CHECK-NOSVE-NEXT: cmp x9, #1
@@ -270,7 +268,7 @@ define <4 x i1> @whilerw_32(ptr %a, ptr %b) {
270268; CHECK-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI6_0]
271269; CHECK-NOSVE-NEXT: add x10, x9, #3
272270; CHECK-NOSVE-NEXT: cmp x9, #0
273- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
271+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
274272; CHECK-NOSVE-NEXT: adrp x10, .LCPI6_1
275273; CHECK-NOSVE-NEXT: asr x9, x9, #2
276274; CHECK-NOSVE-NEXT: ldr q2, [x10, :lo12:.LCPI6_1]
@@ -305,7 +303,7 @@ define <2 x i1> @whilerw_64(ptr %a, ptr %b) {
305303; CHECK-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI7_0]
306304; CHECK-NOSVE-NEXT: add x10, x9, #7
307305; CHECK-NOSVE-NEXT: cmp x9, #0
308- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
306+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
309307; CHECK-NOSVE-NEXT: asr x9, x9, #3
310308; CHECK-NOSVE-NEXT: dup v0.2d, x9
311309; CHECK-NOSVE-NEXT: cmp x9, #0
@@ -712,10 +710,9 @@ define <8 x i1> @whilewr_32_split(ptr %a, ptr %b) {
712710; CHECK-SVE-LABEL: whilewr_32_split:
713711; CHECK-SVE: // %bb.0: // %entry
714712; CHECK-SVE-NEXT: index z0.d, #0, #1
715- ; CHECK-SVE-NEXT: sub x8, x1, x0
713+ ; CHECK-SVE-NEXT: subs x8, x1, x0
716714; CHECK-SVE-NEXT: add x9, x8, #3
717- ; CHECK-SVE-NEXT: cmp x8, #0
718- ; CHECK-SVE-NEXT: csel x8, x9, x8, lt
715+ ; CHECK-SVE-NEXT: csel x8, x9, x8, mi
719716; CHECK-SVE-NEXT: asr x8, x8, #2
720717; CHECK-SVE-NEXT: mov z2.d, z0.d
721718; CHECK-SVE-NEXT: mov z3.d, z0.d
@@ -740,15 +737,14 @@ define <8 x i1> @whilewr_32_split(ptr %a, ptr %b) {
740737;
741738; CHECK-NOSVE-LABEL: whilewr_32_split:
742739; CHECK-NOSVE: // %bb.0: // %entry
743- ; CHECK-NOSVE-NEXT: sub x8, x1, x0
740+ ; CHECK-NOSVE-NEXT: subs x8, x1, x0
744741; CHECK-NOSVE-NEXT: adrp x10, .LCPI12_1
745742; CHECK-NOSVE-NEXT: adrp x11, .LCPI12_2
746743; CHECK-NOSVE-NEXT: add x9, x8, #3
747- ; CHECK-NOSVE-NEXT: cmp x8, #0
748744; CHECK-NOSVE-NEXT: ldr q2, [x10, :lo12:.LCPI12_1]
749- ; CHECK-NOSVE-NEXT: csel x8, x9, x8, lt
750- ; CHECK-NOSVE-NEXT: adrp x9, .LCPI12_0
751745; CHECK-NOSVE-NEXT: ldr q3, [x11, :lo12:.LCPI12_2]
746+ ; CHECK-NOSVE-NEXT: csel x8, x9, x8, mi
747+ ; CHECK-NOSVE-NEXT: adrp x9, .LCPI12_0
752748; CHECK-NOSVE-NEXT: asr x8, x8, #2
753749; CHECK-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI12_0]
754750; CHECK-NOSVE-NEXT: adrp x9, .LCPI12_3
@@ -776,10 +772,9 @@ define <16 x i1> @whilewr_32_split2(ptr %a, ptr %b) {
776772; CHECK-SVE-LABEL: whilewr_32_split2:
777773; CHECK-SVE: // %bb.0: // %entry
778774; CHECK-SVE-NEXT: index z0.d, #0, #1
779- ; CHECK-SVE-NEXT: sub x8, x1, x0
775+ ; CHECK-SVE-NEXT: subs x8, x1, x0
780776; CHECK-SVE-NEXT: add x9, x8, #3
781- ; CHECK-SVE-NEXT: cmp x8, #0
782- ; CHECK-SVE-NEXT: csel x8, x9, x8, lt
777+ ; CHECK-SVE-NEXT: csel x8, x9, x8, mi
783778; CHECK-SVE-NEXT: asr x8, x8, #2
784779; CHECK-SVE-NEXT: mov z1.d, z0.d
785780; CHECK-SVE-NEXT: mov z2.d, z0.d
@@ -819,16 +814,15 @@ define <16 x i1> @whilewr_32_split2(ptr %a, ptr %b) {
819814;
820815; CHECK-NOSVE-LABEL: whilewr_32_split2:
821816; CHECK-NOSVE: // %bb.0: // %entry
822- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
817+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
823818; CHECK-NOSVE-NEXT: adrp x8, .LCPI13_0
824819; CHECK-NOSVE-NEXT: add x10, x9, #3
825- ; CHECK-NOSVE-NEXT: cmp x9, #0
826820; CHECK-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI13_0]
827- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
828821; CHECK-NOSVE-NEXT: adrp x8, .LCPI13_2
822+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
829823; CHECK-NOSVE-NEXT: adrp x10, .LCPI13_1
830- ; CHECK-NOSVE-NEXT: asr x9, x9, #2
831824; CHECK-NOSVE-NEXT: ldr q2, [x8, :lo12:.LCPI13_2]
825+ ; CHECK-NOSVE-NEXT: asr x9, x9, #2
832826; CHECK-NOSVE-NEXT: adrp x8, .LCPI13_4
833827; CHECK-NOSVE-NEXT: ldr q1, [x10, :lo12:.LCPI13_1]
834828; CHECK-NOSVE-NEXT: adrp x10, .LCPI13_3
@@ -870,10 +864,9 @@ define <32 x i1> @whilewr_32_split3(ptr %a, ptr %b) {
870864; CHECK-SVE-LABEL: whilewr_32_split3:
871865; CHECK-SVE: // %bb.0: // %entry
872866; CHECK-SVE-NEXT: index z0.d, #0, #1
873- ; CHECK-SVE-NEXT: sub x9, x1, x0
867+ ; CHECK-SVE-NEXT: subs x9, x1, x0
874868; CHECK-SVE-NEXT: add x10, x9, #3
875- ; CHECK-SVE-NEXT: cmp x9, #0
876- ; CHECK-SVE-NEXT: csel x9, x10, x9, lt
869+ ; CHECK-SVE-NEXT: csel x9, x10, x9, mi
877870; CHECK-SVE-NEXT: asr x9, x9, #2
878871; CHECK-SVE-NEXT: mov z1.d, z0.d
879872; CHECK-SVE-NEXT: mov z2.d, z0.d
@@ -923,18 +916,17 @@ define <32 x i1> @whilewr_32_split3(ptr %a, ptr %b) {
923916;
924917; CHECK-NOSVE-LABEL: whilewr_32_split3:
925918; CHECK-NOSVE: // %bb.0: // %entry
926- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
919+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
927920; CHECK-NOSVE-NEXT: adrp x11, .LCPI14_0
928921; CHECK-NOSVE-NEXT: add x10, x9, #3
929- ; CHECK-NOSVE-NEXT: cmp x9, #0
930922; CHECK-NOSVE-NEXT: ldr q0, [x11, :lo12:.LCPI14_0]
931- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
932- ; CHECK-NOSVE-NEXT: adrp x10, .LCPI14_1
933923; CHECK-NOSVE-NEXT: adrp x11, .LCPI14_2
924+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
925+ ; CHECK-NOSVE-NEXT: adrp x10, .LCPI14_1
926+ ; CHECK-NOSVE-NEXT: ldr q2, [x11, :lo12:.LCPI14_2]
934927; CHECK-NOSVE-NEXT: asr x9, x9, #2
935928; CHECK-NOSVE-NEXT: ldr q1, [x10, :lo12:.LCPI14_1]
936929; CHECK-NOSVE-NEXT: adrp x10, .LCPI14_3
937- ; CHECK-NOSVE-NEXT: ldr q2, [x11, :lo12:.LCPI14_2]
938930; CHECK-NOSVE-NEXT: adrp x11, .LCPI14_4
939931; CHECK-NOSVE-NEXT: ldr q3, [x10, :lo12:.LCPI14_3]
940932; CHECK-NOSVE-NEXT: adrp x10, .LCPI14_5
@@ -984,10 +976,9 @@ define <4 x i1> @whilewr_64_split(ptr %a, ptr %b) {
984976; CHECK-SVE-LABEL: whilewr_64_split:
985977; CHECK-SVE: // %bb.0: // %entry
986978; CHECK-SVE-NEXT: index z0.d, #0, #1
987- ; CHECK-SVE-NEXT: sub x8, x1, x0
979+ ; CHECK-SVE-NEXT: subs x8, x1, x0
988980; CHECK-SVE-NEXT: add x9, x8, #7
989- ; CHECK-SVE-NEXT: cmp x8, #0
990- ; CHECK-SVE-NEXT: csel x8, x9, x8, lt
981+ ; CHECK-SVE-NEXT: csel x8, x9, x8, mi
991982; CHECK-SVE-NEXT: asr x8, x8, #3
992983; CHECK-SVE-NEXT: mov z1.d, z0.d
993984; CHECK-SVE-NEXT: dup v2.2d, x8
@@ -1004,12 +995,11 @@ define <4 x i1> @whilewr_64_split(ptr %a, ptr %b) {
1004995;
1005996; CHECK-NOSVE-LABEL: whilewr_64_split:
1006997; CHECK-NOSVE: // %bb.0: // %entry
1007- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
998+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
1008999; CHECK-NOSVE-NEXT: adrp x8, .LCPI15_0
10091000; CHECK-NOSVE-NEXT: add x10, x9, #7
1010- ; CHECK-NOSVE-NEXT: cmp x9, #0
10111001; CHECK-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI15_0]
1012- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
1002+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
10131003; CHECK-NOSVE-NEXT: adrp x10, .LCPI15_1
10141004; CHECK-NOSVE-NEXT: asr x9, x9, #3
10151005; CHECK-NOSVE-NEXT: ldr q2, [x10, :lo12:.LCPI15_1]
@@ -1032,10 +1022,9 @@ define <8 x i1> @whilewr_64_split2(ptr %a, ptr %b) {
10321022; CHECK-SVE-LABEL: whilewr_64_split2:
10331023; CHECK-SVE: // %bb.0: // %entry
10341024; CHECK-SVE-NEXT: index z0.d, #0, #1
1035- ; CHECK-SVE-NEXT: sub x8, x1, x0
1025+ ; CHECK-SVE-NEXT: subs x8, x1, x0
10361026; CHECK-SVE-NEXT: add x9, x8, #7
1037- ; CHECK-SVE-NEXT: cmp x8, #0
1038- ; CHECK-SVE-NEXT: csel x8, x9, x8, lt
1027+ ; CHECK-SVE-NEXT: csel x8, x9, x8, mi
10391028; CHECK-SVE-NEXT: asr x8, x8, #3
10401029; CHECK-SVE-NEXT: mov z2.d, z0.d
10411030; CHECK-SVE-NEXT: mov z3.d, z0.d
@@ -1060,15 +1049,14 @@ define <8 x i1> @whilewr_64_split2(ptr %a, ptr %b) {
10601049;
10611050; CHECK-NOSVE-LABEL: whilewr_64_split2:
10621051; CHECK-NOSVE: // %bb.0: // %entry
1063- ; CHECK-NOSVE-NEXT: sub x8, x1, x0
1052+ ; CHECK-NOSVE-NEXT: subs x8, x1, x0
10641053; CHECK-NOSVE-NEXT: adrp x10, .LCPI16_1
10651054; CHECK-NOSVE-NEXT: adrp x11, .LCPI16_2
10661055; CHECK-NOSVE-NEXT: add x9, x8, #7
1067- ; CHECK-NOSVE-NEXT: cmp x8, #0
10681056; CHECK-NOSVE-NEXT: ldr q2, [x10, :lo12:.LCPI16_1]
1069- ; CHECK-NOSVE-NEXT: csel x8, x9, x8, lt
1070- ; CHECK-NOSVE-NEXT: adrp x9, .LCPI16_0
10711057; CHECK-NOSVE-NEXT: ldr q3, [x11, :lo12:.LCPI16_2]
1058+ ; CHECK-NOSVE-NEXT: csel x8, x9, x8, mi
1059+ ; CHECK-NOSVE-NEXT: adrp x9, .LCPI16_0
10721060; CHECK-NOSVE-NEXT: asr x8, x8, #3
10731061; CHECK-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI16_0]
10741062; CHECK-NOSVE-NEXT: adrp x9, .LCPI16_3
@@ -1096,10 +1084,9 @@ define <16 x i1> @whilewr_64_split3(ptr %a, ptr %b) {
10961084; CHECK-SVE-LABEL: whilewr_64_split3:
10971085; CHECK-SVE: // %bb.0: // %entry
10981086; CHECK-SVE-NEXT: index z0.d, #0, #1
1099- ; CHECK-SVE-NEXT: sub x8, x1, x0
1087+ ; CHECK-SVE-NEXT: subs x8, x1, x0
11001088; CHECK-SVE-NEXT: add x9, x8, #7
1101- ; CHECK-SVE-NEXT: cmp x8, #0
1102- ; CHECK-SVE-NEXT: csel x8, x9, x8, lt
1089+ ; CHECK-SVE-NEXT: csel x8, x9, x8, mi
11031090; CHECK-SVE-NEXT: asr x8, x8, #3
11041091; CHECK-SVE-NEXT: mov z1.d, z0.d
11051092; CHECK-SVE-NEXT: mov z2.d, z0.d
@@ -1139,16 +1126,15 @@ define <16 x i1> @whilewr_64_split3(ptr %a, ptr %b) {
11391126;
11401127; CHECK-NOSVE-LABEL: whilewr_64_split3:
11411128; CHECK-NOSVE: // %bb.0: // %entry
1142- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
1129+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
11431130; CHECK-NOSVE-NEXT: adrp x8, .LCPI17_0
11441131; CHECK-NOSVE-NEXT: add x10, x9, #7
1145- ; CHECK-NOSVE-NEXT: cmp x9, #0
11461132; CHECK-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI17_0]
1147- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
11481133; CHECK-NOSVE-NEXT: adrp x8, .LCPI17_2
1134+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
11491135; CHECK-NOSVE-NEXT: adrp x10, .LCPI17_1
1150- ; CHECK-NOSVE-NEXT: asr x9, x9, #3
11511136; CHECK-NOSVE-NEXT: ldr q2, [x8, :lo12:.LCPI17_2]
1137+ ; CHECK-NOSVE-NEXT: asr x9, x9, #3
11521138; CHECK-NOSVE-NEXT: adrp x8, .LCPI17_4
11531139; CHECK-NOSVE-NEXT: ldr q1, [x10, :lo12:.LCPI17_1]
11541140; CHECK-NOSVE-NEXT: adrp x10, .LCPI17_3
@@ -1190,10 +1176,9 @@ define <32 x i1> @whilewr_64_split4(ptr %a, ptr %b) {
11901176; CHECK-SVE-LABEL: whilewr_64_split4:
11911177; CHECK-SVE: // %bb.0: // %entry
11921178; CHECK-SVE-NEXT: index z0.d, #0, #1
1193- ; CHECK-SVE-NEXT: sub x9, x1, x0
1179+ ; CHECK-SVE-NEXT: subs x9, x1, x0
11941180; CHECK-SVE-NEXT: add x10, x9, #7
1195- ; CHECK-SVE-NEXT: cmp x9, #0
1196- ; CHECK-SVE-NEXT: csel x9, x10, x9, lt
1181+ ; CHECK-SVE-NEXT: csel x9, x10, x9, mi
11971182; CHECK-SVE-NEXT: asr x9, x9, #3
11981183; CHECK-SVE-NEXT: mov z1.d, z0.d
11991184; CHECK-SVE-NEXT: mov z2.d, z0.d
@@ -1243,18 +1228,17 @@ define <32 x i1> @whilewr_64_split4(ptr %a, ptr %b) {
12431228;
12441229; CHECK-NOSVE-LABEL: whilewr_64_split4:
12451230; CHECK-NOSVE: // %bb.0: // %entry
1246- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
1231+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
12471232; CHECK-NOSVE-NEXT: adrp x11, .LCPI18_0
12481233; CHECK-NOSVE-NEXT: add x10, x9, #7
1249- ; CHECK-NOSVE-NEXT: cmp x9, #0
12501234; CHECK-NOSVE-NEXT: ldr q0, [x11, :lo12:.LCPI18_0]
1251- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
1252- ; CHECK-NOSVE-NEXT: adrp x10, .LCPI18_1
12531235; CHECK-NOSVE-NEXT: adrp x11, .LCPI18_2
1236+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
1237+ ; CHECK-NOSVE-NEXT: adrp x10, .LCPI18_1
1238+ ; CHECK-NOSVE-NEXT: ldr q2, [x11, :lo12:.LCPI18_2]
12541239; CHECK-NOSVE-NEXT: asr x9, x9, #3
12551240; CHECK-NOSVE-NEXT: ldr q1, [x10, :lo12:.LCPI18_1]
12561241; CHECK-NOSVE-NEXT: adrp x10, .LCPI18_3
1257- ; CHECK-NOSVE-NEXT: ldr q2, [x11, :lo12:.LCPI18_2]
12581242; CHECK-NOSVE-NEXT: adrp x11, .LCPI18_4
12591243; CHECK-NOSVE-NEXT: ldr q3, [x10, :lo12:.LCPI18_3]
12601244; CHECK-NOSVE-NEXT: adrp x10, .LCPI18_5
@@ -1451,12 +1435,11 @@ define <3 x i1> @whilewr_32_widen(ptr %a, ptr %b) {
14511435;
14521436; CHECK-NOSVE-LABEL: whilewr_32_widen:
14531437; CHECK-NOSVE: // %bb.0: // %entry
1454- ; CHECK-NOSVE-NEXT: sub x9, x1, x0
1438+ ; CHECK-NOSVE-NEXT: subs x9, x1, x0
14551439; CHECK-NOSVE-NEXT: adrp x8, .LCPI21_0
14561440; CHECK-NOSVE-NEXT: add x10, x9, #3
1457- ; CHECK-NOSVE-NEXT: cmp x9, #0
14581441; CHECK-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI21_0]
1459- ; CHECK-NOSVE-NEXT: csel x9, x10, x9, lt
1442+ ; CHECK-NOSVE-NEXT: csel x9, x10, x9, mi
14601443; CHECK-NOSVE-NEXT: adrp x10, .LCPI21_1
14611444; CHECK-NOSVE-NEXT: asr x9, x9, #2
14621445; CHECK-NOSVE-NEXT: ldr q2, [x10, :lo12:.LCPI21_1]
0 commit comments