xref: /llvm-project/llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp (revision 128e2e446e90c3b1827cfc7d4d19e3c0976beff3)
1*128e2e44SVasileios Porpodas //===- VecUtils.cpp -------------------------------------------------------===//
2*128e2e44SVasileios Porpodas //
3*128e2e44SVasileios Porpodas // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*128e2e44SVasileios Porpodas // See https://llvm.org/LICENSE.txt for license information.
5*128e2e44SVasileios Porpodas // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*128e2e44SVasileios Porpodas //
7*128e2e44SVasileios Porpodas //===----------------------------------------------------------------------===//
8*128e2e44SVasileios Porpodas 
9*128e2e44SVasileios Porpodas #include "llvm/Transforms/Vectorize/SandboxVectorizer/VecUtils.h"
10*128e2e44SVasileios Porpodas 
11*128e2e44SVasileios Porpodas namespace llvm::sandboxir {
12*128e2e44SVasileios Porpodas 
13*128e2e44SVasileios Porpodas unsigned VecUtils::getFloorPowerOf2(unsigned Num) {
14*128e2e44SVasileios Porpodas   if (Num == 0)
15*128e2e44SVasileios Porpodas     return Num;
16*128e2e44SVasileios Porpodas   unsigned Mask = Num;
17*128e2e44SVasileios Porpodas   Mask >>= 1;
18*128e2e44SVasileios Porpodas   for (unsigned ShiftBy = 1; ShiftBy < sizeof(Num) * 8; ShiftBy <<= 1)
19*128e2e44SVasileios Porpodas     Mask |= Mask >> ShiftBy;
20*128e2e44SVasileios Porpodas   return Num & ~Mask;
21*128e2e44SVasileios Porpodas }
22*128e2e44SVasileios Porpodas 
23*128e2e44SVasileios Porpodas #ifndef NDEBUG
24*128e2e44SVasileios Porpodas template <typename T> static void dumpImpl(ArrayRef<T *> Bndl) {
25*128e2e44SVasileios Porpodas   for (auto [Idx, V] : enumerate(Bndl))
26*128e2e44SVasileios Porpodas     dbgs() << Idx << "." << *V << "\n";
27*128e2e44SVasileios Porpodas }
28*128e2e44SVasileios Porpodas void VecUtils::dump(ArrayRef<Value *> Bndl) { dumpImpl(Bndl); }
29*128e2e44SVasileios Porpodas void VecUtils::dump(ArrayRef<Instruction *> Bndl) { dumpImpl(Bndl); }
30*128e2e44SVasileios Porpodas #endif // NDEBUG
31*128e2e44SVasileios Porpodas 
32*128e2e44SVasileios Porpodas } // namespace llvm::sandboxir
33