@@ -1084,3 +1084,133 @@ define i64 @explode_16xi64(<16 x i64> %v) {
1084
1084
%add14 = add i64 %add13 , %e15
1085
1085
ret i64 %add14
1086
1086
}
1087
+
1088
+ define i32 @explode_16xi32_exact_vlen (<16 x i32 > %v ) vscale_range(2 , 2 ) {
1089
+ ; RV32-LABEL: explode_16xi32_exact_vlen:
1090
+ ; RV32: # %bb.0:
1091
+ ; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma
1092
+ ; RV32-NEXT: vslidedown.vi v12, v8, 2
1093
+ ; RV32-NEXT: vmv.x.s a0, v12
1094
+ ; RV32-NEXT: vslidedown.vi v12, v8, 3
1095
+ ; RV32-NEXT: vmv.x.s a1, v12
1096
+ ; RV32-NEXT: vmv.x.s a2, v9
1097
+ ; RV32-NEXT: vslidedown.vi v12, v9, 1
1098
+ ; RV32-NEXT: vmv.x.s a3, v12
1099
+ ; RV32-NEXT: vslidedown.vi v12, v9, 2
1100
+ ; RV32-NEXT: vmv.x.s a4, v12
1101
+ ; RV32-NEXT: vslidedown.vi v9, v9, 3
1102
+ ; RV32-NEXT: vmv.x.s a5, v9
1103
+ ; RV32-NEXT: vmv.x.s a6, v10
1104
+ ; RV32-NEXT: vslidedown.vi v9, v10, 1
1105
+ ; RV32-NEXT: vmv.x.s a7, v9
1106
+ ; RV32-NEXT: vslidedown.vi v9, v10, 2
1107
+ ; RV32-NEXT: vmv.x.s t0, v9
1108
+ ; RV32-NEXT: vslidedown.vi v9, v10, 3
1109
+ ; RV32-NEXT: vmv.x.s t1, v9
1110
+ ; RV32-NEXT: vmv.x.s t2, v11
1111
+ ; RV32-NEXT: vslidedown.vi v9, v11, 1
1112
+ ; RV32-NEXT: vmv.x.s t3, v9
1113
+ ; RV32-NEXT: vslidedown.vi v9, v11, 2
1114
+ ; RV32-NEXT: vmv.x.s t4, v9
1115
+ ; RV32-NEXT: vslidedown.vi v9, v11, 3
1116
+ ; RV32-NEXT: vmv.x.s t5, v9
1117
+ ; RV32-NEXT: vmv.s.x v9, zero
1118
+ ; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
1119
+ ; RV32-NEXT: vredxor.vs v8, v8, v9
1120
+ ; RV32-NEXT: vmv.x.s t6, v8
1121
+ ; RV32-NEXT: add a0, a0, a1
1122
+ ; RV32-NEXT: add a0, t6, a0
1123
+ ; RV32-NEXT: add a2, a2, a3
1124
+ ; RV32-NEXT: add a2, a2, a4
1125
+ ; RV32-NEXT: add a0, a0, a2
1126
+ ; RV32-NEXT: add a5, a5, a6
1127
+ ; RV32-NEXT: add a5, a5, a7
1128
+ ; RV32-NEXT: add a5, a5, t0
1129
+ ; RV32-NEXT: add a0, a0, a5
1130
+ ; RV32-NEXT: add t1, t1, t2
1131
+ ; RV32-NEXT: add t1, t1, t3
1132
+ ; RV32-NEXT: add t1, t1, t4
1133
+ ; RV32-NEXT: add t1, t1, t5
1134
+ ; RV32-NEXT: add a0, a0, t1
1135
+ ; RV32-NEXT: ret
1136
+ ;
1137
+ ; RV64-LABEL: explode_16xi32_exact_vlen:
1138
+ ; RV64: # %bb.0:
1139
+ ; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma
1140
+ ; RV64-NEXT: vslidedown.vi v12, v8, 2
1141
+ ; RV64-NEXT: vmv.x.s a0, v12
1142
+ ; RV64-NEXT: vslidedown.vi v12, v8, 3
1143
+ ; RV64-NEXT: vmv.x.s a1, v12
1144
+ ; RV64-NEXT: vmv.x.s a2, v9
1145
+ ; RV64-NEXT: vslidedown.vi v12, v9, 1
1146
+ ; RV64-NEXT: vmv.x.s a3, v12
1147
+ ; RV64-NEXT: vslidedown.vi v12, v9, 2
1148
+ ; RV64-NEXT: vmv.x.s a4, v12
1149
+ ; RV64-NEXT: vslidedown.vi v9, v9, 3
1150
+ ; RV64-NEXT: vmv.x.s a5, v9
1151
+ ; RV64-NEXT: vmv.x.s a6, v10
1152
+ ; RV64-NEXT: vslidedown.vi v9, v10, 1
1153
+ ; RV64-NEXT: vmv.x.s a7, v9
1154
+ ; RV64-NEXT: vslidedown.vi v9, v10, 2
1155
+ ; RV64-NEXT: vmv.x.s t0, v9
1156
+ ; RV64-NEXT: vslidedown.vi v9, v10, 3
1157
+ ; RV64-NEXT: vmv.x.s t1, v9
1158
+ ; RV64-NEXT: vmv.x.s t2, v11
1159
+ ; RV64-NEXT: vslidedown.vi v9, v11, 1
1160
+ ; RV64-NEXT: vmv.x.s t3, v9
1161
+ ; RV64-NEXT: vslidedown.vi v9, v11, 2
1162
+ ; RV64-NEXT: vmv.x.s t4, v9
1163
+ ; RV64-NEXT: vslidedown.vi v9, v11, 3
1164
+ ; RV64-NEXT: vmv.x.s t5, v9
1165
+ ; RV64-NEXT: vmv.s.x v9, zero
1166
+ ; RV64-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
1167
+ ; RV64-NEXT: vredxor.vs v8, v8, v9
1168
+ ; RV64-NEXT: vmv.x.s t6, v8
1169
+ ; RV64-NEXT: add a0, a0, a1
1170
+ ; RV64-NEXT: add a0, t6, a0
1171
+ ; RV64-NEXT: add a2, a2, a3
1172
+ ; RV64-NEXT: add a2, a2, a4
1173
+ ; RV64-NEXT: add a0, a0, a2
1174
+ ; RV64-NEXT: add a5, a5, a6
1175
+ ; RV64-NEXT: add a5, a5, a7
1176
+ ; RV64-NEXT: add a5, a5, t0
1177
+ ; RV64-NEXT: add a0, a0, a5
1178
+ ; RV64-NEXT: add t1, t1, t2
1179
+ ; RV64-NEXT: add t1, t1, t3
1180
+ ; RV64-NEXT: add t1, t1, t4
1181
+ ; RV64-NEXT: add t1, t1, t5
1182
+ ; RV64-NEXT: addw a0, a0, t1
1183
+ ; RV64-NEXT: ret
1184
+ %e0 = extractelement <16 x i32 > %v , i32 0
1185
+ %e1 = extractelement <16 x i32 > %v , i32 1
1186
+ %e2 = extractelement <16 x i32 > %v , i32 2
1187
+ %e3 = extractelement <16 x i32 > %v , i32 3
1188
+ %e4 = extractelement <16 x i32 > %v , i32 4
1189
+ %e5 = extractelement <16 x i32 > %v , i32 5
1190
+ %e6 = extractelement <16 x i32 > %v , i32 6
1191
+ %e7 = extractelement <16 x i32 > %v , i32 7
1192
+ %e8 = extractelement <16 x i32 > %v , i32 8
1193
+ %e9 = extractelement <16 x i32 > %v , i32 9
1194
+ %e10 = extractelement <16 x i32 > %v , i32 10
1195
+ %e11 = extractelement <16 x i32 > %v , i32 11
1196
+ %e12 = extractelement <16 x i32 > %v , i32 12
1197
+ %e13 = extractelement <16 x i32 > %v , i32 13
1198
+ %e14 = extractelement <16 x i32 > %v , i32 14
1199
+ %e15 = extractelement <16 x i32 > %v , i32 15
1200
+ %add0 = xor i32 %e0 , %e1
1201
+ %add1 = add i32 %add0 , %e2
1202
+ %add2 = add i32 %add1 , %e3
1203
+ %add3 = add i32 %add2 , %e4
1204
+ %add4 = add i32 %add3 , %e5
1205
+ %add5 = add i32 %add4 , %e6
1206
+ %add6 = add i32 %add5 , %e7
1207
+ %add7 = add i32 %add6 , %e8
1208
+ %add8 = add i32 %add7 , %e9
1209
+ %add9 = add i32 %add8 , %e10
1210
+ %add10 = add i32 %add9 , %e11
1211
+ %add11 = add i32 %add10 , %e12
1212
+ %add12 = add i32 %add11 , %e13
1213
+ %add13 = add i32 %add12 , %e14
1214
+ %add14 = add i32 %add13 , %e15
1215
+ ret i32 %add14
1216
+ }
0 commit comments