Skip to content

Commit b50af17

Browse files
committed
Use table of intrinsics for intrinsic ID lookup
1 parent 1b1cc2d commit b50af17

File tree

1 file changed

+18
-36
lines changed

1 file changed

+18
-36
lines changed

llvm/lib/Analysis/VectorUtils.cpp

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -240,46 +240,28 @@ Intrinsic::ID llvm::getVectorIntrinsicIDForCall(const CallInst *CI,
240240
return Intrinsic::not_intrinsic;
241241
}
242242

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+
243257
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;
262260
}
263261

264262
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;
283265
}
284266

285267
/// Given a vector and an element number, see if the scalar value is

0 commit comments

Comments
 (0)