Skip to content

Commit 21ecde9

Browse files
bokrzesiigcbot
authored andcommitted
Enablement of GenISAIntrinsics target on LLVM16
Enablement of GenISAIntrinsics target on LLVM16 * Updated ShiftAmount of UnsignedDivisionByConstantInfo calculation based on https://reviews.llvm.org/D141014 * Used newer API (isKillLocation) in getVariableLocation * Updated LLVMWrapper for InlineFunction and slightly refactored it
1 parent b2aefc8 commit 21ecde9

File tree

9 files changed

+43
-23
lines changed

9 files changed

+43
-23
lines changed

IGC/AdaptorCommon/DivergentBarrierPass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ void DivergentBarrierPass::generateBody(
424424
for (auto* CI : ContCalls)
425425
{
426426
InlineFunctionInfo IFI;
427-
bool CanInline = IGCLLVM::InlineFunction(CI, IFI, nullptr, false);
427+
bool CanInline = IGCLLVM::InlineFunction(*CI, IFI, nullptr, false);
428428
IGC_ASSERT_MESSAGE(CanInline, "failed to inline?");
429429
}
430430

IGC/Compiler/LegalizationPass.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ SPDX-License-Identifier: MIT
2828
#include "GenISAIntrinsics/GenIntrinsicInst.h"
2929
#include "Probe/Assertion.h"
3030
#include "LLVM3DBuilder/BuiltinsFrontend.hpp"
31+
#include "llvm/Support/Casting.h"
3132

3233

3334
using namespace llvm;
@@ -2200,7 +2201,7 @@ void Legalization::visitIntrinsicInst(llvm::IntrinsicInst& I)
22002201
Value* result = (llvmBuilder.*replacementFunc)(argument);
22012202
InlineFunctionInfo IFI;
22022203
I.replaceAllUsesWith(result);
2203-
IGCLLVM::InlineFunction(static_cast<CallInst*>(result), IFI, nullptr, false);
2204+
IGCLLVM::InlineFunction(*cast<CallBase>(result), IFI, nullptr, false);
22042205
I.eraseFromParent();
22052206
}
22062207
};

IGC/Compiler/Optimizer/OpenCLPasses/TransformUnmaskedFunctionsPass/TransformUnmaskedFunctionsPass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ bool InlineUnmaskedFunctionsPass::runOnModule(llvm::Module& M)
345345

346346
llvm::InlineFunctionInfo IFI;
347347
for (auto *CB : Calls)
348-
IGCLLVM::InlineFunction(CB, IFI);
348+
IGCLLVM::InlineFunction(*CB, IFI);
349349

