Skip to content

Commit 11e6695

Browse files
Artem Gindinsonromanovvlad
authored andcommitted
[SYCL] Sync with SPIRV Translator cdf2aa4609
Synced with: cdf2aa4609 Fix var/ptr annotation and lifetime start intrinsic translation Excluded the following syncs with LLVM: 2cdb947d4 Update LLVM to r358377 72bcddd08 Sync with LLVM 6183f7c486 Sync with LLVM Signed-off-by: Artem Gindinson <[email protected]>
1 parent 978ee22 commit 11e6695

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+2040
-2029
lines changed

llvm-spirv/.travis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,11 @@ script:
9393
-DLLVM_BUILD_TOOLS=ON \
9494
-DLLVM_BUILD_TESTS=ON \
9595
-DLLVM_INCLUDE_TESTS=ON \
96-
-DSKIP_SPIRV_DEBUG_INFO_TESTS=ON \
96+
-DSPIRV_SKIP_CLANG_BUILD=ON \
97+
-DSPIRV_SKIP_DEBUG_INFO_TESTS=ON \
9798
-DLLVM_LIT_ARGS="-sv --no-progress-bar" \
9899
-G "Unix Makefiles"
100+
ln -s /usr/lib/llvm-9/bin/clang bin/
99101
fi
100102
- if [ $CHECK_FORMAT == "1" ]; then
101103
cd ..;

llvm-spirv/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Where `llvm_build_dir` is the LLVM build directory.
5252
The translator can be built as a regular LLVM subproject. To do that you need to clone it to `llvm/projects` or `llvm/tools` directory.
5353
```
5454
git clone http://llvm.org/git/llvm.git
55-
cd llvm/project
55+
cd llvm/projects
5656
git clone https://github.com/KhronosGroup/SPIRV-LLVM-Translator.git
5757
```
5858
Run(re-run) cmake as usually for LLVM. After that you should have `llvm-spirv` and `check-llvm-spirv` targets available.

