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