diff --git a/dev-util/intel-graphics-compiler/Manifest b/dev-util/intel-graphics-compiler/Manifest new file mode 100644 index 0000000..e78a3d0 --- /dev/null +++ b/dev-util/intel-graphics-compiler/Manifest @@ -0,0 +1 @@ +DIST intel-graphics-compiler-2.32.7.tar.gz 12231440 BLAKE2B fb5f192467b1d6ff1aa739ef4333f2637c4c05a1f9a11a2995ae32d5ae63de60d452da4c06c0959abc9567fc200f8d48ddabdaa1844c60c648b46962d7ce7ebf SHA512 39119806aab2307714a0264fe09c714aca90dae24c5a3682ec9a498dc90a47eb9791b9e850f573505f25fece52f35b2e91afae5bc3e595312281febe8356557b diff --git a/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-1.0.8365-disable-git.patch b/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-1.0.8365-disable-git.patch new file mode 100644 index 0000000..4a9a898 --- /dev/null +++ b/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-1.0.8365-disable-git.patch @@ -0,0 +1,37 @@ +From d0f801a178755504c2f8956841823b2aa6a124c4 Mon Sep 17 00:00:00 2001 +From: Conrad Kostecki +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 +--- + 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 + diff --git a/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-2.30.1-Werror.patch b/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-2.30.1-Werror.patch new file mode 100644 index 0000000..85e309f --- /dev/null +++ b/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-2.30.1-Werror.patch @@ -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) diff --git a/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-2.32.7-llvm22.patch b/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-2.32.7-llvm22.patch new file mode 100644 index 0000000..6f14057 --- /dev/null +++ b/dev-util/intel-graphics-compiler/files/intel-graphics-compiler-2.32.7-llvm22.patch @@ -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 + #include ++#include + #include + #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 diff --git a/dev-util/intel-graphics-compiler/intel-graphics-compiler-2.32.7.ebuild b/dev-util/intel-graphics-compiler/intel-graphics-compiler-2.32.7.ebuild new file mode 100644 index 0000000..22d6696 --- /dev/null +++ b/dev-util/intel-graphics-compiler/intel-graphics-compiler-2.32.7.ebuild @@ -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), 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), 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\(A->getParamStructRetType\(\)\);\n\n Align Align = \*A->getParamAlign\(\);\n Aligns\[StructTy\] = static_cast\(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(A->getParamStructRetType());\n\n Align Align = *A->getParamAlign();\n Aligns[StructTy] = static_cast(Align.value());\n\n return true;\n }\n\n if (F.arg_empty()) {\n auto *StructTy = dyn_cast(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(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\(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(A->getParamStructRetType());\n\n return emitType(STy, F.getName(), OS, Aligns, false);\n }\n\n if (F.arg_empty()) {\n auto *STy = dyn_cast(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 RemarksFile;@llvm::LLVMRemarkFileHandle RemarksFile;@' IGC/Compiler/CodeGenPublic.h || die + perl -0pi -e 's@llvm::Expected> RemarksFileOrErr =@llvm::Expected 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();@; s@return llvm::DIBuilder::insertDbgValueIntrinsic\(V, VarInfo, Expr, DL, InsertBefore\);@return llvm::DIBuilder::insertDbgValueIntrinsic(V, VarInfo, Expr, DL, InsertBefore).template dyn_cast();@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(isa(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(isa(I.getOperand(0)) ? I.getOperand(0) : I.getOperand(1))->getPredicate();@; s@SmallVector DbgValues;\n llvm::findDbgValues\(DbgValues, Val\);@SmallVector DbgValues;\n llvm::findDbgValues(Val, DbgValues);@g; s@TinyPtrVector Dbgs = llvm::FindDbgDeclareUses\(&I\);@TinyPtrVector 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(Cmp)->getPredicate(), true) && pred ==@; s@match\(Cmp, addcPattern3\) &&@match(Cmp, addcPattern3) && (pred = cast(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 DbgValues;\n llvm::findDbgValues\(DbgValues, Val\);@SmallVector 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 \n#include \n#include \n#include \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 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 IdxList) const override {\n return m_baseConstantFolder.FoldExtractValue(Agg, IdxList);\n }\n\n llvm::Value *FoldInsertValue(llvm::Value *Agg, llvm::Value *Val, llvm::ArrayRef 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 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(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(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\(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(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(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(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::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 Operands,\n\s*TTI::TargetCostKind CostKind\);@llvm::InstructionCost getInstructionCost(const User *U, ArrayRef Operands,\n TTI::TargetCostKind CostKind) const;@; s@llvm::InstructionCost internalCalculateCost\(const User \*U, ArrayRef Operands,\n\s*TTI::TargetCostKind CostKind\);@llvm::InstructionCost internalCalculateCost(const User *U, ArrayRef 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 EphValues;\n CodeMetrics Metrics;\n Metrics\.analyzeBasicBlock\(BB, \*this, EphValues\);@ SmallPtrSet 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 Operands,\n\s*TTI::TargetCostKind CostKind\)@InstructionCost GenIntrinsicsTTIImpl::getInstructionCost(const User *U, ArrayRef Operands,\n TTI::TargetCostKind CostKind) const@; s@InstructionCost GenIntrinsicsTTIImpl::internalCalculateCost\(const User \*U, ArrayRef Operands,\n\s*TTI::TargetCostKind CostKind\)@InstructionCost GenIntrinsicsTTIImpl::internalCalculateCost(const User *U, ArrayRef 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::Intrinsic::getOrInsertDeclaration\(([^;]+)\)\.getCallee\(\)\)@llvm::Intrinsic::getOrInsertDeclaration($1)@g; s@(?getModule()->getDataLayout());@g' IGC/Compiler/GenTTI.cpp || die + perl -0pi -e 's@getInstructionCost\(const llvm::User \*U, llvm::ArrayRef Operands,\n\s*llvm::TargetTransformInfo::TargetCostKind CostKind\) \{@getInstructionCost(const llvm::User *U, llvm::ArrayRef 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(cast(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 bool match\(OpTy \*V\) \{@template 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(theIdx) == llvm::ArrayRef(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();@; s@\.template dyn_cast\(\)\)\.template dyn_cast\(\)@).template dyn_cast()@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(LHS), WithCache(RHS), SimplifyQuery(F.getParent()->getDataLayout(), Emu->DT))@' IGC/Compiler/CISACodeGen/PartialEmuI64OpsPass.cpp || die + perl -0pi -e 's@\A.*?(?=/\*========================== begin_copyright_notice)@@s; s@template bool match\(OpTy \*V\) \{@template bool match(OpTy *V) const {@g; s@ConstantExpr::getUIToFP\(@ConstantExpr::getCast(Instruction::UIToFP, @g; s@Scale = ConstantInt::get\(Scale->getType\(\), ScaleImm\);@Scale = cast(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(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(Cond);\n Pred = cast(Or0->getOperand(0))->getPredicate();\n Pred2 = cast(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(cast(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(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(std::move(GTTI)));@g; s@return TargetTransformInfo\(std::move\(GTTI\)\);@return TargetTransformInfo(std::make_unique(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(I->getOperand(0)), WithCache(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\(\*SE, \*DL, "decompose-2d-block-funcs-with-hoisting"\)@std::make_unique(*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::get($1));@g; s@\{\n TinyPtrVector 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\(m_ICmp\(Pred, m_Instruction\(I\), m_ConstantInt\(Const\)\)\)\)\)@if (!match(&CI, m_Intrinsic(m_ICmp(m_Instruction(I), m_ConstantInt(Const)))))\n return;\n\n Pred = cast(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 getFixupKind(StringRef) const override { return std::nullopt; }@; s@void applyFixup\(const MCAssembler &Asm, const MCFixup &fixup, const MCValue &Target, MutableArrayRef 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 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 createObjectTargetWriter\(\) const override \{\s*// TODO: implement this\s*IGC_ASSERT_UNREACHABLE\(\); // Unimplemented\s*\}@std::unique_ptr createObjectTargetWriter() const override { return std::make_unique(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 &fixups,\s*const MCSubtargetInfo &m\) const \{@void encodeInstruction(const MCInst &inst, SmallVectorImpl &CB, SmallVectorImpl &fixups,\n const MCSubtargetInfo &m) const override {@s; s@std::unique_ptr pAsmBackend = IGCLLVM::make_unique\(GetTargetTriple\(\)\);@std::unique_ptr pAsmBackend = IGCLLVM::make_unique(GetTargetTriple(), osABI, eMachine);@; s@std::unique_ptr pTargetObjectWriter =\s*IGCLLVM::make_unique\(osABI, eMachine\);\s*std::unique_ptr pObjectWriter =\s*createELFObjectWriter\(std::move\(pTargetObjectWriter\), outStream, true\);@std::unique_ptr 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 +} diff --git a/dev-util/intel-graphics-compiler/metadata.xml b/dev-util/intel-graphics-compiler/metadata.xml new file mode 100644 index 0000000..35c6738 --- /dev/null +++ b/dev-util/intel-graphics-compiler/metadata.xml @@ -0,0 +1,22 @@ + + + + + gentoo@taujhe.de + Jan Henke + + + proxy-maint@gentoo.org + Proxy Maintainers + + + conikost@gentoo.org + Conrad Kostecki + + + Enable VectorCompiler for a better performance. + + + intel/intel-graphics-compiler + +