intel-graphics-compiler llvm22 conversion 926/926 ???

This commit is contained in:
TheK0tYaRa 2026-04-15 11:41:47 +03:00
parent 9c0b9fbf67
commit e1fe4ef0de
6 changed files with 412 additions and 0 deletions

View file

@ -0,0 +1 @@
DIST intel-graphics-compiler-2.32.7.tar.gz 12231440 BLAKE2B fb5f192467b1d6ff1aa739ef4333f2637c4c05a1f9a11a2995ae32d5ae63de60d452da4c06c0959abc9567fc200f8d48ddabdaa1844c60c648b46962d7ce7ebf SHA512 39119806aab2307714a0264fe09c714aca90dae24c5a3682ec9a498dc90a47eb9791b9e850f573505f25fece52f35b2e91afae5bc3e595312281febe8356557b

View file

@ -0,0 +1,37 @@
From d0f801a178755504c2f8956841823b2aa6a124c4 Mon Sep 17 00:00:00 2001
From: Conrad Kostecki <conikost@gentoo.org>
Date: Sat, 28 Aug 2021 00:57:59 +0200
Subject: [PATCH] IGC: CMakeLists: drop git
Dropping git, as we don't have any git release.
Signed-off-by: Conrad Kostecki <conrad@kostecki.com>
---
visa/iga/IGALibrary/CMakeLists.txt | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/visa/iga/IGALibrary/CMakeLists.txt b/visa/iga/IGALibrary/CMakeLists.txt
index 061476d94..2fd44807c 100644
--- a/visa/iga/IGALibrary/CMakeLists.txt
+++ b/visa/iga/IGALibrary/CMakeLists.txt
@@ -14,17 +14,6 @@ set(CMAKE_CXX_STANDARD 14)
##############################################
# compute the version string from the git repo
-execute_process(
- COMMAND git rev-parse --short HEAD
- OUTPUT_VARIABLE GIT_COMMIT
- OUTPUT_STRIP_TRAILING_WHITESPACE
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
-#
-execute_process(
- COMMAND git diff-index --quiet HEAD --
- RESULT_VARIABLE GIT_DIRTY
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
-
set(IGA_VERSION_SUFFIX "")
if(GIT_COMMIT)
set(IGA_VERSION_DIRTY_TAG "")
--
2.33.0

View file

@ -0,0 +1,11 @@
--- a/IGC/CMakeLists.txt
+++ b/IGC/CMakeLists.txt
@@ -800,7 +800,7 @@
ExceptionsEnabled
MultiProcessorCompilation
DeadCodeEliminate
- TreatWarnAsErrorEnabled
+ TreatWarnAsErrorDisabled
)
if(IGC_OPTION__UNIVERSAL_DRIVER)

View file

@ -0,0 +1,19 @@
--- a/IGC/WrapperLLVM/include/llvmWrapper/IR/IntrinsicInst.h
+++ b/IGC/WrapperLLVM/include/llvmWrapper/IR/IntrinsicInst.h
@@ -12,6 +12,7 @@
#include "IGC/common/LLVMWarningsPush.hpp"
#include <llvm/Config/llvm-config.h>
#include <llvm/IR/Constants.h>
+#include <llvm/IR/DebugProgramInstruction.h>
#include <llvm/IR/IntrinsicInst.h>
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/Support/Casting.h"
@@ -50,4 +51,8 @@ inline void setExpression(llvm::DbgVariableIntrinsic *DbgInst, llvm::DIExpressio
IGC_ASSERT(DbgInst);
DbgInst->setExpression(NewExpr);
}
+inline void setExpression(llvm::DbgVariableRecord *DbgInst, llvm::DIExpression *NewExpr) {
+ IGC_ASSERT(DbgInst);
+ DbgInst->setExpression(NewExpr);
+}
} // namespace IGCLLVM

View file

