/
redgpu
/
ispc
Обзор
Документация
Войти
/
redgpu
/
ispc
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
test
src/opt/IsCompileTimeConstant.h
38 строк
1 KB
Arina Neshlyaeva
Ported individual passes to new PM
10 июл 2023, 23:08
10 июл 2023, 23:08
49d0506
Код
Авторство
О чём код?
/* Copyright (c) 2022-2023, Intel Corporation SPDX-License-Identifier: BSD-3-Clause */ #pragma once #include "ISPCPass.h" namespace ispc { /** LLVM IR implementations of target-specific functions may include calls to the functions "bool __is_compile_time_constant_*(...)"; these allow them to have specialied code paths for where the corresponding value is known at compile time. For masks, for example, this allows them to not incur the cost of a MOVMSK call at runtime to compute its value in cases where the mask value isn't known until runtime. This pass resolves these calls into either 'true' or 'false' values so that later optimization passes can operate with these as constants. See stdlib.m4 for a number of uses of this idiom. */ class IsCompileTimeConstantPass : public llvm::PassInfoMixin<IsCompileTimeConstantPass> { public: explicit IsCompileTimeConstantPass(bool last = false) { isLastTry = last; } static llvm::StringRef getPassName() { return "Resolve \"is compile time constant\""; } llvm::PreservedAnalyses run(llvm::Function &F, llvm::FunctionAnalysisManager &FAM); private: bool isLastTry; bool lowerCompileTimeConstant(llvm::BasicBlock &BB); }; } // namespace ispc