350350
for (Function *F : Funcs) {
351351
F->removeDeadConstantUsers();

IGC/VectorCompiler/lib/GenXCodeGen/GenXSimdCFConformance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3918,7 +3918,7 @@ static void fixBlockDataBeforeRemoval(BasicBlock *BB, BasicBlock *SuccBB) {
39183918
while (auto *DBG = dyn_cast<DbgVariableIntrinsic>(BB->begin())) {
39193919
DBG->moveBefore(InsertBefore);
39203920
if (!HasOnePred)
3921-
IGCLLVM::setDbgVariableLocationToUndef(DBG);
3921+
IGCLLVM::setKillLocation(DBG);
39223922
}
39233923
}
39243924

IGC/VectorCompiler/lib/GenXCodeGen/GenXTidyControlFlow.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ static void moveDbgBeforeBlockRemoval(BasicBlock *BB, Instruction *InsertBefore,
152152
while (auto *DBG = dyn_cast<llvm::DbgVariableIntrinsic>(BB->begin())) {
153153
DBG->moveBefore(InsertBefore);
154154
if (MakeUndef)
155-
IGCLLVM::setDbgVariableLocationToUndef(DBG);
155+
IGCLLVM::setKillLocation(DBG);
156156
}
157157
IGC_ASSERT_MESSAGE(BB->front().isTerminator(), "Expected that only terminator instruction remains");
158158
}

IGC/WrapperLLVM/include/llvmWrapper/ADT/APInt.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ inline bool IsAddition(const UnsignedDivisionByConstantInfo &mu) {
7171
}
7272

7373
inline unsigned ShiftAmount(const UnsignedDivisionByConstantInfo &mu) {
74-
#if LLVM_VERSION_MAJOR >= 14
74+
#if LLVM_VERSION_MAJOR >= 16
75+
// Basing on this: https://reviews.llvm.org/D141014
76+
return IsAddition(mu) ? mu.PostShift + 1 : mu.PostShift;
77+
#elif LLVM_VERSION_MAJOR >= 14
7578
return mu.ShiftAmount;
7679
#else
7780
return mu.s;

IGC/WrapperLLVM/include/llvmWrapper/IR/IntrinsicInst.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,51 @@ SPDX-License-Identifier: MIT
1313
#include <llvm/IR/Constants.h>
1414
#include <llvm/IR/IntrinsicInst.h>
1515
#include "llvm/IR/DebugInfoMetadata.h"
16+
#include "llvm/Support/Casting.h"
1617

1718
#include "Probe/Assertion.h"
1819

1920
namespace IGCLLVM
2021
{
22+
inline bool isKillLocation(const llvm::DbgVariableIntrinsic* DbgInst)
23+
{
24+
IGC_ASSERT(DbgInst);
25+
#if LLVM_VERSION_MAJOR <= 12
26+
return llvm::dyn_cast<llvm::UndefValue>(DbgInst->getVariableLocation());
27+
#elif LLVM_VERSION_MAJOR <= 15
28+
return DbgInst->isUndef();
29+
#else // LLVM_VERSION_MAJOR >= 16
30+
return DbgInst->isKillLocation();
31+
#endif
32+
}
33+
2134
inline llvm::Value* getVariableLocation(const llvm::DbgVariableIntrinsic* DbgInst)
2235
{
2336
IGC_ASSERT(DbgInst);
2437
#if LLVM_VERSION_MAJOR <= 12
2538
return DbgInst->getVariableLocation();
2639
#else
27-
IGC_ASSERT_MESSAGE(((DbgInst->getNumVariableLocationOps() == 1) || DbgInst->isUndef()),
40+
IGC_ASSERT_MESSAGE((DbgInst->getNumVariableLocationOps() == 1) || isKillLocation(DbgInst),
2841
"unsupported number of location ops");
2942
return DbgInst->getVariableLocationOp(0);
3043
#endif
3144
}
3245

33-
inline void setDbgVariableLocationToUndef(llvm::DbgVariableIntrinsic *DbgInst)
46+
inline void setKillLocation(llvm::DbgVariableIntrinsic *DbgInst)
3447
{
3548
IGC_ASSERT(DbgInst);
49+
3650
#if LLVM_VERSION_MAJOR <= 12
3751
auto *OP = DbgInst->getVariableLocation();
3852
IGC_ASSERT_MESSAGE(OP != nullptr, "Empty dbg var not supported");
53+
3954
auto *Undef = llvm::UndefValue::get(OP->getType());
40-
DbgInst->setOperand(
41-
0, llvm::MetadataAsValue::get(DbgInst->getContext(),
42-
llvm::ValueAsMetadata::get(Undef)));
43-
#else
55+
DbgInst->setOperand(0, llvm::MetadataAsValue::get(DbgInst->getContext(),
56+
llvm::ValueAsMetadata::get(Undef)));
57+
#elif LLVM_VERSION_MAJOR <= 15
4458
DbgInst->setUndef();
59+
#else // LLVM_VERSION_MAJOR >= 16
60+
DbgInst->setKillLocation();
4561
#endif
4662
}
4763

IGC/WrapperLLVM/include/llvmWrapper/Transforms/Utils/Cloning.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@ SPDX-License-Identifier: MIT
1111

1212
#include "llvm/Config/llvm-config.h"
1313
#include "llvm/Transforms/Utils/Cloning.h"
14+
#include "llvm/Support/Casting.h"
15+
#include "Probe/Assertion.h"
1416

1517
namespace IGCLLVM
1618
{
17-
inline bool InlineFunction(llvm::CallInst* CB, llvm::InlineFunctionInfo& IFI,
19+
inline bool InlineFunction(llvm::CallBase& CB, llvm::InlineFunctionInfo& IFI,
1820
llvm::AAResults* CalleeAAR = nullptr,
1921
bool InsertLifetime = true,
2022
llvm::Function* ForwardVarArgsTo = nullptr)
2123
{
22-
return llvm::InlineFunction(
2324
#if LLVM_VERSION_MAJOR < 11
24-
CB
25-
#else
26-
*llvm::dyn_cast<llvm::CallBase>(CB)
27-
#endif
28-
, IFI, CalleeAAR, InsertLifetime, ForwardVarArgsTo)
29-
#if LLVM_VERSION_MAJOR >= 11
30-
.isSuccess()
25+
auto* CI = llvm::dyn_cast<llvm::CallInst>(&CB);
26+
IGC_ASSERT(CI);
27+
return llvm::InlineFunction(CI, IFI, CalleeAAR, InsertLifetime, ForwardVarArgsTo);
28+
#elif LLVM_VERSION_MAJOR <= 15
29+
return llvm::InlineFunction(CB, IFI, CalleeAAR, InsertLifetime, ForwardVarArgsTo).isSuccess();
30+
#else // LLVM_VERSION_MAJOR >= 16
31+
return llvm::InlineFunction(CB, IFI, true, CalleeAAR, InsertLifetime, ForwardVarArgsTo).isSuccess();
3132
#endif
32-
;
3333
}
3434

3535
#if LLVM_VERSION_MAJOR < 13

IGC/common/LLVMUtils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ void InlineHelper::InlineAndOptimize(CallInst* callInst)
945945
auto* fn = callInst->getFunction();
946946

947947
InlineFunctionInfo IFI;
948-
bool CanInline = IGCLLVM::InlineFunction(callInst, IFI);
948+
bool CanInline = IGCLLVM::InlineFunction(*callInst, IFI);
949949
IGC_ASSERT_MESSAGE(CanInline, "failed to inline?");
950950

951951
auto& perFnAllocas = m_InlinedStaticArrayAllocas[fn];

0 commit comments

Comments
 (0)