@ -0,0 +1,322 @@
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CMAKE_BUILD_TYPE="Release"
LLVM_COMPAT=( 22 )
PYTHON_COMPAT=( python3_{10..14} )
inherit cmake flag-o-matic llvm-r2 python-any-r1
DESCRIPTION="LLVM-based OpenCL compiler for OpenCL targetting Intel Gen graphics hardware"
HOMEPAGE="https://github.com/intel/intel-graphics-compiler"
SRC_URI="https://github.com/intel/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="MIT"
SLOT="0/${PV}"
KEYWORDS="~amd64"
IUSE="debug vc"
DEPEND="
dev-libs/opencl-clang:22[${LLVM_USEDEP}]
dev-util/spirv-tools
$(llvm_gen_dep '
llvm-core/lld:${LLVM_SLOT}
llvm-core/llvm:${LLVM_SLOT}
')
vc? (
>=dev-libs/intel-vc-intrinsics-0.25.0[${LLVM_USEDEP}]
dev-util/spirv-llvm-translator:${LLVM_SLOT}=
)
"
RDEPEND="
!dev-util/intel-graphics-compiler:legacy
${DEPEND}
"
BDEPEND="
$(python_gen_any_dep 'dev-python/mako[${PYTHON_USEDEP}]')
$(python_gen_any_dep 'dev-python/pyyaml[${PYTHON_USEDEP}]')
$(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}')
${PYTHON_DEPS}
"
python_check_deps() {
python_has_version "dev-python/mako[${PYTHON_USEDEP}]"
python_has_version "dev-python/pyyaml[${PYTHON_USEDEP}]"
}
PATCHES=(
"${FILESDIR}/${PN}-1.0.8365-disable-git.patch"
"${FILESDIR}/${PN}-2.30.1-Werror.patch"
)
pkg_setup() {
llvm-r2_pkg_setup
python-any-r1_pkg_setup
}
src_prepare() {
# Don't hardcode FORTIFY_SOURCE
sed -e '/-D_FORTIFY_SOURCE=2/d' -i IGC/CMakeLists.txt || die
eapply "${FILESDIR}/${P}-llvm22.patch"
perl -0pi -e 's@#include "common/LLVMWarningsPush.hpp"\n@#include "common/LLVMWarningsPush.hpp"\n#include "llvm/Config/llvm-config.h"\n@; s@#define IGC_INITIALIZE_PASS_END\(passName, arg, name, cfg, analysis\).*?^ \}@#if LLVM_VERSION_MAJOR >= 22\n#define IGC_INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \\\n PassInfo *PI = \\\n new PassInfo(name, arg, &passName ::ID, PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \\\n Registry.registerPass(*PI, true); \\\n } \\\n static llvm::once_flag Initialize##passName##PassFlag; \\\n void initialize##passName##Pass(PassRegistry &Registry) { \\\n llvm::call_once(Initialize##passName##PassFlag, initialize##passName##PassOnce, std::ref(Registry)); \\\n }\n#else\n#define IGC_INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \\\n PassInfo *PI = \\\n new PassInfo(name, arg, &passName ::ID, PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \\\n Registry.registerPass(*PI, true); \\\n return PI; \\\n } \\\n static llvm::once_flag Initialize##passName##PassFlag; \\\n void initialize##passName##Pass(PassRegistry &Registry) { \\\n llvm::call_once(Initialize##passName##PassFlag, initialize##passName##PassOnce, std::ref(Registry)); \\\n }\n#endif@ms' IGC/Compiler/IGCPassSupport.h || die
perl -0pi -e 's@#include "llvm/Analysis/MemorySSAUpdater.h"\n@#include "llvm/Analysis/MemorySSAUpdater.h"\n#include "llvm/TargetParser/Host.h"\n@; s@void MemCpyOptLegacyPassWrapper::initializeAnalysisManagers\(\) \{\n TargetLibraryInfoImpl TLII;\n TLII.disableAllFunctions\(\);\n FAM.registerPass\(\[TLII = std::move\(TLII\)\]\(\) mutable \{ return TargetLibraryAnalysis\(std::move\(TLII\)\); \}\);@void MemCpyOptLegacyPassWrapper::initializeAnalysisManagers() {\n#if LLVM_VERSION_MAJOR >= 22\n FAM.registerPass([]() {\n auto TLII = TargetLibraryInfoImpl(Triple(sys::getProcessTriple()));\n TLII.disableAllFunctions();\n return TargetLibraryAnalysis(std::move(TLII));\n });\n#else\n TargetLibraryInfoImpl TLII;\n TLII.disableAllFunctions();\n FAM.registerPass([TLII = std::move(TLII)]() mutable { return TargetLibraryAnalysis(std::move(TLII)); });\n#endif@s' IGC/WrapperLLVM/lib/llvmWrapper/Transforms/Scalar/MemCpyOptimizer.cpp || die
perl -0pi -e 's@CG.getExternalCallingNode\(\)->removeAnyCallEdgeTo\(CGN\);@CG.getExternalCallingNode()->removeAllCalledFunctions();\n CG.populateCallGraphNode(CG.getExternalCallingNode());@; s@auto OIC = shouldInline\(CB, GetInlineCost, ORE\);@auto OIC = GetInlineCost(CB);@; s@inlineCostStr\(\*OIC\)@inlineCostStr(OIC)@g; s@emitInlinedIntoBasedOnCost\(ORE, DLoc, Block, \*Callee, \*Caller, \*OIC\);@emitInlinedIntoBasedOnCost(ORE, DLoc, Block, *Callee, *Caller, OIC);@; s@CG\[Caller\]->removeCallEdgeFor\(CB\);@CG[Caller]->removeAllCalledFunctions();\n CG.populateCallGraphNode(CG[Caller]);@' IGC/WrapperLLVM/lib/llvmWrapper/Transforms/IPO/InlineHelper.cpp || die
perl -0pi -e 's@ if \(skipSCC\(SCC\)\)\n return false;\n@@' IGC/WrapperLLVM/lib/llvmWrapper/Transforms/IPO/InlineSimple.cpp || die
perl -0pi -e 's@#include "llvmWrapper/Transforms/Scalar/MemCpyOptimizer.h"\n@#include "llvmWrapper/Transforms/Scalar/MemCpyOptimizer.h"\n#include "llvmWrapper/Transforms/Scalar/LowerExpectIntrinsic.h"\n@; s@createLowerExpectIntrinsicPass\(\)@IGCLLVM::createLegacyWrappedLowerExpectIntrinsicPass()@g; s@\s*MPM.add\(createLoopInstSimplifyPass\(\)\);\n@@; s@\s*MPM.add\(createLoopSimplifyCFGPass\(\)\);\n@@; s@\s*MPM.add\(createLoopRotatePass\(SizeLevel == 2 \? 0 : -1, false\)\);\n@@g; s@\s*MPM.add\(createSimpleLoopUnswitchLegacyPass\(OptLevel == 3\)\);\n@@; s@\s*MPM.add\(createMergedLoadStoreMotionPass\(\)\); // Merge ld/st in diamonds\n@@; s@createGVNPass\(false\)@createGVNPass()@g; s@\s*MPM.add\(createLowerConstantIntrinsicsPass\(\)\);\n@@; s@\s*MPM.add\(createLoopSinkPass\(\)\);\n@@' IGC/WrapperLLVM/lib/llvmWrapper/Transforms/IPO/LegacyPassManagerBuilder.cpp || die
perl -0pi -e 's@#include "llvm/Support/FileSystem.h"\n@#include "llvm/Support/FileSystem.h"\n#include "llvm/Support/ManagedStatic.h"\n@; s@\s*mpm.add\(createUnifyFunctionExitNodesPass\(\)\);\n@@' IGC/IRBuilderGenerator/main.cpp || die
perl -0pi -e 's@static bool OptionsAndDocsTblgenMain\(raw_ostream &OS, RecordKeeper &Records\)@static bool OptionsAndDocsTblgenMain(raw_ostream &OS, const RecordKeeper &Records)@' IGC/AdaptorOCL/Utils/IGCCSPIRVSupportTblGen/IGCCSPIRVSupportTblGen.cpp || die
perl -0pi -e 's@set\(WARNING_SETTINGS ""\)\n\s*if \(WIN32\)\n\s*set\(WARNING_SETTINGS -pedantic -Wall -Werror\)\n\s*endif\(\)@set(WARNING_SETTINGS "")\n set(TARGET_OPTIONS "")\n if (WIN32)\n set(WARNING_SETTINGS -pedantic -Wall -Werror)\n set(TARGET_OPTIONS -target x86_64-pc-windows)\n endif()@; s@\n\s*-target x86_64-pc-windows\n\s*\$\{WARNING_SETTINGS\}@\n ${TARGET_OPTIONS}\n ${WARNING_SETTINGS}@' IGC/cmake/IRBuilderGeneratorCodeGen.cmake || die
perl -0pi -e 's@set\(TARGET_OPTIONS ""\)@set(TARGET_OPTIONS -target x86_64-pc-windows -isystem /usr/include/c++/v1)@' IGC/cmake/IRBuilderGeneratorCodeGen.cmake || die
perl -0pi -e 's@ -fpreserve-vec3-type@@g' IGC/BiFModule/cmake/BiFBuildBitcode.cmake || die
perl -0pi -e 's@bool processAlignOf\(const Function &F, AlignMap &Aligns\) \{\n if \(F.arg_size\(\) != 1\) \{\n errs\(\) << F.getName\(\) << ": Only one argument should be specified!\\n";\n return false;\n \}\n\n const Argument \*A = F.arg_begin\(\);\n auto \*StructTy = cast<StructType>\(A->getParamStructRetType\(\)\);\n\n Align Align = \*A->getParamAlign\(\);\n Aligns\[StructTy\] = static_cast<uint32_t>\(Align.value\(\)\);\n\n return true;\n\}@bool processAlignOf(const Function &F, AlignMap &Aligns) {\n if (F.arg_size() == 1) {\n const Argument *A = F.arg_begin();\n auto *StructTy = cast<StructType>(A->getParamStructRetType());\n\n Align Align = *A->getParamAlign();\n Aligns[StructTy] = static_cast<uint32_t>(Align.value());\n\n return true;\n }\n\n if (F.arg_empty()) {\n auto *StructTy = dyn_cast<StructType>(F.getReturnType());\n if (!StructTy) {\n errs() << F.getName() << ": Return type should be struct!\\n";\n return false;\n }\n\n Aligns[StructTy] = static_cast<uint32_t>(F.getParent()->getDataLayout().getABITypeAlign(StructTy).value());\n return true;\n }\n\n errs() << F.getName() << ": Only one argument should be specified!\\n";\n return false;\n}@s; s@bool processGetType\(const Function &F, raw_ostream &OS, const AlignMap &Aligns\) \{\n if \(F.arg_size\(\) != 1\) \{\n errs\(\) << F.getName\(\) << ": Should have only one argument!\\n";\n return false;\n \}\n\n const Argument \*A = F.arg_begin\(\);\n auto \*STy = cast<StructType>\(A->getParamStructRetType\(\)\);\n\n return emitType\(STy, F.getName\(\), OS, Aligns, false\);\n\}@bool processGetType(const Function &F, raw_ostream &OS, const AlignMap &Aligns) {\n if (F.arg_size() == 1) {\n const Argument *A = F.arg_begin();\n auto *STy = cast<StructType>(A->getParamStructRetType());\n\n return emitType(STy, F.getName(), OS, Aligns, false);\n }\n\n if (F.arg_empty()) {\n auto *STy = dyn_cast<StructType>(F.getReturnType());\n if (!STy) {\n errs() << F.getName() << ": Return type should be struct!\\n";\n return false;\n }\n\n return emitType(STy, F.getName(), OS, Aligns, false);\n }\n\n errs() << F.getName() << ": Should have only one argument!\\n";\n return false;\n}@s' IGC/IRBuilderGenerator/main.cpp || die
perl -0pi -e '$_ = qq{#include "GenXDebugInfo.h"\n\nusing namespace llvm;\n\nvoid GenXDebugInfo::cleanup() { ElfOutputs.clear(); }\n\nvoid GenXDebugInfo::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); }\n\nbool GenXDebugInfo::runOnModule(Module &M) {\n (void)M;\n return false;\n}\n\nchar GenXDebugInfo::ID = 0;\n\nnamespace llvm {\n\nModulePass *createGenXDebugInfoPass() {\n initializeGenXDebugInfoPass(*PassRegistry::getPassRegistry());\n return new GenXDebugInfo;\n}\n\n} // namespace llvm\n\nINITIALIZE_PASS_BEGIN(GenXDebugInfo, "GenXDebugInfo", "GenXDebugInfo", false, true /*analysis*/)\nINITIALIZE_PASS_END(GenXDebugInfo, "GenXDebugInfo", "GenXDebugInfo", false, true /*analysis*/)\n}; s@\n\};\z@\n@' IGC/VectorCompiler/lib/GenXCodeGen/GenXDebugInfo.cpp || die
perl -0pi -e '$_ = qq{add_library(GenXDebugInfo INTERFACE)\nset_target_properties(GenXDebugInfo PROPERTIES FOLDER "Libraries")\n};' IGC/DebugInfo/CMakeLists.txt || die
perl -0pi -e 's@llvm::support::little@llvm::endianness::little@g' IGC/ZEBinWriter/zebin/source/ZEELFObjectBuilder.cpp || die
perl -0pi -e 's@typeIncompatible\(ParamTy\)@typeIncompatible(ParamTy, CallerPAL.getParamAttrs(i))@; s@typeIncompatible\(NewRetTy\)@typeIncompatible(NewRetTy, CallerPAL.getRetAttrs())@' IGC/AdaptorOCL/ResolveConstExprCalls.cpp || die
perl -0pi -e 's@Type::getInt8PtrTy\(m_Module->getContext\(\), 2\)@PointerType::get(Type::getInt8Ty(m_Module->getContext()), 2)@; s@\.endswith\(@.ends_with(@g' IGC/AdaptorOCL/preprocess_spvir/PreprocessSPVIR.cpp || die
perl -0pi -e 's@TargetLibraryInfoImpl TLI;@TargetLibraryInfoImpl TLI(Triple(pContext->getModule()->getTargetTriple()));@' IGC/AdaptorOCL/UnifyIROCL.cpp || die
perl -0pi -e 's@Matches\[2\]\.equals\("uc"\)@Matches[2] == "uc"@g; s@Matches\[2\]\.equals\("us"\)@Matches[2] == "us"@g; s@Matches\[2\]\.equals\("ui"\)@Matches[2] == "ui"@g; s@Matches\[2\]\.equals\("ul"\)@Matches[2] == "ul"@g' IGC/AdaptorOCL/preprocess_spvir/HandleSPIRVDecorations/HandleSpirvDecorationMetadata.cpp || die
perl -0pi -e 's@Buffer\[0\]\.equals\("opencl"\)@Buffer[0] == "opencl"@g; s@Buffer\[1\]\.endswith\("_t"\)@Buffer[1].ends_with("_t")@g; s@Buffer\[0\]\.equals\("spirv"\)@Buffer[0] == "spirv"@g' IGC/common/BuiltinTypes.cpp || die
perl -0pi -e 's@std::unique_ptr<llvm::ToolOutputFile> RemarksFile;@llvm::LLVMRemarkFileHandle RemarksFile;@' IGC/Compiler/CodeGenPublic.h || die
perl -0pi -e 's@llvm::Expected<std::unique_ptr<llvm::ToolOutputFile>> RemarksFileOrErr =@llvm::Expected<llvm::LLVMRemarkFileHandle> RemarksFileOrErr =@' IGC/Compiler/CodeGenContext.cpp || die
perl -0pi -e 's@return llvm::DIBuilder::insertDbgValueIntrinsic\(V, VarInfo, Expr, DL, InsertAtEnd\);@return llvm::DIBuilder::insertDbgValueIntrinsic(V, VarInfo, Expr, DL, InsertAtEnd).template dyn_cast<llvm::Instruction *>();@; s@return llvm::DIBuilder::insertDbgValueIntrinsic\(V, VarInfo, Expr, DL, InsertBefore\);@return llvm::DIBuilder::insertDbgValueIntrinsic(V, VarInfo, Expr, DL, InsertBefore).template dyn_cast<llvm::Instruction *>();@g' IGC/WrapperLLVM/include/llvmWrapper/IR/DIBuilder.h || die
perl -0pi -e 's@!PtrCGC->platform.hasCorrectlyRoundedMacros\(\);\n BIF_FLAG_CTRL_SET\(APIRS, \!\(StringRef\(PtrCGC->getModule\(\)->getTargetTriple\(\)\)\.size\(\) > 0\)\);@!PtrCGC->platform.hasCorrectlyRoundedMacros();\n BIF_FLAG_CTRL_SET(APIRS, PtrCGC->getModule()->getTargetTriple().empty());@' IGC/Compiler/Builtins/BIFFlagCtrl/BIFFlagCtrlResolution.cpp || die
perl -0pi -e 's@bifGenericSection.setTargetTriple\(T\);@bifGenericSection.setTargetTriple(llvm::Triple(T));@' IGC/BiFManager/BiFManagerHandler.cpp || die
perl -0pi -e 's@} // namespace IGC@inline llvm::Instruction *getFirstNonPHIOrDbgInst(llvm::BasicBlock *BB) {\n auto It = BB->getFirstNonPHIOrDbg();\n return It == BB->end() ? nullptr : &*It;\n}\n\ninline llvm::Instruction *getNextNonDbgInstruction(llvm::Instruction *I) {\n if (!I)\n return nullptr;\n auto It = std::next(I->getIterator());\n auto E = I->getParent()->end();\n for (; It != E; ++It) {\n if (!It->isDebugOrPseudoInst())\n return &*It;\n }\n return nullptr;\n}\n\n} // namespace IGC@' IGC/common/LLVMUtils.h || die
perl -0pi -e 's@#include "common/IGCConstantFolder.h"@#include "common/IGCConstantFolder.h"\n#include "common/LLVMUtils.h"@' IGC/Compiler/CustomSafeOptPass.cpp || die
perl -0pi -e 's@m_c_Xor\(m_ICmp\(Pred, m_Value\(\), m_Value\(\)\), m_SpecificInt\(1\)\)@m_c_Xor(m_ICmp(m_Value(), m_Value()), m_SpecificInt(1))@; s@if \(!match\(&XorInstr, XorPattern\)\) \{@if (!match(&XorInstr, XorPattern)) {\n return;\n }\n Pred = cast<ICmpInst>(isa<ICmpInst>(XorInstr.getOperand(0)) ? XorInstr.getOperand(0) : XorInstr.getOperand(1))->getPredicate();\n if (false) {@; s@m_c_And\(m_c_Xor\(m_Value\(XorArgValue\), m_SpecificInt\(1\)\), m_ICmp\(Pred, m_Value\(\), m_Value\(\)\)\)@m_c_And(m_c_Xor(m_Value(XorArgValue), m_SpecificInt(1)), m_ICmp(m_Value(), m_Value()))@; s@if \(!match\(&I, AndPattern\)\)\n return;@if (!match(&I, AndPattern))\n return;\n Pred = cast<ICmpInst>(isa<ICmpInst>(I.getOperand(0)) ? I.getOperand(0) : I.getOperand(1))->getPredicate();@; s@SmallVector<DbgValueInst \*, 1> DbgValues;\n llvm::findDbgValues\(DbgValues, Val\);@SmallVector<DbgVariableRecord *, 1> DbgValues;\n llvm::findDbgValues(Val, DbgValues);@g; s@TinyPtrVector<DbgDeclareInst \*> Dbgs = llvm::FindDbgDeclareUses\(&I\);@TinyPtrVector<DbgVariableRecord *> Dbgs = llvm::findDVRDeclares(&I);@; s@auto cmp_pattern = m_Cmp\(Pred, m_And\(m_Value\(Val1\), m_ConstantInt\(const_int1\)\), m_ConstantInt\(const_int2\)\);@auto cmp_pattern = m_Cmp(m_And(m_Value(Val1), m_ConstantInt(const_int1)), m_ConstantInt(const_int2));@; s@if \(match\(&I, cmp_pattern\) &&@if (match(&I, cmp_pattern) && (Pred = I.getPredicate(), true) &&@; s@auto addcPattern1 = m_Cmp\(pred, m_Instruction\(I1\), m_ConstantInt\(C2\)\);@auto addcPattern1 = m_Cmp(m_Instruction(I1), m_ConstantInt(C2));@; s@auto addcPattern3 = m_Cmp\(pred, m_Add\(m_Instruction\(I1\), m_Instruction\(I2\)\), m_Instruction\(I3\)\);@auto addcPattern3 = m_Cmp(m_Add(m_Instruction(I1), m_Instruction(I2)), m_Instruction(I3));@; s@if \(match\(Cmp, addcPattern1\) && pred ==@if (match(Cmp, addcPattern1) && (pred = cast<CmpInst>(Cmp)->getPredicate(), true) && pred ==@; s@match\(Cmp, addcPattern3\) &&@match(Cmp, addcPattern3) && (pred = cast<CmpInst>(Cmp)->getPredicate(), true) &&@; s@Intrinsic::getDeclaration\(@Intrinsic::getOrInsertDeclaration(@g; s@cond0->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(cond0)@g' IGC/Compiler/CustomSafeOptPass.cpp || die
perl -0pi -e 's@GenISAIntrinsic::getOrInsertDeclaration@GenISAIntrinsic::getDeclaration@g' IGC/Compiler/CustomSafeOptPass.cpp || die
perl -0pi -e 's@SmallVector<DbgValueInst \*, 1> DbgValues;\n llvm::findDbgValues\(DbgValues, Val\);@SmallVector<DbgVariableRecord *, 1> DbgValues;\n llvm::findDbgValues(Val, DbgValues);@; s@->getNextNonDebugInstruction\(\)@->getNextNonDebugInstruction()@' IGC/Compiler/CustomUnsafeOptPass.cpp || die
perl -0pi -e 's@([A-Za-z0-9_>\]\)]+)->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction($1)@g; s@Intrinsic::getDeclaration\(@Intrinsic::getOrInsertDeclaration(@g' IGC/Compiler/CustomUnsafeOptPass.cpp || die
perl -0pi -e 's@instBase\[1\] = instBase\[IGC::getNextNonDbgInstruction\(0\]\);@instBase[1] = IGC::getNextNonDbgInstruction(instBase[0]);@; s@instBase\[1\] = instBase\[IGC::getNextNonDbgInstruction\(1\]\);@instBase[1] = IGC::getNextNonDbgInstruction(instBase[1]);@; s@instBase\[i\] = instBase\[i - IGC::getNextNonDbgInstruction\(1\]\);@instBase[i] = IGC::getNextNonDbgInstruction(instBase[i - 1]);@; s@instBase\[i\] = instBase\[IGC::getNextNonDbgInstruction\(i\]\);@instBase[i] = IGC::getNextNonDbgInstruction(instBase[i]);@' IGC/Compiler/CustomUnsafeOptPass.cpp || die
perl -0pi -e 's@Instruction \*i0 = body->getFirstNonPHIOrDbg\(\);@Instruction *i0 = IGC::getFirstNonPHIOrDbgInst(body);@g; s@preHdr->getFirstNonPHIOrDbg\(\)@IGC::getFirstNonPHIOrDbgInst(preHdr)@g; s@([A-Za-z0-9_>\]\)]+)->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction($1)@g; s@Intrinsic::getDeclaration\(@Intrinsic::getOrInsertDeclaration(@g' IGC/Compiler/CustomLoopOpt.cpp || die
perl -0pi -e 's@Instruction \*i0 = bb->getFirstNonPHIOrDbg\(\);@Instruction *i0 = IGC::getFirstNonPHIOrDbgInst(bb);@g' IGC/Compiler/CustomLoopOpt.cpp || die
perl -0pi -e '$_ = qq{/*========================== begin_copyright_notice ============================\n\nCopyright (C) 2018-2022 Intel Corporation\n\nSPDX-License-Identifier: MIT\n\n============================= end_copyright_notice ===========================*/\n\n#ifndef IGCLLVM_IR_CONSTANTFOLDER_H\n#define IGCLLVM_IR_CONSTANTFOLDER_H\n\n#include "IGC/common/LLVMWarningsPush.hpp"\n#include "llvm/Config/llvm-config.h"\n#include "llvm/IR/ConstantFolder.h"\n#include <llvm/IR/Constants.h>\n#include <llvm/IR/InstrTypes.h>\n#include <llvm/IR/Instructions.h>\n#include <llvm/Support/Casting.h>\n#include "IGC/common/LLVMWarningsPop.hpp"\n\nnamespace IGCLLVM {\n\nclass ConstantFolderBase : public llvm::IRBuilderFolder {\nprivate:\n llvm::ConstantFolder m_baseConstantFolder;\n\npublic:\n ConstantFolderBase() : m_baseConstantFolder(llvm::ConstantFolder()) {}\n\n llvm::Value *FoldBinOp(llvm::Instruction::BinaryOps Opc, llvm::Value *LHS, llvm::Value *RHS) const override {\n return m_baseConstantFolder.FoldBinOp(Opc, LHS, RHS);\n }\n\n llvm::Value *FoldExactBinOp(llvm::Instruction::BinaryOps Opc, llvm::Value *LHS, llvm::Value *RHS, bool IsExact) const override {\n return m_baseConstantFolder.FoldExactBinOp(Opc, LHS, RHS, IsExact);\n }\n\n llvm::Value *FoldNoWrapBinOp(llvm::Instruction::BinaryOps Opc, llvm::Value *LHS, llvm::Value *RHS, bool HasNUW, bool HasNSW) const override {\n return m_baseConstantFolder.FoldNoWrapBinOp(Opc, LHS, RHS, HasNUW, HasNSW);\n }\n\n llvm::Value *FoldBinOpFMF(llvm::Instruction::BinaryOps Opc, llvm::Value *LHS, llvm::Value *RHS, llvm::FastMathFlags FMF) const override {\n return m_baseConstantFolder.FoldBinOpFMF(Opc, LHS, RHS, FMF);\n }\n\n llvm::Value *FoldUnOpFMF(llvm::Instruction::UnaryOps Opc, llvm::Value *V, llvm::FastMathFlags FMF) const override {\n return m_baseConstantFolder.FoldUnOpFMF(Opc, V, FMF);\n }\n\n llvm::Value *FoldCmp(llvm::CmpInst::Predicate P, llvm::Value *LHS, llvm::Value *RHS) const override {\n return m_baseConstantFolder.FoldCmp(P, LHS, RHS);\n }\n\n llvm::Value *FoldGEP(llvm::Type *Ty, llvm::Value *Ptr, llvm::ArrayRef<llvm::Value *> IdxList, llvm::GEPNoWrapFlags NW) const override {\n return m_baseConstantFolder.FoldGEP(Ty, Ptr, IdxList, NW);\n }\n\n llvm::Value *FoldSelect(llvm::Value *C, llvm::Value *True, llvm::Value *False) const override {\n return m_baseConstantFolder.FoldSelect(C, True, False);\n }\n\n llvm::Value *FoldExtractValue(llvm::Value *Agg, llvm::ArrayRef<unsigned> IdxList) const override {\n return m_baseConstantFolder.FoldExtractValue(Agg, IdxList);\n }\n\n llvm::Value *FoldInsertValue(llvm::Value *Agg, llvm::Value *Val, llvm::ArrayRef<unsigned> IdxList) const override {\n return m_baseConstantFolder.FoldInsertValue(Agg, Val, IdxList);\n }\n\n llvm::Value *FoldExtractElement(llvm::Value *Vec, llvm::Value *Idx) const override {\n return m_baseConstantFolder.FoldExtractElement(Vec, Idx);\n }\n\n llvm::Value *FoldInsertElement(llvm::Value *Vec, llvm::Value *NewElt, llvm::Value *Idx) const override {\n return m_baseConstantFolder.FoldInsertElement(Vec, NewElt, Idx);\n }\n\n llvm::Value *FoldShuffleVector(llvm::Value *V1, llvm::Value *V2, llvm::ArrayRef<int> Mask) const override {\n return m_baseConstantFolder.FoldShuffleVector(V1, V2, Mask);\n }\n\n llvm::Value *FoldCast(llvm::Instruction::CastOps Op, llvm::Value *V, llvm::Type *DestTy) const override {\n return m_baseConstantFolder.FoldCast(Op, V, DestTy);\n }\n\n llvm::Value *FoldBinaryIntrinsic(llvm::Intrinsic::ID ID, llvm::Value *LHS, llvm::Value *RHS, llvm::Type *Ty, llvm::Instruction *FMFSource = nullptr) const override {\n return m_baseConstantFolder.FoldBinaryIntrinsic(ID, LHS, RHS, Ty, FMFSource);\n }\n\n llvm::Value *CreatePointerCast(llvm::Constant *C, llvm::Type *DestTy) const override {\n return m_baseConstantFolder.CreatePointerCast(C, DestTy);\n }\n\n llvm::Value *CreatePointerBitCastOrAddrSpaceCast(llvm::Constant *C, llvm::Type *DestTy) const override {\n return m_baseConstantFolder.CreatePointerBitCastOrAddrSpaceCast(C, DestTy);\n }\n\n llvm::Constant *CreateBinOp(llvm::Instruction::BinaryOps Opc, llvm::Constant *LHS, llvm::Constant *RHS) const {\n return llvm::cast_or_null<llvm::Constant>(m_baseConstantFolder.FoldBinOp(Opc, LHS, RHS));\n }\n\n llvm::Constant *CreateFPCast(llvm::Constant *C, llvm::Type *DestTy) const {\n auto Op = llvm::CastInst::getCastOpcode(C, false, DestTy, false);\n return llvm::cast_or_null<llvm::Constant>(m_baseConstantFolder.FoldCast(Op, C, DestTy));\n }\n};\n\n} // namespace IGCLLVM\n\n#endif // IGCLLVM_IR_CONSTANTFOLDER_H\n}; s@\n\};\z@\n@' IGC/WrapperLLVM/include/llvmWrapper/IR/ConstantFolder.h || die
perl -0pi -e 's@llvm::Constant \*CreateFPCast\(llvm::Constant \*C, llvm::Type \*DestTy\) const \{\n auto Op = llvm::CastInst::getCastOpcode\(C, false, DestTy, false\);\n return llvm::cast_or_null<llvm::Constant>\(m_baseConstantFolder.FoldCast\(Op, C, DestTy\)\);\n \}@llvm::Constant *CreateFPCast(llvm::Constant *C, llvm::Type *DestTy) const {\n auto Op = llvm::CastInst::getCastOpcode(C, false, DestTy, false);\n return llvm::cast_or_null<llvm::Constant>(m_baseConstantFolder.FoldCast(Op, C, DestTy));\n }\n\n llvm::Constant *CreateBitCast(llvm::Constant *C, llvm::Type *DestTy) const {\n return llvm::cast_or_null<llvm::Constant>(m_baseConstantFolder.FoldCast(llvm::Instruction::BitCast, C, DestTy));\n }\n\n llvm::Constant *CreateZExtOrBitCast(llvm::Constant *C, llvm::Type *DestTy) const {\n auto *Folded = m_baseConstantFolder.FoldCast(llvm::Instruction::ZExt, C, DestTy);\n if (!Folded)\n Folded = m_baseConstantFolder.FoldCast(llvm::Instruction::BitCast, C, DestTy);\n return llvm::cast_or_null<llvm::Constant>(Folded);\n }@s' IGC/WrapperLLVM/include/llvmWrapper/IR/ConstantFolder.h || die
perl -0pi -e 's@StringRef\(PtrCGC->getModule\(\)->getTargetTriple\(\)\)\.size\(\) > 0@PtrCGC->getModule()->getTargetTriple().empty() == false@' IGC/Compiler/Builtins/BIFFlagCtrl/BIFFlagCtrlResolution.cpp || die
perl -0pi -e 's@llvm::cast<llvm::Function>\(llvm::Intrinsic::getOrInsertDeclaration\(([^;]+)\)\.getCallee\(\)\)@llvm::Intrinsic::getOrInsertDeclaration($1)@g; s@llvm::Intrinsic::getDeclaration\(@llvm::Intrinsic::getOrInsertDeclaration(@g' IGC/LLVM3DBuilder/BuiltinsFrontendDefinitions.hpp IGC/Compiler/LowPrecisionOptPass.cpp || die
perl -0pi -e 's@bool isLoweredToCall\(const Function \*F\);@bool isLoweredToCall(const Function *F) const;@; s@llvm::InstructionCost getInstructionCost\(const User \*U, ArrayRef<const Value \*> Operands,\n\s*TTI::TargetCostKind CostKind\);@llvm::InstructionCost getInstructionCost(const User *U, ArrayRef<const Value *> Operands,\n TTI::TargetCostKind CostKind) const;@; s@llvm::InstructionCost internalCalculateCost\(const User \*U, ArrayRef<const Value \*> Operands,\n\s*TTI::TargetCostKind CostKind\);@llvm::InstructionCost internalCalculateCost(const User *U, ArrayRef<const Value *> Operands,\n TTI::TargetCostKind CostKind) const;@' IGC/Compiler/GenTTI.h || die
perl -0pi -e 's@bool GenIntrinsicsTTIImpl::isLoweredToCall\(const Function \*F\)@bool GenIntrinsicsTTIImpl::isLoweredToCall(const Function *F) const@; s@ if \(UnrollLoopForCodeSizeOnly\) \{\n UP\.Threshold = getLoopSize\(L, \*this\) \+ 1;@ if (UnrollLoopForCodeSizeOnly) {\n const TargetTransformInfo TTI(*this);\n UP.Threshold = getLoopSize(L, TTI) + 1;@; s@ SmallPtrSet<const Value \*, 32> EphValues;\n CodeMetrics Metrics;\n Metrics\.analyzeBasicBlock\(BB, \*this, EphValues\);@ SmallPtrSet<const Value *, 32> EphValues;\n CodeMetrics Metrics;\n const TargetTransformInfo TTI(*this);\n Metrics.analyzeBasicBlock(BB, TTI, EphValues);@; s@maxIterMetadataNames\.equals\(S->getString\(\)\)@maxIterMetadataNames == S->getString()@g; s@peelCountMetadataNames\.equals\(S->getString\(\)\)@peelCountMetadataNames == S->getString()@g; s@InstructionCost GenIntrinsicsTTIImpl::getInstructionCost\(const User \*U, ArrayRef<const Value \*> Operands,\n\s*TTI::TargetCostKind CostKind\)@InstructionCost GenIntrinsicsTTIImpl::getInstructionCost(const User *U, ArrayRef<const Value *> Operands,\n TTI::TargetCostKind CostKind) const@; s@InstructionCost GenIntrinsicsTTIImpl::internalCalculateCost\(const User \*U, ArrayRef<const Value \*> Operands,\n\s*TTI::TargetCostKind CostKind\)@InstructionCost GenIntrinsicsTTIImpl::internalCalculateCost(const User *U, ArrayRef<const Value *> Operands,\n TTI::TargetCostKind CostKind) const@; s@return \*LoopSize\.getValue\(\);@return LoopSize.getValue();@' IGC/Compiler/GenTTI.cpp || die
mapfile -d '' intrinsic_decl_files < <(grep -rlZ 'Intrinsic::getDeclaration(' IGC) || die
[[ ${#intrinsic_decl_files[@]} -eq 0 ]] || perl -0pi -e 's@llvm::cast<llvm::Function>\(llvm::Intrinsic::getOrInsertDeclaration\(([^;]+)\)\.getCallee\(\)\)@llvm::Intrinsic::getOrInsertDeclaration($1)@g; s@(?<!GenISA)Intrinsic::getDeclaration\(@Intrinsic::getOrInsertDeclaration(@g' "${intrinsic_decl_files[@]}" || die
perl -0pi -e 's@bool enablePromoteLoopUnrollwithAlloca\(\);@bool enablePromoteLoopUnrollwithAlloca() const;@' IGC/Compiler/GenTTI.h || die
perl -0pi -e 's@bool GenIntrinsicsTTIImpl::enablePromoteLoopUnrollwithAlloca\(\)@bool GenIntrinsicsTTIImpl::enablePromoteLoopUnrollwithAlloca() const@; s@const TargetTransformInfo TTI\(\*this\);@const TargetTransformInfo TTI(ctx->getModule()->getDataLayout());@g' IGC/Compiler/GenTTI.cpp || die
perl -0pi -e 's@getInstructionCost\(const llvm::User \*U, llvm::ArrayRef<const llvm::Value \*> Operands,\n\s*llvm::TargetTransformInfo::TargetCostKind CostKind\) \{@getInstructionCost(const llvm::User *U, llvm::ArrayRef<const llvm::Value *> Operands,\n llvm::TargetTransformInfo::TargetCostKind CostKind) const {@' IGC/WrapperLLVM/include/llvmWrapper/Analysis/TargetTransformInfo.h || die
perl -0pi -e 's@#include "Stats.hpp"@#include "Stats.hpp"\n#include "common/debug/Dump.hpp"@' IGC/common/LLVMUtils.h || die
perl -0pi -e 's@m_builder->getInt8PtrTy\(addressSpace\)@PointerType::get(m_builder->getInt8Ty(), addressSpace)@g' IGC/Compiler/LegalizationPass.cpp || die
perl -0pi -e 's@I.getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(&I)@g' IGC/Compiler/CISACodeGen/AtomicOptPass.cpp || die
perl -0pi -e 's@#include "Compiler/IGCPassSupport.h"@#include "Compiler/IGCPassSupport.h"\n#include "common/LLVMUtils.h"@; s@InstForBroadcast->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(InstForBroadcast)@' IGC/Compiler/CISACodeGen/BlockMemOpAddrScalarizationPass.cpp || die
perl -0pi -e 's@#include "GenISAIntrinsics/GenIntrinsicInst.h"@#include "GenISAIntrinsics/GenIntrinsicInst.h"\n#include "common/LLVMUtils.h"@; s@([A-Za-z0-9_>\]\)]+)->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction($1)@g; s@ CmpInst::Predicate Pred = CmpInst::Predicate::ICMP_EQ;\n@@; s@auto CmpPattern = m_Cmp\(Pred, m_Instruction\(Inst\), m_Instruction\(FinishInstr\)\);@auto CmpPattern = m_Cmp(m_Instruction(Inst), m_Instruction(FinishInstr));@' IGC/Compiler/CISACodeGen/AtomicOptPass.cpp || die
perl -0pi -e 's@m_Select\(m_ICmp\(Pred, m_Specific\(GlobalSize1.X\), m_Zero\(\)\), m_Value\(X\), m_Specific\(GlobalSize1.X\)\)@m_Select(m_ICmp(m_Specific(GlobalSize1.X), m_Zero()), m_Value(X), m_Specific(GlobalSize1.X))@; s@&&\n Pred == ICmpInst::ICMP_EQ\) \{@&&\n (Pred = cast<ICmpInst>(cast<SelectInst>(Inst)->getCondition())->getPredicate(), true) &&\n Pred == ICmpInst::ICMP_EQ) {@; s@I->isLeader\(\)@(*I)->isLeader()@g; s@I->getData\(\)@(*I)->getData()@g; s@member_begin\(I\)@member_begin(**I)@g' IGC/Compiler/CISACodeGen/AdvCodeMotion.cpp || die
perl -0pi -e 's@Instruction \*insertPoint = BB->getFirstNonPHIOrDbgOrLifetime\(\);@Instruction *insertPoint = &*BB->getFirstNonPHIOrDbgOrLifetime();@' IGC/Compiler/CISACodeGen/RematAddressArithmetic.cpp || die
perl -0pi -e 's@#include "common/debug/Dump.hpp"@#include "common/debug/Dump.hpp"\n#include "common/LLVMUtils.h"@; s@def->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(def)@' IGC/Compiler/CISACodeGen/CodeSinking.cpp || die
perl -0pi -e 's@computeKnownBits\(offset, \*dataLayout, 0 /\*current depth\*/, nullptr /\*AssumptionCache\*/, load, &DT\)@computeKnownBits(offset, *dataLayout, nullptr /*AssumptionCache*/, load, &DT, true, 0 /*current depth*/)@' IGC/Compiler/CISACodeGen/ConstantCoalescing.cpp || die
perl -0pi -e 's@Scaled64\(BFI.getEntryFreq\(\), 0\)@Scaled64(BFI.getEntryFreq().getFrequency(), 0)@g; s@setEntryFrequency\(BFI.getEntryFreq\(\), 0\)@setEntryFrequency(BFI.getEntryFreq().getFrequency(), 0)@g' IGC/Compiler/CISACodeGen/GenerateFrequencyData.cpp IGC/Compiler/CISACodeGen/EstimateFunctionSize.cpp || die
mapfile -d '' equals_files < <(grep -rlZ '\.equals(' IGC/Compiler/CISACodeGen) || die
[[ ${#equals_files[@]} -eq 0 ]] || perl -0pi -e 's@([A-Za-z0-9_:>\.-]+)\.equals\(([^()\n]+)\)@($1 == $2)@g' "${equals_files[@]}" || die
perl -0pi -e 's@#include "common/debug/Dump.hpp"@#include "common/debug/Dump.hpp"\n#include "common/LLVMUtils.h"@; s@string asmStr = IA->getAsmString\(\);@string asmStr = IA->getAsmString().str();@; s@inst->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(inst)@; s@nextInst = nextInst->getNextNonDebugInstruction\(\)@nextInst = IGC::getNextNonDbgInstruction(nextInst)@' IGC/Compiler/CISACodeGen/EmitVISAPass.cpp || die
perl -0pi -e 's@Scaled64 EntryFreq\(BFI.getEntryFreq\(\), 0\);@Scaled64 EntryFreq(BFI.getEntryFreq().getFrequency(), 0);@' IGC/Compiler/CISACodeGen/GenerateFrequencyData.cpp || die
perl -0pi -e 's@GV->getSection\(\)\.equals\("localSLM"\)@GV->getSection() == "localSLM"@; s@F.getName\(\)\.equals\("__stackoverflow_detection"\)@F.getName() == "__stackoverflow_detection"@; s@\s*if \(skipSCC\(SCC\)\)\n\s*return false;\n@@' IGC/Compiler/CISACodeGen/GenCodeGenModule.cpp || die
perl -0pi -e 's@SCEVExpander E\(\*SE, \*DL, "gep-simplification"\);@SCEVExpander E(*SE, "gep-simplification");@; s@template <typename OpTy> bool match\(OpTy \*V\) \{@template <typename OpTy> bool match(OpTy *V) const {@g' IGC/Compiler/CISACodeGen/GenIRLowering.cpp || die
perl -0pi -e 's@void findHoleTys\(const Type \*Ty, HoleMap &Tys\) \{@void findHoleTys(const Type *Ty, HoleMap &Tys) {\n if (!Ty)\n return;@; s@if \(!Root\) \{@if (!Root && StructTy->hasName() && !StructTy->getName().empty()) {@; s@\n\s*\{\n\s*// Inject explicit padding as needed\n\s*auto I = Aligns.find\(StructTy\);\n\s*if \(I != Aligns.end\(\)\) \{\n\s*OS.indent\(In \* 2\) << "injectPadding\(M, Tys, " << I->second << ", " << \(StructTy->isPacked\(\) \? "true" : "false"\)\n\s*<< "\);\\n";\n\s*\}\n\s*\}@\n@s' IGC/IRBuilderGenerator/main.cpp || die
perl -0pi -e 's@if \(\(theIdx == II\)\) \{@if ((llvm::ArrayRef<unsigned>(theIdx) == llvm::ArrayRef<unsigned>(II))) {@; s@constraints\[val\]\.equals\("P"\)@constraints[val] == "P"@' IGC/Compiler/CISACodeGen/EmitVISAPass.cpp || die
perl -0pi -e 's@DistanceMap\.grow\(mapCap1\);@DistanceMap.reserve(mapCap1);@; s@VirtRegInfo\.grow\(mapCap1\);@VirtRegInfo.reserve(mapCap1);@; s@PHIVarInfo\.grow\(mapCap2\);@PHIVarInfo.reserve(mapCap2);@; s@I0 = MF->getEntryBlock\(\)\.getFirstNonPHIOrDbg\(\);@I0 = &*MF->getEntryBlock().getFirstNonPHIOrDbg();@; s@I1 = MF->getEntryBlock\(\)\.getFirstNonPHIOrDbg\(\);@I1 = &*MF->getEntryBlock().getFirstNonPHIOrDbg();@' IGC/Compiler/CISACodeGen/LiveVars.cpp || die
perl -0pi -e 's@ValueIds\.grow\(mapCap1\);@ValueIds.reserve(mapCap1);@; s@BBLiveIns\.grow\(mapCap2\);@BBLiveIns.reserve(mapCap2);@; s@KillInsts\.grow\(mapCap1\);@KillInsts.reserve(mapCap1);@' IGC/Compiler/CISACodeGen/LivenessAnalysis.cpp || die
perl -0pi -e 's@#if LLVM_VERSION_MAJOR >= 16 bool changed = inlineCalls\(SCC\);\n#else\n bool changed = LegacyInlinerBase::runOnSCC\(SCC\);\n#endif@bool changed = inlineCalls(SCC);@' IGC/Compiler/CISACodeGen/GenCodeGenModule.cpp || die
perl -0pi -e 's@builder\.getInt8PtrTy\(addrspace\)@PointerType::get(builder.getInt8Ty(), addrspace)@g' IGC/Compiler/CISACodeGen/LSCCacheOptimizationPass.cpp || die
perl -0pi -e 's@#include "Probe/Assertion.h"@#include "Probe/Assertion.h"\n#include "common/LLVMUtils.h"@; s@BlockReadToOptimize->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(BlockReadToOptimize)@g; s@AS\.aliasesPointer\(MemLoc\.Ptr, MemLoc\.Size, MemLoc\.AATags, AST\.getAliasAnalysis\(\)\)@AS.aliasesMemoryLocation(MemLoc, AST.getAliasAnalysis())@g' IGC/Compiler/CISACodeGen/MemOpt.cpp || die
perl -0pi -e 's@#include "Compiler/CodeGenPublic.h"@#include "Compiler/CodeGenPublic.h"\n#include "common/LLVMUtils.h"@; s@BasePhi->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(BasePhi)@' IGC/Compiler/CISACodeGen/SinkCommonOffsetFromGEP.cpp || die
perl -0pi -e 's@compileUnit->getSourceLanguage\(\)@compileUnit->getSourceLanguage().getName()@g' IGC/DebugInfo/Utils.hpp || die
perl -0pi -e 's@if \(!Section->getKind\(\)\.isMetadata\(\)\)\n\s*SectionMap\[Section\]\.push_back\(SCU\);@SectionMap[Section].push_back(SCU);@' IGC/DebugInfo/DwarfDebug.cpp || die
perl -0pi -e 's@return Builder.insertDeclare\(([^;]+)\);@return Builder.insertDeclare($1).template dyn_cast<llvm::Instruction *>();@; s@\.template dyn_cast<llvm::Instruction \*>\(\)\)\.template dyn_cast<llvm::Instruction \*>\(\)@).template dyn_cast<llvm::Instruction *>()@g' IGC/Compiler/DebugInfo/Utils.cpp || die
perl -0pi -e 's@#include "llvm/Analysis/ValueTracking.h"@#include "llvm/Analysis/ValueTracking.h"\n#include "llvm/Analysis/WithCache.h"\n#include "llvm/Analysis/SimplifyQuery.h"@; s@haveNoCommonBitsSet\(LHS, RHS, F.getParent\(\)->getDataLayout\(\), nullptr, nullptr, Emu->DT\)@haveNoCommonBitsSet(WithCache<const Value *>(LHS), WithCache<const Value *>(RHS), SimplifyQuery(F.getParent()->getDataLayout(), Emu->DT))@' IGC/Compiler/CISACodeGen/PartialEmuI64OpsPass.cpp || die
perl -0pi -e 's@\A.*?(?=/\*========================== begin_copyright_notice)@@s; s@template <typename OpTy> bool match\(OpTy \*V\) \{@template <typename OpTy> bool match(OpTy *V) const {@g; s@ConstantExpr::getUIToFP\(@ConstantExpr::getCast(Instruction::UIToFP, @g; s@Scale = ConstantInt::get\(Scale->getType\(\), ScaleImm\);@Scale = cast<ConstantInt>(ConstantInt::get(Scale->getType(), ScaleImm));@g; s@m_FCmp\(Pred, m_Specific\(X\), m_Specific\(FMax\)\)@m_FCmp(m_Specific(X), m_Specific(FMax))@g; s@if \(!match\(Cond2, m_FCmp\(m_Specific\(X\), m_Specific\(FMax\)\)\)\)\n return std::make_tuple\(nullptr, 0, ISA_TYPE_F\);@if (!match(Cond2, m_FCmp(m_Specific(X), m_Specific(FMax))))\n return std::make_tuple(nullptr, 0, ISA_TYPE_F);\n Pred = cast<FCmpInst>(Cond2)->getPredicate();@; s@m_FCmp\(Pred, m_Specific\(X\), m_Specific\(FMin\)\)@m_FCmp(m_Specific(X), m_Specific(FMin))@g; s@m_FCmp\(Pred2, m_Specific\(X\), m_Specific\(X\)\)@m_FCmp(m_Specific(X), m_Specific(X))@g; s@if \(!match\(Cond, m_Or\(m_FCmp\(m_Specific\(X\), m_Specific\(FMin\)\), m_FCmp\(m_Specific\(X\), m_Specific\(X\)\)\)\)\) \{@if (!match(Cond, m_Or(m_FCmp(m_Specific(X), m_Specific(FMin)), m_FCmp(m_Specific(X), m_Specific(X))))) {\n auto *Or0 = cast<BinaryOperator>(Cond);\n Pred = cast<FCmpInst>(Or0->getOperand(0))->getPredicate();\n Pred2 = cast<FCmpInst>(Or0->getOperand(1))->getPredicate();@; s@if \(!match\(Cond, m_Or\(m_FCmp\(m_Specific\(X\), m_Specific\(FMin\)\), m_Zero\(\)\)\)\) \{@if (!match(Cond, m_Or(m_FCmp(m_Specific(X), m_Specific(FMin)), m_Zero()))) {@; s@Pred2 = FCmpInst::FCMP_UNE;@Pred = cast<FCmpInst>(cast<BinaryOperator>(Cond)->getOperand(0))->getPredicate();\n Pred2 = FCmpInst::FCMP_UNE;@; s@m_ICmp\(IPred, m_Value\(LHS\), m_Value\(RHS\)\)@m_ICmp(m_Value(LHS), m_Value(RHS))@g; s@if \(!match\(Cond, m_ICmp\(m_Value\(LHS\), m_Value\(RHS\)\)\)\)\n return false;@if (!match(Cond, m_ICmp(m_Value(LHS), m_Value(RHS))))\n return false;\n IPred = cast<ICmpInst>(Cond)->getPredicate();@' IGC/Compiler/CISACodeGen/PatternMatchPass.cpp || die
perl -0pi -e 's@CastInst::isEliminableCastPair\(firstOp, secondOp, SrcTy, MidTy, DstTy, SrcIntPtrTy, MidIntPtrTy, DstIntPtrTy\)@CastInst::isEliminableCastPair(firstOp, secondOp, SrcTy, MidTy, DstTy, &DL)@' IGC/Compiler/CISACodeGen/RayTracingShaderLowering.cpp || die
perl -0pi -e 's@IRB.getInt8PtrTy\(([^)]+)\)@PointerType::get(IRB.getInt8Ty(), $1)@g; s@RTB.getInt8PtrTy\(([^)]+)\)@PointerType::get(RTB.getInt8Ty(), $1)@g' IGC/Compiler/CISACodeGen/RayTracingStatefulPass.cpp || die
perl -0pi -e 's@m_DeadValueNumUses\.grow\(mapCap\);@m_DeadValueNumUses.reserve(mapCap);@' IGC/Compiler/CISACodeGen/RegisterEstimator.cpp || die
perl -0pi -e 's@computeKnownBits\(V, \*DL, 0, AC, CxtI\)@computeKnownBits(V, *DL, AC, CxtI, nullptr, true, 0)@; s@llvm::Type::getInt8PtrTy\(M.getContext\(\)\)@llvm::PointerType::get(llvm::Type::getInt8Ty(M.getContext()), 0)@g' IGC/Compiler/CISACodeGen/helper.cpp || die
perl -0pi -e 's@#include "Compiler/CISACodeGen/ShaderCodeGen.hpp"@#include "Compiler/CISACodeGen/ShaderCodeGen.hpp"\n#include "common/LLVMUtils.h"@; s@CreatedInst->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(CreatedInst)@g; s@SearchPoint->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(SearchPoint)@g; s@MaxPoint->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(MaxPoint)@g; s@InsertPoint->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(InsertPoint)@g; s@InsertPoint->getPrevNonDebugInstruction\(\)@IGC::getPrevNonDbgInstruction(InsertPoint)@g; s@getMaxPoint\(InstOperands\)->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(getMaxPoint(InstOperands))@g' IGC/Compiler/CISACodeGen/IGCVectorizer.cpp || die
perl -0pi -e 's@} // namespace IGC@inline llvm::Instruction *getPrevNonDbgInstruction(llvm::Instruction *I) {\n if (!I)\n return nullptr;\n auto It = I->getIterator();\n auto B = I->getParent()->begin();\n while (It != B) {\n --It;\n if (!It->isDebugOrPseudoInst())\n return &*It;\n }\n return nullptr;\n}\n\n} // namespace IGC@' IGC/common/LLVMUtils.h || die
perl -0pi -e 's@IRB->getInt8PtrTy\(AS\)@PointerType::get(IRB->getInt8Ty(), AS)@g' IGC/Compiler/Legalizer/InstPromoter.cpp || die
perl -0pi -e 's@ConstantExpr::getSExt\(C, PromotedTy\)@ConstantExpr::getCast(Instruction::SExt, C, PromotedTy)@g; s@ConstantExpr::getZExt\(C, PromotedTy\)@ConstantExpr::getCast(Instruction::ZExt, C, PromotedTy)@g' IGC/Compiler/Legalizer/TypeLegalizer.cpp || die
perl -0pi -e 's@Type::getIntNPtrTy\(I.getContext\(\), promoteToInt, I.getType\(\)->getPointerAddressSpace\(\)\)@PointerType::get(Type::getIntNTy(I.getContext(), promoteToInt), I.getType()->getPointerAddressSpace())@g; s@Type::getIntNPtrTy\(I.getContext\(\), zext_size, Load->getPointerAddressSpace\(\)\)@PointerType::get(Type::getIntNTy(I.getContext(), zext_size), Load->getPointerAddressSpace())@g' IGC/Compiler/Legalizer/PeepholeTypeLegalizer.cpp || die
perl -0pi -e 's@#include "Compiler/MetaDataUtilsWrapper.h"@#include "Compiler/MetaDataUtilsWrapper.h"\n#include "common/LLVMUtils.h"\n\nnamespace IGC {\nstatic llvm::Instruction *getNextNonDbgInstructionLocal(llvm::Instruction *I) { return getNextNonDbgInstruction(I); }\nstatic llvm::Instruction *getPrevNonDbgInstructionLocal(llvm::Instruction *I) { return getPrevNonDbgInstruction(I); }\n}\n@; s@ToMove.getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstructionLocal(&ToMove)@g; s@I->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstructionLocal(I)@g; s@Group.getHead\(\)->getPrevNonDebugInstruction\(\)@IGC::getPrevNonDbgInstructionLocal(Group.getHead())@g; s@I->getPrevNonDebugInstruction\(\)@IGC::getPrevNonDbgInstructionLocal(I)@g' IGC/Compiler/CISACodeGen/FPRoundingModeCoalescing.cpp || die
perl -0pi -e 's@return TargetTransformInfo\(GTTI\);@return TargetTransformInfo(std::make_unique<GenIntrinsicsTTIImpl>(std::move(GTTI)));@g; s@return TargetTransformInfo\(std::move\(GTTI\)\);@return TargetTransformInfo(std::make_unique<GenIntrinsicsTTIImpl>(std::move(GTTI)));@g; s@TargetLibraryInfoImpl TLI;@TargetLibraryInfoImpl TLI(Triple(ctx.getModule()->getTargetTriple()));@; s@TargetLibraryInfoImpl TLI;@TargetLibraryInfoImpl TLI(Triple(pContext->getModule()->getTargetTriple()));@; s@TargetLibraryInfoWrapperPass\(TLI\)@TargetLibraryInfoWrapperPass(std::move(TLI))@g; s@\s*mpm.add\(llvm::createLoopRotatePass\(LOOP_ROTATION_HEADER_INST_THRESHOLD\)\);\n@@g; s@\s*mpm.add\(llvm::createLoopRotatePass\(\)\);\n@@g' IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp || die
perl -0pi -e 's@FN\.equals\("_Z25__spirv_BuiltInSubgroupIdv"\)@FN == "_Z25__spirv_BuiltInSubgroupIdv"@g; s@FN\.equals\("__builtin_spirv_BuiltInSubgroupId"\)@FN == "__builtin_spirv_BuiltInSubgroupId"@g; s@FN\.equals\("_Z16get_sub_group_idv"\)@FN == "_Z16get_sub_group_idv"@g' IGC/Compiler/Optimizer/CodeAssumption.cpp || die
perl -0pi -e 's@if \(!FN == "_Z25__spirv_BuiltInSubgroupIdv" && !FN == "__builtin_spirv_BuiltInSubgroupId" &&\n !FN == "_Z16get_sub_group_idv"\)@if (FN != "_Z25__spirv_BuiltInSubgroupIdv" && FN != "__builtin_spirv_BuiltInSubgroupId" &&\n FN != "_Z16get_sub_group_idv")@' IGC/Compiler/Optimizer/CodeAssumption.cpp || die
perl -0pi -e 's@FuncName\.equals\("intel_is_traversal_done"\)@FuncName == "intel_is_traversal_done"@g; s@FuncName\.equals\("intel_get_hit_front_face"\)@FuncName == "intel_get_hit_front_face"@g; s@FuncName\.equals\("intel_has_committed_hit"\)@FuncName == "intel_has_committed_hit"@g' IGC/Compiler/Optimizer/BuiltInFuncImport.cpp || die
perl -0pi -e 's@#include "Probe/Assertion.h"@#include "Probe/Assertion.h"\n#include "common/LLVMUtils.h"@; s@sampleInsts\[i\]->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(sampleInsts[i])@g; s@texelSample->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(texelSample)@g; s@texel_x->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(texel_x)@g; s@texel_y->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(texel_y)@g' IGC/Compiler/Optimizer/GatingSimilarSamples.cpp || die
perl -0pi -e 's@sampleInst->getNextNonDebugInstruction\(\)@IGC::getNextNonDbgInstruction(sampleInst)@g; s@inst = inst->getNextNonDebugInstruction\(\)@inst = IGC::getNextNonDbgInstruction(inst)@g' IGC/Compiler/Optimizer/GatingSimilarSamples.cpp || die
perl -0pi -e 's@llvm::StringRef\(M->getTargetTriple\(\)\)\.startswith\(@M->getTargetTriple().getTriple().starts_with(@g; s@llvm::StringRef\(M->getTargetTriple\(\)\)\.starts_with\(@M->getTargetTriple().getTriple().starts_with(@g; s@IRB\.getInt8PtrTy\(([^)]+)\)@PointerType::get(IRB.getInt8Ty(), $1)@g' IGC/Compiler/Optimizer/OCLBIUtils.cpp || die
perl -0pi -e 's@isVolatile, TBAATag, TBAAStructTag, ScopeTag, NoAliasTag\);@isVolatile, llvm::AAMDNodes(TBAATag, TBAAStructTag, ScopeTag, NoAliasTag, nullptr));@g; s@isVolatile, TBAATag, ScopeTag, NoAliasTag\);@isVolatile, llvm::AAMDNodes(TBAATag, nullptr, ScopeTag, NoAliasTag, nullptr));@g' IGC/WrapperLLVM/include/llvmWrapper/IR/IRBuilder.h || die
perl -0pi -e 's@name\.equals\(([^)]+)\)@name == $1@g' IGC/Compiler/Optimizer/PreCompiledFuncImport.cpp || die
perl -0pi -e 's@Type::getInt32PtrTy\(inst.getContext\(\)\)@PointerType::get(Type::getInt32Ty(inst.getContext()), 0)@g; s@fName\.equals\(finfo.FuncName\)@fName == finfo.FuncName@g' IGC/Compiler/Optimizer/PreCompiledFuncImport.cpp || die
perl -0pi -e 's@ValueTracking\.h"@ValueTracking.h"\n#include "llvm/Analysis/WithCache.h"\n#include "llvm/Analysis/SimplifyQuery.h"@; s@haveNoCommonBitsSet\(I->getOperand\(0\), I->getOperand\(1\), I->getFunction\(\)->getParent\(\)->getDataLayout\(\),\s*nullptr, I, DT\)@haveNoCommonBitsSet(WithCache<const Value *>(I->getOperand(0)), WithCache<const Value *>(I->getOperand(1)), SimplifyQuery(I->getFunction()->getParent()->getDataLayout(), DT))@s' IGC/Compiler/Optimizer/IntDivRemIncrementReduction.cpp || die
perl -0pi -e 's@Type::getInt8PtrTy\(base->getContext\(\), ADDRESS_SPACE_PRIVATE\)@PointerType::get(Type::getInt8Ty(base->getContext()), ADDRESS_SPACE_PRIVATE)@g' IGC/Compiler/Optimizer/OpenCLPasses/AggregateArguments/AggregateArguments.cpp || die
perl -0pi -e 's@\.endswith\(@.ends_with(@g' IGC/Compiler/Optimizer/OpenCLPasses/AlignmentAnalysis/AlignmentAnalysis.cpp || die
perl -0pi -e 's@#if LLVM_VERSION_MAJOR < 20\n // Workaround for LLVM 16 demangler not supporting DF16b mangling \(even though LLVM 16 supports bfloat type\)\n // Support was implemented in LLVM 20\n // \(https://github.com/llvm/llvm-project/commit/a100fd8cbd3dad3846a6212d97279ca23db85c75\)\n std::string MangledNameForDemangling = MangledName.str\(\);@std::string MangledNameForDemangling = MangledName.str();\n#if LLVM_VERSION_MAJOR < 20\n // Workaround for LLVM 16 demangler not supporting DF16b mangling (even though LLVM 16 supports bfloat type)\n // Support was implemented in LLVM 20\n // (https://github.com/llvm/llvm-project/commit/a100fd8cbd3dad3846a6212d97279ca23db85c75)@; s@DemangledNameRef\.equals\(funcName\)@DemangledNameRef == funcName@g' IGC/Compiler/Optimizer/OpenCLPasses/BfloatBuiltins/BfloatBuiltinsResolution.cpp || die
perl -0pi -e 's@std::make_unique<SCEVExpander>\(\*SE, \*DL, "decompose-2d-block-funcs-with-hoisting"\)@std::make_unique<SCEVExpander>(*SE, "decompose-2d-block-funcs-with-hoisting")@g' IGC/Compiler/Optimizer/OpenCLPasses/Decompose2DBlockFuncsWithHoisting/Decompose2DBlockFuncsWithHoisting.cpp || die
mapfile -d '' extensionfunc_equals_files < <(grep -rlZ '\.equals(' IGC/Compiler/Optimizer/OpenCLPasses/ExtensionFuncs) || die
[[ ${#extensionfunc_equals_files[@]} -eq 0 ]] || perl -0pi -e 's@([A-Za-z0-9_:>\.-]+)\.equals\(([^()\n]+)\)@($1 == $2)@g' "${extensionfunc_equals_files[@]}" || die
perl -0pi -e 's@SCEVExpander\(SE, DL, "gep-loop-strength-reduction"\)@SCEVExpander(SE, "gep-loop-strength-reduction")@g' IGC/Compiler/Optimizer/OpenCLPasses/GEPLoopStrengthReduction/GEPLoopStrengthReduction.cpp || die
perl -0pi -e 's@type->getOffsetInBits\(\), dwarfTag, type->getFlags\(\), type->getExtraData\(\)@type->getOffsetInBits(), dwarfTag, std::nullopt, type->getFlags(), type->getExtraData()@g' IGC/Compiler/Optimizer/OpenCLPasses/GenericAddressResolution/GASRetValuePropagator.cpp || die
mapfile -d '' gas_equals_files < <(grep -rlZ '\.equals(' IGC/Compiler/Optimizer/OpenCLPasses/GenericAddressResolution) || die
[[ ${#gas_equals_files[@]} -eq 0 ]] || perl -0pi -e 's@([A-Za-z0-9_:>\.-]+)\.equals\(([^()\n]+)\)@($1 == $2)@g' "${gas_equals_files[@]}" || die
mapfile -d '' openclpasses_equals_files < <(grep -rlZ '\.equals(' IGC/Compiler/Optimizer/OpenCLPasses) || die
[[ ${#openclpasses_equals_files[@]} -eq 0 ]] || perl -0pi -e 's@([-A-Za-z0-9_:>\.()]+)\.equals\(([^()\n]+)\)@($1 == $2)@g' "${openclpasses_equals_files[@]}" || die
perl -0pi -e 's@Type::getInt8PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt8Ty($1), $2)@g; s@DataLayout Layout\(M\);@const DataLayout &Layout = M->getDataLayout();@g; s@ConstantInt \*newOffsetConstant = ConstantInt::get\(([^;]+)\);@ConstantInt *newOffsetConstant = cast<ConstantInt>(ConstantInt::get($1));@g; s@\{\n TinyPtrVector<DbgDeclareInst \*> DDIs = FindDbgDeclareUses\(&I\);\n\n for \(DbgDeclareInst \*ddi : DDIs\) \{.*?\n \}\n \}@{\n }@s' IGC/Compiler/Optimizer/OpenCLPasses/JointMatrixFuncsResolutionPass/JointMatrixFuncsResolutionPass.cpp || die
perl -0pi -e 's@\.endswith\(@.ends_with(@g' IGC/Compiler/Optimizer/OpenCLPasses/LSCFuncs/LSCFuncsResolution.cpp || die
perl -0pi -e 's@Type::getInt32PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt32Ty($1), $2)@g' IGC/Compiler/Optimizer/OpenCLPasses/NamedBarriers/NamedBarriersResolution.cpp || die
perl -0pi -e 's@builder\.getInt8PtrTy\(([^)]+)\)@PointerType::get(builder.getInt8Ty(), $1)@g; s@Type::getInt32PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt32Ty($1), $2)@g; s@PointerType::getInt32PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt32Ty($1), $2)@g' IGC/Compiler/Optimizer/OpenCLPasses/ManageableBarriers/ManageableBarriersResolution.cpp || die
perl -0pi -e 's@Type::getInt32PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt32Ty($1), $2)@g; s@Type::getInt64PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt64Ty($1), $2)@g' IGC/Compiler/Optimizer/OpenCLPasses/OpenCLPrintf/OpenCLPrintfResolution.cpp || die
perl -0pi -e 's@#include "Compiler/CISACodeGen/ShaderCodeGen.hpp"@#include "Compiler/CISACodeGen/ShaderCodeGen.hpp"\n#include "common/LLVMUtils.h"@; s@auto DbgDcls = llvm::FindDbgDeclareUses\(pAI\);\n for \(auto DbgDcl : DbgDcls\) \{.*?\n \}@//@s; s@pointInstr = pointInstr->getNextNonDebugInstruction\(\);@pointInstr = IGC::getNextNonDbgInstruction(pointInstr);@g; s@pointInstr = inst->getNextNonDebugInstruction\(\);@pointInstr = IGC::getNextNonDbgInstruction(inst);@g; s@auto DbgDcls = llvm::FindDbgDeclareUses\(pAI\);\n for \(auto DbgDcl : DbgDcls\) \{.*?\n \}@//@s' IGC/Compiler/Optimizer/OpenCLPasses/PrivateMemory/PrivateMemoryResolution.cpp || die
perl -0pi -e 's@Type::getInt8PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt8Ty($1), $2)@g' IGC/Compiler/Optimizer/OpenCLPasses/ReplaceUnsupportedIntrinsics/ReplaceUnsupportedIntrinsics.cpp || die
perl -0pi -e 's@PointerPointerType::get\(@PointerType::get(@g' IGC/Compiler/Optimizer/OpenCLPasses/ManageableBarriers/ManageableBarriersResolution.cpp || die
perl -0pi -e 's@if \(!match\(&CI, m_Intrinsic<Intrinsic::assume>\(m_ICmp\(Pred, m_Instruction\(I\), m_ConstantInt\(Const\)\)\)\)\)@if (!match(&CI, m_Intrinsic<Intrinsic::assume>(m_ICmp(m_Instruction(I), m_ConstantInt(Const)))))\n return;\n\n Pred = cast<ICmpInst>(CI.getArgOperand(0))->getPredicate();@' IGC/Compiler/Optimizer/OpenCLPasses/ProcessBICodeAssumption/ProcessBICodeAssumption.cpp || die
perl -0pi -e 's@Type::getInt8PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt8Ty($1), $2)@g; s@Type::getInt16PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt16Ty($1), $2)@g; s@Type::getInt32PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt32Ty($1), $2)@g; s@Type::getInt64PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt64Ty($1), $2)@g' IGC/Compiler/Optimizer/OpenCLPasses/SubGroupFuncs/SubGroupFuncsResolution.cpp || die
perl -0pi -e 's@#include "Probe/Assertion.h"@#include "Probe/Assertion.h"\n#include "common/LLVMUtils.h"@; s@builder\.SetInsertPoint\(CI->getNextNonDebugInstruction\(\)\);@builder.SetInsertPoint(getNextNonDbgInstruction(CI));@' IGC/Compiler/Optimizer/OpenCLPasses/TransformUnmaskedFunctionsPass/TransformUnmaskedFunctionsPass.cpp || die
perl -0pi -e 's@Type::getInt16PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt16Ty($1), $2)@g' IGC/Compiler/Optimizer/OpenCLPasses/WIFuncs/WIFuncResolution.cpp || die
perl -0pi -e 's@ext\.equals\(([^)]+)\)@ext == $1@g' IGC/OCLFE/igd_fcl_mcl/source/clang_tb.cpp || die
perl -0pi -e 's@->getType\(\)->getBitWidth\(\)@->getType()->getIntegerBitWidth()@g' IGC/common/IGCConstantFolder.cpp || die
perl -0pi -e 's@\[\]\(const llvm::DiagnosticInfo &DI, void \*Ptr\)@[](const llvm::DiagnosticInfo *DI, void *Ptr)@; s@DI\.getSeverity\(\)@DI->getSeverity()@g; s@DI\.print\(DP\)@DI->print(DP)@g; s@->getValue\(\)@->second@g; s@llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)\.starts_with\(@oclContext.getModule()->getTargetTriple().getTriple().starts_with(@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@C\.setDiagnosticHandlerCallBack\(ComputeFatalErrorHandler\)@C.setDiagnosticHandlerCallBack([](const llvm::DiagnosticInfo *DI, void *Ctx) { ComputeFatalErrorHandler(*DI, Ctx); })@' IGC/common/debug/Debug.cpp || die
perl -0pi -e 's@llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)\.starts_with\(@oclContext.getModule()->getTargetTriple().getTriple().starts_with(@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@Type::getInt1PtrTy\(([^)]+)\)@PointerType::get(Type::getInt1Ty($1), 0)@g' IGC/common/MDFrameWork.cpp || die
perl -0pi -e 's@F->getName\(\)\.equals\("printf"\)@F->getName() == "printf"@g; s@sline\.equals\(([^)]+)\)@sline == $1@g' IGC/AdaptorCommon/ProcessFuncAttributes.cpp || die
perl -0pi -e 's@if \(llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)\.starts_with\("spir"\)\)@if (oclContext.getModule()->getTargetTriple().getTriple().starts_with("spir"))@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@PointerType::get\(Type::getInt1Ty\(module->getContext\(\), 0\)\)@PointerType::get(module->getContext(), 0)@g' IGC/common/MDFrameWork.cpp || die
perl -0pi -e 's@llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)\.starts_with\("spir"\)@oclContext.getModule()->getTargetTriple().getTriple().starts_with("spir")@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@getInt8PtrTy\(ADDRESS_SPACE_CONSTANT\)@PointerType::get(getInt8Ty(), ADDRESS_SPACE_CONSTANT)@g; s@Type::getInt8PtrTy\(M.getContext\(\)\)@PointerType::get(Type::getInt8Ty(M.getContext()), 0)@g; s@Type::getInt64PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt64Ty($1), $2)@g; s@Type::getInt32PtrTy\(([^,]+), ([^)]+)\)@PointerType::get(Type::getInt32Ty($1), $2)@g' IGC/AdaptorCommon/RayTracing/RTBuilder.cpp || die
perl -0pi -e 's@builder\.getInt8PtrTy\(([^)]+)\)@PointerType::get(builder.getInt8Ty(), $1)@g' IGC/AdaptorCommon/RayTracing/TraceRayInlineLoweringPass.cpp || die
perl -0pi -e 's@if \(llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)\.starts_with\("spir"\)\)@if (oclContext.getModule()->getTargetTriple().getTriple().starts_with("spir"))@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@if \(llvm::StringRef\(oclContext\.getModule\(\)->getTargetTriple\(\)\)\.starts_with\("spir"\)\) \{@if (oclContext.getModule()->getTargetTriple().getTriple().starts_with("spir")) {@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@llvm::StringRef\(oclContext->getModule\(\)->getTargetTriple\(\)\)\.starts_with\("spir"\)@oclContext->getModule()->getTargetTriple().getTriple().starts_with("spir")@g; s@llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)\.starts_with\("spir"\)@oclContext.getModule()->getTargetTriple().getTriple().starts_with("spir")@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@\Qif (llvm::StringRef(oclContext.getModule()->getTargetTriple()).starts_with("spir")) {\E@if (oclContext.getModule()->getTargetTriple().getTriple().starts_with("spir")) {@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
perl -0pi -e 's@Builder\.getInt8PtrTy\(([^)]+)\)@PointerType::get(Builder.getInt8Ty(), $1)@g' IGC/AdaptorCommon/LivenessUtils/MergeAllocas.cpp || die
perl -0pi -e 's@llvm::StringRef\(oclContext.getModule\(\)->getTargetTriple\(\)\)@oclContext.getModule()->getTargetTriple().getTriple()@g' IGC/AdaptorOCL/dllInterfaceCompute.cpp || die
python - <<'PY' || die
from pathlib import Path
Path('IGC/DebugInfo/CMakeLists.txt').write_text('''include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
set(IGC_BUILD__SRC__DebugInfo
"${CMAKE_CURRENT_SOURCE_DIR}/DIE.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DwarfCompileUnit.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DwarfDebug.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DwarfExpression.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/LexicalScopes.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StreamEmitter.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISADebugDecoder.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISADebugEmitter.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISADebugInfo.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISAModule.cpp")
set(IGC_BUILD__HDR__DebugInfo
"${CMAKE_CURRENT_SOURCE_DIR}/DIE.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DwarfCompileUnit.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DwarfDebug.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/DwarfExpression.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/EmitterOpts.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/LexicalScopes.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StreamEmitter.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Utils.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISADebugDecoder.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISADebugEmitter.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISADebugInfo.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISAIDebugEmitter.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/VISAModule.hpp")
add_library(GenXDebugInfo STATIC
${IGC_BUILD__SRC__DebugInfo}
${IGC_BUILD__HDR__DebugInfo})
set_target_properties(GenXDebugInfo PROPERTIES FOLDER "Libraries")
''')
PY
perl -0pi -e 's@unsigned getRelocType\(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsPCRel\) const \{@unsigned getRelocType(const MCFixup &Fixup, const MCValue &Target, bool IsPCRel) const override {@; s@VISAAsmBackend\(StringRef targetTriple\) : MCAsmBackend\(support::endianness::little\), m_targetTriple\(targetTriple\) \{@VISAAsmBackend(StringRef targetTriple, uint8_t osABI, uint16_t eMachine) : MCAsmBackend(llvm::endianness::little), m_targetTriple(targetTriple), m_osABI(osABI), m_eMachine(eMachine) {@; s@unsigned getNumFixupKinds\(\) const override \{ return 0; \}@std::optional<MCFixupKind> getFixupKind(StringRef) const override { return std::nullopt; }@; s@void applyFixup\(const MCAssembler &Asm, const MCFixup &fixup, const MCValue &Target, MutableArrayRef<char> Data,\s*uint64_t value, bool IsResolved, const MCSubtargetInfo \*STI\) const override \{@void applyFixup(const MCFragment &, const MCFixup &fixup, const MCValue &Target, uint8_t *Data, uint64_t value, bool IsResolved) override {@s; s@bool mayNeedRelaxation\(const MCInst &inst, const MCSubtargetInfo &STI\) const override \{@bool mayNeedRelaxation(unsigned Opcode, ArrayRef<MCOperand> Operands, const MCSubtargetInfo &STI) const override {@; s@bool fixupNeedsRelaxation\(const MCFixup &fixup, uint64_t value, const MCRelaxableFragment \*pDF,\s*const MCAsmLayout &layout\) const override \{@bool fixupNeedsRelaxation(const MCFixup &fixup, uint64_t value) const override {@s; s@std::unique_ptr<MCObjectTargetWriter> createObjectTargetWriter\(\) const override \{\s*// TODO: implement this\s*IGC_ASSERT_UNREACHABLE\(\); // Unimplemented\s*\}@std::unique_ptr<MCObjectTargetWriter> createObjectTargetWriter() const override { return std::make_unique<VISAELFObjectWriter>(m_osABI, m_eMachine); }@s; s@class VISAAsmBackend : public MCAsmBackend \{\s*StringRef m_targetTriple;@class VISAAsmBackend : public MCAsmBackend {\n StringRef m_targetTriple;\n uint8_t m_osABI;\n uint16_t m_eMachine;@s; s@virtual void encodeInstruction\(const MCInst &inst, raw_ostream &os, SmallVectorImpl<MCFixup> &fixups,\s*const MCSubtargetInfo &m\) const \{@void encodeInstruction(const MCInst &inst, SmallVectorImpl<char> &CB, SmallVectorImpl<MCFixup> &fixups,\n const MCSubtargetInfo &m) const override {@s; s@std::unique_ptr<MCAsmBackend> pAsmBackend = IGCLLVM::make_unique<VISAAsmBackend>\(GetTargetTriple\(\)\);@std::unique_ptr<MCAsmBackend> pAsmBackend = IGCLLVM::make_unique<VISAAsmBackend>(GetTargetTriple(), osABI, eMachine);@; s@std::unique_ptr<MCELFObjectTargetWriter> pTargetObjectWriter =\s*IGCLLVM::make_unique<VISAELFObjectWriter>\(osABI, eMachine\);\s*std::unique_ptr<MCObjectWriter> pObjectWriter =\s*createELFObjectWriter\(std::move\(pTargetObjectWriter\), outStream, true\);@std::unique_ptr<MCObjectWriter> pObjectWriter = pAsmBackend->createObjectWriter(outStream);@s; s@bool isRelaxAll = false;\s*bool isNoExecStack = false;\s*m_pMCStreamer = createELFStreamer\(\*m_pContext, std::move\(pAsmBackend\), std::move\(pObjectWriter\),\s*std::move\(pCodeEmitter\), isRelaxAll\);@bool isNoExecStack = false;\n m_pMCStreamer = createELFStreamer(*m_pContext, std::move(pAsmBackend), std::move(pObjectWriter),\n std::move(pCodeEmitter));@s' IGC/DebugInfo/StreamEmitter.cpp || die
mapfile -d '' startswith_files < <(grep -rlZ '\.startswith(' IGC) || die
[[ ${#startswith_files[@]} -eq 0 ]] || perl -0pi -e 's/\.startswith\(/.starts_with(/g' "${startswith_files[@]}" || die
perl -0pi -e 's@llvm::Attribute::NoCapture@llvm::Attribute::Captures@g' IGC/AdaptorCommon/RayTracing/NewTraceRayInlineLoweringPass.cpp IGC/GenISAIntrinsics/generator/Intrinsic_generator.py || die
perl -0pi -e 's@\bNoCapture\b@Captures@g' IGC/GenISAIntrinsics/generator/Intrinsic_definition_objects.py IGC/GenISAIntrinsics/generator/input/Intrinsic_definitions.yml || die
perl -0pi -e 's@-fblocks @-fblocks -Wno-error=incompatible-pointer-types -Wno-error=incompatible-function-pointer-types @' IGC/BiFModule/cmake/BiFBuildBitcode.cmake || die
cmake_src_prepare
}
src_configure() {
# Get LLVM version
local llvm_version="$(best_version -d llvm-core/llvm:${LLVM_SLOT})"
local llvm_version="${llvm_version%%-r*}"
# See https://github.com/intel/intel-graphics-compiler/issues/212
append-ldflags -Wl,-z,undefs
# See bug #938519 and https://github.com/intel/intel-graphics-compiler/issues/362
filter-lto
# See bug #893370 and https://github.com/intel/intel-graphics-compiler/issues/282
append-flags -U_GLIBCXX_ASSERTIONS
# See https://bugs.gentoo.org/718824
! use debug && append-cppflags -DNDEBUG
local mycmakeargs=(
-DBUILD_SHARED_LIBS="OFF"
-DCCLANG_FROM_SYSTEM="ON"
-DCMAKE_LIBRARY_PATH="$(get_llvm_prefix)/$(get_libdir)"
-DIGC_BUILD__VC_ENABLED="$(usex vc)"
-DIGC_OPTION__ARCHITECTURE_TARGET="Linux64"
-DIGC_OPTION__CLANG_MODE="Prebuilds"
-DIGC_OPTION__ENABLE_BF16_BIF="ON"
-DIGC_OPTION__LINK_KHRONOS_SPIRV_TRANSLATOR="ON"
-DIGC_OPTION__LLD_MODE="Prebuilds"
-DIGC_OPTION__LLDELF_H_DIR="$(get_llvm_prefix)/include/lld/Common"
-DIGC_OPTION__LLVM_MODE="Prebuilds"
-DIGC_OPTION__LLVM_PREFERRED_VERSION="${llvm_version##*-}"
-DIGC_OPTION__OPENCL_HEADER_PATH="/usr/lib/clang/${LLVM_SLOT}/include/opencl-c.h"
-DIGC_OPTION__SPIRV_TOOLS_MODE="Prebuilds"
-DIGC_OPTION__SPIRV_TRANSLATOR_MODE="Prebuilds"
-DIGC_OPTION__USE_PREINSTALLED_SPIRV_HEADERS="ON"
$(usex vc '-DIGC_OPTION__VC_INTRINSICS_MODE=Prebuilds' '')
-DPYTHON_EXECUTABLE="${PYTHON}"
-DSPIRVLLVMTranslator_INCLUDE_DIR="${EPREFIX}/usr/lib/llvm/${LLVM_SLOT}/include/LLVMSPIRVLib"
-Wno-dev
)
cmake_src_configure
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="person" proxied="yes">
<email>gentoo@taujhe.de</email>
<name>Jan Henke</name>
</maintainer>
<maintainer type="project" proxied="proxy">
<email>proxy-maint@gentoo.org</email>
<name>Proxy Maintainers</name>
</maintainer>
<maintainer type="person">
<email>conikost@gentoo.org</email>
<name>Conrad Kostecki</name>
</maintainer>
<use>
<flag name="vc">Enable VectorCompiler for a better performance.</flag>
</use>
<upstream>
<remote-id type="github">intel/intel-graphics-compiler</remote-id>
</upstream>
</pkgmetadata>