[PATCH] D148283: [ExecutionEngine] Support TargetExtType in Interpreter
Bing Yu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 7 18:25:20 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa6bd2241b861: [ExecutionEngine] Support TargetExtType in Interpreter (authored by wenju, committed by yubing).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148283/new/
https://reviews.llvm.org/D148283
Files:
llvm/lib/ExecutionEngine/ExecutionEngine.cpp
llvm/test/ExecutionEngine/test-interp-target-ext-type.ll
Index: llvm/test/ExecutionEngine/test-interp-target-ext-type.ll
===================================================================
--- /dev/null
+++ llvm/test/ExecutionEngine/test-interp-target-ext-type.ll
@@ -0,0 +1,16 @@
+; RUN: %lli -jit-kind=mcjit -force-interpreter=true %s > /dev/null
+
+; Check interpreter isn't crashing in handling target extension type.
+
+ at g = global target("spirv.Event") zeroinitializer, align 8
+
+define i32 @main() {
+ %event = alloca target("spirv.Event"), align 8
+ store target("spirv.Event") zeroinitializer, ptr %event, align 8
+ %e = load target("spirv.Event"), ptr %event, align 8
+
+ store target("spirv.Event") poison, ptr @g, align 8
+ %e2 = load target("spirv.Event"), ptr @g, align 8
+
+ ret i32 0
+}
Index: llvm/lib/ExecutionEngine/ExecutionEngine.cpp
===================================================================
--- llvm/lib/ExecutionEngine/ExecutionEngine.cpp
+++ llvm/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -878,6 +878,12 @@
report_fatal_error(OS.str());
}
+ if (auto *TETy = dyn_cast<TargetExtType>(C->getType())) {
+ assert(TETy->hasProperty(TargetExtType::HasZeroInit) && C->isNullValue() &&
+ "TargetExtType only supports null constant value");
+ C = Constant::getNullValue(TETy->getLayoutType());
+ }
+
// Otherwise, we have a simple constant.
GenericValue Result;
switch (C->getType()->getTypeID()) {
@@ -1017,6 +1023,11 @@
void ExecutionEngine::StoreValueToMemory(const GenericValue &Val,
GenericValue *Ptr, Type *Ty) {
+ // It is safe to treat TargetExtType as its layout type since the underlying
+ // bits are only copied and are not inspected.
+ if (auto *TETy = dyn_cast<TargetExtType>(Ty))
+ Ty = TETy->getLayoutType();
+
const unsigned StoreBytes = getDataLayout().getTypeStoreSize(Ty);
switch (Ty->getTypeID()) {
@@ -1068,6 +1079,9 @@
void ExecutionEngine::LoadValueFromMemory(GenericValue &Result,
GenericValue *Ptr,
Type *Ty) {
+ if (auto *TETy = dyn_cast<TargetExtType>(Ty))
+ Ty = TETy->getLayoutType();
+
const unsigned LoadBytes = getDataLayout().getTypeStoreSize(Ty);
switch (Ty->getTypeID()) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D148283.529482.patch
Type: text/x-patch
Size: 2279 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230608/a85fd0dd/attachment.bin>
More information about the llvm-commits
mailing list