llvm-spirv/lib/SPIRV/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ add_llvm_library(LLVMSPIRVLib
4444

4545
target_include_directories(LLVMSPIRVLib
4646
PRIVATE
47-
${LLVM_INCLUDE_DIR}
47+
${LLVM_INCLUDE_DIRS}
4848
${LLVM_SPIRV_INCLUDE_DIRS}
4949
${CMAKE_CURRENT_SOURCE_DIR}
5050
${CMAKE_CURRENT_SOURCE_DIR}/libSPIRV

llvm-spirv/lib/SPIRV/LLVMToSPIRVDbgTran.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,18 @@ SPIRVEntry *LLVMToSPIRVDbgTran::getScope(DIScope *S) {
352352
}
353353
}
354354

355+
SPIRVEntry *LLVMToSPIRVDbgTran::getGlobalVariable(const DIGlobalVariable *GV) {
356+
for (GlobalVariable &V : M->globals()) {
357+
SmallVector<DIGlobalVariableExpression *, 4> GVs;
358+
V.getDebugInfo(GVs);
359+
for (DIGlobalVariableExpression *GVE : GVs) {
360+
if (GVE->getVariable() == GV)
361+
return SPIRVWriter->transValue(&V, nullptr);
362+
}
363+
}
364+
return getDebugInfoNone();
365+
}
366+
355367
SPIRVWord mapDebugFlags(DINode::DIFlags DFlags) {
356368
SPIRVWord Flags = 0;
357369
if ((DFlags & DINode::FlagAccessibility) == DINode::FlagPublic)
@@ -758,20 +770,15 @@ LLVMToSPIRVDbgTran::transDbgGlobalVariable(const DIGlobalVariable *GV) {
758770
if (Context && (isa<DINamespace>(Context) || isa<DISubprogram>(Context)))
759771
Parent = transDbgEntry(Context);
760772
Ops[ParentIdx] = Parent->getId();
761-
Ops[LinkageNameIdx] = BM->getString(GV->getLinkageName())->getId();
762-
763-
// Variable
764-
SPIRVEntry *Var = getDebugInfoNone();
765-
llvm::GlobalVariable *V = M->getGlobalVariable(GV->getName());
766-
if (!V)
767-
V = M->getGlobalVariable(GV->getLinkageName());
768-
if (V)
769-
Var = SPIRVWriter->transValue(V, nullptr);
770-
Ops[VariableIdx] = Var->getId();
771773

774+
Ops[LinkageNameIdx] = BM->getString(GV->getLinkageName())->getId();
775+
Ops[VariableIdx] = getGlobalVariable(GV)->getId();
772776
Ops[FlagsIdx] = transDebugFlags(GV);
777+
778+
// Check if GV is the definition of previously declared static member
773779
if (DIDerivedType *StaticMember = GV->getStaticDataMemberDeclaration())
774780
Ops.push_back(transDbgEntry(StaticMember)->getId());
781+
775782
return BM->addDebugInfo(SPIRVDebug::GlobalVariable, getVoidTy(), Ops);
776783
}
777784

llvm-spirv/lib/SPIRV/LLVMToSPIRVDbgTran.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ class LLVMToSPIRVDbgTran {
9494
SPIRVType *getVoidTy();
9595
SPIRVEntry *getScope(DIScopeRef SR);
9696
SPIRVEntry *getScope(DIScope *SR);
97+
SPIRVEntry *getGlobalVariable(const DIGlobalVariable *GV);
9798

9899
// No debug info
99100
SPIRVEntry *getDebugInfoNone();

llvm-spirv/lib/SPIRV/OCL20ToSPIRV.cpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -827,16 +827,28 @@ void OCL20ToSPIRV::transAtomicBuiltin(CallInst *CI, OCLBuiltinTransInfo &Info) {
827827
const size_t ArgsCount = Args.size();
828828
const size_t ScopeIdx = ArgsCount - 1;
829829
const size_t OrderIdx = ScopeIdx - NumOrder;
830-
Args[ScopeIdx] =
831-
mapUInt(M, cast<ConstantInt>(Args[ScopeIdx]), [](unsigned I) {
832-
return map<Scope>(static_cast<OCLScopeKind>(I));
830+
if (auto ScopeInt = dyn_cast_or_null<ConstantInt>(Args[ScopeIdx])) {
831+
Args[ScopeIdx] = mapUInt(M, ScopeInt, [](unsigned I) {
832+
return map<Scope>(static_cast<OCLScopeKind>(I));
833+
});
834+
} else {
835+
// SPIR-V 1.3 r6 s2.16.2: All <id> used for Scope and Memory
836+
// Semantics must be of an OpConstant.
837+
Ctx->emitError(CI, "memory_scope argument needs to be constant");
838+
}
839+
for (size_t I = 0; I < NumOrder; ++I) {
840+
if (auto OrderInt =
841+
dyn_cast_or_null<ConstantInt>(Args[OrderIdx + I])) {
842+
Args[OrderIdx + I] = mapUInt(M, OrderInt, [](unsigned Ord) {
843+
return mapOCLMemSemanticToSPIRV(
844+
0, static_cast<OCLMemOrderKind>(Ord));
833845
});
834-
for (size_t I = 0; I < NumOrder; ++I)
835-
Args[OrderIdx + I] = mapUInt(
836-
M, cast<ConstantInt>(Args[OrderIdx + I]), [](unsigned Ord) {
837-
return mapOCLMemSemanticToSPIRV(
838-
0, static_cast<OCLMemOrderKind>(Ord));
839-
});
846+
} else {
847+
// SPIR-V 1.3 r6 s2.16.2: All <id> used for Scope and Memory
848+
// Semantics must be of an OpConstant.
849+
Ctx->emitError(CI, "memory_order argument needs to be constant");
850+
}
851+
}
840852
// Order of args in SPIR-V:
841853
// object, scope, 1-2 order, 0-2 other args
842854
std::swap(Args[1], Args[ScopeIdx]);
@@ -1229,9 +1241,9 @@ void OCL20ToSPIRV::transWorkItemBuiltinsToVariables() {
12291241
bool IsVec = I.getFunctionType()->getNumParams() > 0;
12301242
Type *GVType =
12311243
IsVec ? VectorType::get(I.getReturnType(), 3) : I.getReturnType();
1232-
auto BV = new GlobalVariable(
1233-
*M, GVType, true, GlobalValue::ExternalLinkage, nullptr, BuiltinVarName,
1234-
0, GlobalVariable::NotThreadLocal, SPIRAS_Constant);
1244+
auto BV = new GlobalVariable(*M, GVType, true, GlobalValue::ExternalLinkage,
1245+
nullptr, BuiltinVarName, 0,
1246+
GlobalVariable::NotThreadLocal, SPIRAS_Input);
12351247
std::vector<Instruction *> InstList;
12361248
for (auto UI = I.user_begin(), UE = I.user_end(); UI != UE; ++UI) {
12371249
auto CI = dyn_cast<CallInst>(*UI);

llvm-spirv/lib/SPIRV/OCLUtil.cpp

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ unsigned getExtOp(StringRef OrigName, const std::string &GivenDemangledName) {
177177
case ParamType::FLOAT:
178178
Prefix = "f";
179179
break;
180-
default:
181-
llvm_unreachable("unknown mangling!");
180+
case ParamType::UNKNOWN:
181+
break;
182182
}
183183
Found = OCLExtOpMap::rfind(Prefix + DemangledName, &EOC);
184184
}
@@ -188,18 +188,6 @@ unsigned getExtOp(StringRef OrigName, const std::string &GivenDemangledName) {
188188
return ~0U;
189189
}
190190

191-
std::unique_ptr<SPIRVEntry> getSPIRVInst(const OCLBuiltinTransInfo &Info) {
192-
Op OC = OpNop;
193-
unsigned ExtOp = ~0U;
194-
SPIRVEntry *Entry = nullptr;
195-
if (OCLSPIRVBuiltinMap::find(Info.UniqName, &OC))
196-
Entry = SPIRVEntry::create(OC);
197-
else if ((ExtOp = getExtOp(Info.MangledName, Info.UniqName)) != ~0U)
198-
Entry = static_cast<SPIRVEntry *>(
199-
SPIRVEntry::createUnique(SPIRVEIS_OpenCL, ExtOp).get());
200-
return std::unique_ptr<SPIRVEntry>(Entry);
201-
}
202-
203191
///////////////////////////////////////////////////////////////////////////////
204192
//
205193
// Functions for getting module info
@@ -613,14 +601,6 @@ Instruction *mutateCallInstOCL(
613601
return mutateCallInst(M, CI, ArgMutate, RetMutate, &BtnInfo, Attrs);
614602
}
615603

616-
void mutateFunctionOCL(
617-
Function *F,
618-
std::function<std::string(CallInst *, std::vector<Value *> &)> ArgMutate,
619-
AttributeList *Attrs) {
620-
OCLBuiltinFuncMangleInfo BtnInfo(F);
621-
return mutateFunction(F, ArgMutate, &BtnInfo, Attrs, false);
622-
}
623-
624604
static std::pair<StringRef, StringRef>
625605
getSrcAndDstElememntTypeName(BitCastInst *BIC) {
626606
if (!BIC)

llvm-spirv/lib/SPIRV/OCLUtil.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,6 @@ const static char TypePrefix[] = "opencl.intel_sub_group_avc_";
291291
/// function is translated to an extended instruction, otherwise ~0U.
292292
unsigned getExtOp(StringRef MangledName, const std::string &DemangledName = "");
293293

294-
/// Get an empty SPIR-V instruction.
295-
std::unique_ptr<SPIRVEntry> getSPIRVInst(const OCLBuiltinTransInfo &Info);
296-
297294
/// Get literal arguments of call of atomic_work_item_fence.
298295
AtomicWorkItemFenceLiterals getAtomicWorkItemFenceLiterals(CallInst *CI);
299296

@@ -383,12 +380,6 @@ Instruction *mutateCallInstOCL(
383380
std::function<Instruction *(CallInst *)> RetMutate,
384381
AttributeList *Attrs = nullptr);
385382

386-
/// Mutate a function to OpenCL builtin function.
387-
void mutateFunctionOCL(
388-
Function *F,
389-
std::function<std::string(CallInst *, std::vector<Value *> &)> ArgMutate,
390-
AttributeList *Attrs = nullptr);
391-
392383
/// Check if instruction is bitcast from spirv.ConstantSampler to spirv.Sampler
393384
bool isSamplerInitializer(Instruction *Inst);
394385

llvm-spirv/lib/SPIRV/SPIRVInternal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ enum SPIRAddressSpace {
183183
SPIRAS_Constant,
184184
SPIRAS_Local,
185185
SPIRAS_Generic,
186+
SPIRAS_Input,
186187
SPIRAS_Count,
187188
};
188189

@@ -192,6 +193,7 @@ template <> inline void SPIRVMap<SPIRAddressSpace, std::string>::init() {
192193
add(SPIRAS_Constant, "Constant");
193194
add(SPIRAS_Local, "Local");
194195
add(SPIRAS_Generic, "Generic");
196+
add(SPIRAS_Input, "Input");
195197
}
196198
typedef SPIRVMap<SPIRAddressSpace, SPIRVStorageClassKind>
197199
SPIRAddrSpaceCapitalizedNameMap;
@@ -203,6 +205,7 @@ inline void SPIRVMap<SPIRAddressSpace, SPIRVStorageClassKind>::init() {
203205
add(SPIRAS_Constant, StorageClassUniformConstant);
204206
add(SPIRAS_Local, StorageClassWorkgroup);
205207
add(SPIRAS_Generic, StorageClassGeneric);
208+
add(SPIRAS_Input, StorageClassInput);
206209
}
207210
typedef SPIRVMap<SPIRAddressSpace, SPIRVStorageClassKind> SPIRSPIRVAddrSpaceMap;
208211

llvm-spirv/lib/SPIRV/SPIRVLowerConstExpr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ namespace SPIRV {
6464

6565
cl::opt<bool> SPIRVLowerConst(
6666
"spirv-lower-const-expr", cl::init(true),
67-
cl::desc("LLVM/SPIR-V translation enalbe lowering constant expression"));
67+
cl::desc("LLVM/SPIR-V translation enable lowering constant expression"));
6868

6969
class SPIRVLowerConstExpr : public ModulePass {
7070
public:

0 commit comments

Comments
 (0)