@@ -240,46 +240,28 @@ Intrinsic::ID llvm::getVectorIntrinsicIDForCall(const CallInst *CI,
240
240
return Intrinsic::not_intrinsic;
241
241
}
242
242
243
+ struct InterleaveIntrinsic {
244
+ Intrinsic::ID Interleave, Deinterleave;
245
+ };
246
+
247
+ static InterleaveIntrinsic InterleaveIntrinsics[] = {
248
+ {Intrinsic::vector_interleave2, Intrinsic::vector_deinterleave2},
249
+ {Intrinsic::vector_interleave3, Intrinsic::vector_deinterleave3},
250
+ {Intrinsic::vector_interleave4, Intrinsic::vector_deinterleave4},
251
+ {Intrinsic::vector_interleave5, Intrinsic::vector_deinterleave5},
252
+ {Intrinsic::vector_interleave6, Intrinsic::vector_deinterleave6},
253
+ {Intrinsic::vector_interleave7, Intrinsic::vector_deinterleave7},
254
+ {Intrinsic::vector_interleave8, Intrinsic::vector_deinterleave8},
255
+ };
256
+
243
257
Intrinsic::ID llvm::getInterleaveIntrinsicID (unsigned Factor) {
244
- switch (Factor) {
245
- case 2 :
246
- return Intrinsic::vector_interleave2;
247
- case 3 :
248
- return Intrinsic::vector_interleave3;
249
- case 4 :
250
- return Intrinsic::vector_interleave4;
251
- case 5 :
252
- return Intrinsic::vector_interleave5;
253
- case 6 :
254
- return Intrinsic::vector_interleave6;
255
- case 7 :
256
- return Intrinsic::vector_interleave7;
257
- case 8 :
258
- return Intrinsic::vector_interleave8;
259
- default :
260
- llvm_unreachable (" Unexpected factor" );
261
- }
258
+ assert (Factor >= 2 && Factor <= 8 && " Unexpected factor" );
259
+ return InterleaveIntrinsics[Factor - 2 ].Interleave ;
262
260
}
263
261
264
262
Intrinsic::ID llvm::getDeinterleaveIntrinsicID (unsigned Factor) {
265
- switch (Factor) {
266
- case 2 :
267
- return Intrinsic::vector_deinterleave2;
268
- case 3 :
269
- return Intrinsic::vector_deinterleave3;
270
- case 4 :
271
- return Intrinsic::vector_deinterleave4;
272
- case 5 :
273
- return Intrinsic::vector_deinterleave5;
274
- case 6 :
275
- return Intrinsic::vector_deinterleave6;
276
- case 7 :
277
- return Intrinsic::vector_deinterleave7;
278
- case 8 :
279
- return Intrinsic::vector_deinterleave8;
280
- default :
281
- llvm_unreachable (" Unexpected factor" );
282
- }
263
+ assert (Factor >= 2 && Factor <= 8 && " Unexpected factor" );
264
+ return InterleaveIntrinsics[Factor - 2 ].Deinterleave ;
283
265
}
284
266
285
267
// / Given a vector and an element number, see if the scalar value is
0 commit comments