This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGee6befe26437: [RISCV] Rewrite CheckInvalidVLENandLMUL to avoid floating point. (authored by craig.topper).
Changed prior to commit: https://reviews.llvm.org/D157651?vs=549634&id=549636#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157651/new/ https://reviews.llvm.org/D157651 Files: clang/lib/Sema/SemaChecking.cpp Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -4474,14 +4474,24 @@ assert((EGW == 128 || EGW == 256) && "EGW can only be 128 or 256 bits"); // LMUL * VLEN >= EGW - uint64_t ElemSize = Type->isRVVType(32, false) ? 32 : 64; - uint64_t ElemCount = Type->isRVVType(1) ? 1 : - Type->isRVVType(2) ? 2 : - Type->isRVVType(4) ? 4 : - Type->isRVVType(8) ? 8 : - 16; - float Lmul = (float)(ElemSize * ElemCount) / llvm::RISCV::RVVBitsPerBlock; - uint64_t MinRequiredVLEN = std::max(EGW / Lmul, (float)ElemSize); + unsigned ElemSize = Type->isRVVType(32, false) ? 32 : 64; + unsigned MinElemCount = Type->isRVVType(1) ? 1 + : Type->isRVVType(2) ? 2 + : Type->isRVVType(4) ? 4 + : Type->isRVVType(8) ? 8 + : 16; + + unsigned EGS = EGW / ElemSize; + // If EGS is less than or equal to the minimum number of elements, then the + // type is valid. + if (EGS <= MinElemCount) + return false; + + // Otherwise, we need vscale to be at least EGS / MinElemCont. + assert(EGS % MinElemCount == 0); + unsigned VScaleFactor = EGS / MinElemCount; + // Vscale is VLEN/RVVBitsPerBlock. + unsigned MinRequiredVLEN = VScaleFactor * llvm::RISCV::RVVBitsPerBlock; std::string RequiredExt = "zvl" + std::to_string(MinRequiredVLEN) + "b"; if (!TI.hasFeature(RequiredExt)) return S.Diag(TheCall->getBeginLoc(),
Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -4474,14 +4474,24 @@ assert((EGW == 128 || EGW == 256) && "EGW can only be 128 or 256 bits"); // LMUL * VLEN >= EGW - uint64_t ElemSize = Type->isRVVType(32, false) ? 32 : 64; - uint64_t ElemCount = Type->isRVVType(1) ? 1 : - Type->isRVVType(2) ? 2 : - Type->isRVVType(4) ? 4 : - Type->isRVVType(8) ? 8 : - 16; - float Lmul = (float)(ElemSize * ElemCount) / llvm::RISCV::RVVBitsPerBlock; - uint64_t MinRequiredVLEN = std::max(EGW / Lmul, (float)ElemSize); + unsigned ElemSize = Type->isRVVType(32, false) ? 32 : 64; + unsigned MinElemCount = Type->isRVVType(1) ? 1 + : Type->isRVVType(2) ? 2 + : Type->isRVVType(4) ? 4 + : Type->isRVVType(8) ? 8 + : 16; + + unsigned EGS = EGW / ElemSize; + // If EGS is less than or equal to the minimum number of elements, then the + // type is valid. + if (EGS <= MinElemCount) + return false; + + // Otherwise, we need vscale to be at least EGS / MinElemCont. + assert(EGS % MinElemCount == 0); + unsigned VScaleFactor = EGS / MinElemCount; + // Vscale is VLEN/RVVBitsPerBlock. + unsigned MinRequiredVLEN = VScaleFactor * llvm::RISCV::RVVBitsPerBlock; std::string RequiredExt = "zvl" + std::to_string(MinRequiredVLEN) + "b"; if (!TI.hasFeature(RequiredExt)) return S.Diag(TheCall->getBeginLoc(),
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits