-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[SandboxIR] Boilerplate code #95814
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SandboxIR] Boilerplate code #95814
Conversation
@llvm/pr-subscribers-llvm-transforms Author: vporpo (vporpo) ChangesThis is the first patch in a series of patches for the Sandbox Vectorizer project. For a detailed description of the project please refer to the RFC: https://discourse.llvm.org/t/rfc-sandbox-vectorizer-an-experimental-modular-vectorizer/79059 This patch adds some basic boilerplate code for the SandboxIR which includes parts of the Full diff: https://github.com/llvm/llvm-project/pull/95814.diff 7 Files Affected:
diff --git a/llvm/include/llvm/Transforms/SandboxIR/SandboxIR.h b/llvm/include/llvm/Transforms/SandboxIR/SandboxIR.h
new file mode 100644
index 0000000000000..753f42d313bb2
--- /dev/null
+++ b/llvm/include/llvm/Transforms/SandboxIR/SandboxIR.h
@@ -0,0 +1,129 @@
+//===- SandboxIR.h ----------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Sandbox IR is a lightweight overlay transactional IR on top of LLVM IR.
+// Features:
+// - You can save/rollback the state of the IR at any time.
+// - Any changes made to Sandbox IR will automatically update the underlying
+// LLVM IR so both IRs are always in sync.
+// - Feels like LLVM IR, similar API.
+//
+// SandboxIR forms a class hierarcy that resembles that of LLVM IR:
+//
+// +- SBArgument +- SBConstant +- SBOpaqueInstruction
+// | | |
+// SBValue -+- SBUser ------+- SBInstruction -+- SBInsertElementInstruction
+// | |
+// +- SBBasicBlock +- SBExtractElementInstruction
+// | |
+// +- SBFunction +- SBShuffleVectorInstruction
+// |
+// +- SBStoreInstruction
+// |
+// +- SBLoadInstruction
+// |
+// +- SBCmpInstruction
+// |
+// +- SBCastInstruction
+// |
+// +- SBPHINode
+// |
+// +- SBSelectInstruction
+// |
+// +- SBBinaryOperator
+// |
+// +- SBUnaryOperator
+//
+// SBUse
+//
+#ifndef LLVM_TRANSFORMS_SANDBOXIR_SANDBOXIR_H
+#define LLVM_TRANSFORMS_SANDBOXIR_SANDBOXIR_H
+
+#include "llvm/IR/Value.h"
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+
+class SBContext;
+
+/// A SBValue has users. This is the base class.
+class SBValue {
+public:
+ enum class ClassID : unsigned {
+#define DEF_VALUE(ID, CLASS) ID,
+#define DEF_USER(ID, CLASS) ID,
+#define DEF_INSTR(ID, OPC, CLASS) ID,
+#include "llvm/Transforms/SandboxIR/SandboxIRValues.def"
+ };
+
+protected:
+ static const char *getSubclassIDStr(ClassID ID) {
+ switch (ID) {
+ // clang-format off
+#define DEF_VALUE(ID, CLASS) case ClassID::ID: return #ID;
+#define DEF_USER(ID, CLASS) case ClassID::ID: return #ID;
+#define DEF_INSTR(ID, OPC, CLASS) case ClassID::ID: return #ID;
+ // clang-format on
+#include "llvm/Transforms/SandboxIR/SandboxIRValues.def"
+ }
+ llvm_unreachable("Unimplemented ID");
+ }
+
+ /// For isa/dyn_cast.
+ ClassID SubclassID;
+#ifndef NDEBUG
+ /// A unique ID used for forming the name (used for debugging).
+ unsigned UID;
+#endif
+ /// The LLVM Value that corresponds to this SBValue.
+ /// NOTE: Some SBInstructions, like Packs, may include more than one value.
+ Value *Val = nullptr;
+ friend class ValueAttorney; // For Val
+
+ /// All values point to the context.
+ SBContext &Ctxt;
+ // This is used by eraseFromParent().
+ void clearValue() { Val = nullptr; }
+ template <typename ItTy, typename SBTy> friend class LLVMOpUserItToSBTy;
+
+public:
+ SBValue(ClassID SubclassID, Value *Val, SBContext &Ctxt);
+ virtual ~SBValue() = default;
+ ClassID getSubclassID() const { return SubclassID; }
+
+ Type *getType() const { return Val->getType(); }
+
+ SBContext &getContext() const;
+ virtual hash_code hashCommon() const {
+ return hash_combine(SubclassID, &Ctxt, Val);
+ }
+ virtual hash_code hash() const = 0;
+ friend hash_code hash_value(const SBValue &SBV) { return SBV.hash(); }
+#ifndef NDEBUG
+ /// Should crash if there is something wrong with the instruction.
+ virtual void verify() const = 0;
+ /// Returns the name in the form 'SB<number>.' like 'SB1.'
+ std::string getName() const;
+ virtual void dumpCommonHeader(raw_ostream &OS) const;
+ void dumpCommonFooter(raw_ostream &OS) const;
+ void dumpCommonPrefix(raw_ostream &OS) const;
+ void dumpCommonSuffix(raw_ostream &OS) const;
+ void printAsOperandCommon(raw_ostream &OS) const;
+ friend raw_ostream &operator<<(raw_ostream &OS, const SBValue &SBV) {
+ SBV.dump(OS);
+ return OS;
+ }
+ virtual void dump(raw_ostream &OS) const = 0;
+ LLVM_DUMP_METHOD virtual void dump() const = 0;
+ virtual void dumpVerbose(raw_ostream &OS) const = 0;
+ LLVM_DUMP_METHOD virtual void dumpVerbose() const = 0;
+#endif
+};
+} // namespace llvm
+
+#endif // LLVM_TRANSFORMS_SANDBOXIR_SANDBOXIR_H
diff --git a/llvm/include/llvm/Transforms/SandboxIR/SandboxIRValues.def b/llvm/include/llvm/Transforms/SandboxIR/SandboxIRValues.def
new file mode 100644
index 0000000000000..e33e8c8c5e07e
--- /dev/null
+++ b/llvm/include/llvm/Transforms/SandboxIR/SandboxIRValues.def
@@ -0,0 +1,29 @@
+//===- SandboxIRValues.def --------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// clang-format off
+
+// ClassID, Class
+// DEF_USER(Constant, SBConstant)
+
+// clang-format on
+#ifdef DEF_VALUE
+#undef DEF_VALUE
+#endif
+#ifdef DEF_USER
+#undef DEF_USER
+#endif
+#ifdef DEF_INSTR
+#undef DEF_INSTR
+#endif
+#ifdef OPCODES
+#undef OPCODES
+#endif
+#ifdef OP
+#undef OP
+#endif
diff --git a/llvm/lib/Transforms/CMakeLists.txt b/llvm/lib/Transforms/CMakeLists.txt
index 84a7e34147d08..d9857034ba1a9 100644
--- a/llvm/lib/Transforms/CMakeLists.txt
+++ b/llvm/lib/Transforms/CMakeLists.txt
@@ -10,3 +10,4 @@ add_subdirectory(ObjCARC)
add_subdirectory(Coroutines)
add_subdirectory(CFGuard)
add_subdirectory(HipStdPar)
+add_subdirectory(SandboxIR)
diff --git a/llvm/lib/Transforms/SandboxIR/CMakeLists.txt b/llvm/lib/Transforms/SandboxIR/CMakeLists.txt
new file mode 100644
index 0000000000000..225eca0cadd1a
--- /dev/null
+++ b/llvm/lib/Transforms/SandboxIR/CMakeLists.txt
@@ -0,0 +1,11 @@
+add_llvm_component_library(LLVMSandboxIR
+ SandboxIR.cpp
+
+ ADDITIONAL_HEADER_DIRS
+ ${LLVM_MAIN_INCLUDE_DIR}/llvm/Transforms/SandboxIR
+
+ LINK_COMPONENTS
+ Core
+ Support
+ )
+
diff --git a/llvm/lib/Transforms/SandboxIR/SandboxIR.cpp b/llvm/lib/Transforms/SandboxIR/SandboxIR.cpp
new file mode 100644
index 0000000000000..5bd25083e80c3
--- /dev/null
+++ b/llvm/lib/Transforms/SandboxIR/SandboxIR.cpp
@@ -0,0 +1,65 @@
+//===- SandboxIR.cpp - A transactional overlay IR on top of LLVM IR -------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Transforms/SandboxIR/SandboxIR.h"
+#include "llvm/Support/Debug.h"
+#include <sstream>
+
+using namespace llvm;
+
+SBValue::SBValue(ClassID SubclassID, Value *Val, SBContext &Ctxt)
+ : SubclassID(SubclassID), Val(Val), Ctxt(Ctxt) {
+#ifndef NDEBUG
+ UID = 0; // FIXME: Once SBContext is available.
+#endif
+}
+
+#ifndef NDEBUG
+std::string SBValue::getName() const {
+ std::stringstream SS;
+ SS << "SB" << UID << ".";
+ return SS.str();
+}
+
+void SBValue::dumpCommonHeader(raw_ostream &OS) const {
+ OS << getName() << " " << getSubclassIDStr(SubclassID) << " ";
+}
+
+void SBValue::dumpCommonFooter(raw_ostream &OS) const {
+ OS.indent(2) << "Val: ";
+ if (Val)
+ OS << *Val;
+ else
+ OS << "NULL";
+ OS << "\n";
+}
+
+void SBValue::dumpCommonPrefix(raw_ostream &OS) const {
+ if (Val)
+ OS << *Val;
+ else
+ OS << "NULL ";
+}
+
+void SBValue::dumpCommonSuffix(raw_ostream &OS) const {
+ OS << " ; " << getName() << " (" << getSubclassIDStr(SubclassID) << ") "
+ << this;
+}
+
+void SBValue::printAsOperandCommon(raw_ostream &OS) const {
+ if (Val)
+ Val->printAsOperand(OS);
+ else
+ OS << "NULL ";
+}
+
+void SBValue::dump() const {
+ dump(dbgs());
+ dbgs() << "\n";
+}
+#endif // NDEBUG
diff --git a/llvm/utils/gn/secondary/llvm/lib/Transforms/SandboxIR/BUILD.gn b/llvm/utils/gn/secondary/llvm/lib/Transforms/SandboxIR/BUILD.gn
new file mode 100644
index 0000000000000..01d62f20cf50f
--- /dev/null
+++ b/llvm/utils/gn/secondary/llvm/lib/Transforms/SandboxIR/BUILD.gn
@@ -0,0 +1,10 @@
+static_library("SandboxIR") {
+ output_name = "LLVMSandboxIR"
+ deps = [
+ "//llvm/lib/IR",
+ "//llvm/lib/Support",
+ ]
+ sources = [
+ "SandboxIR.cpp",
+ ]
+}
diff --git a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
index cf7ee18f0d068..6d99b210d0323 100644
--- a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
@@ -1467,6 +1467,23 @@ cc_library(
],
)
+cc_library(
+ name = "SandboxIR",
+ srcs = glob([
+ "lib/Transforms/SandboxIR/*.cpp",
+ ]),
+ hdrs = glob([
+ "include/llvm/Transforms/SandboxIR/*.h",
+ "include/llvm/Transforms/SandboxIR/*.def",
+ ]),
+ copts = llvm_copts,
+ deps = [
+ ":Core",
+ ":Support",
+ ":config",
+ ],
+)
+
cc_library(
name = "Vectorize",
srcs = glob([
@@ -1826,6 +1843,7 @@ cc_library(
":InstCombine",
":Instrumentation",
":ObjCARC",
+ ":SandboxIR",
":Scalar",
":Vectorize",
],
@@ -2658,6 +2676,7 @@ cc_library(
":Instrumentation",
":MC",
":ObjCARC",
+ ":SandboxIR",
":Scalar",
":Support",
":Target",
|
It is missing tests. I don't like the SB prefix. Could you instead put everything into |
There are tons of unit tests for all SandboxIR classes, but they will have to wait for a couple of patches. They will be part of the patches that introduce the Context class which owns the SandboxIR objects, including the SandboxIR Value.
This is an option, and is probably nicer for the user of the API. But I am a bit concerned about the internals of SandboxIR: Given that this class hierarchy mirrors the LLVM IR one it could make the code within the SandboxIR classes quite confusing and error-prone because we are used to writing LLVM-IR code without the
Wdyt? |
Each commit/PR comes with a test. There are few exceptions. I let the other reviewers vote on it, but I would still prefer nested namespaces over prefixes. For llvm Values, you probably end up in all/most places with llvm::Value. |
I am aware of this rule, but there is no functionality to exercise at this point with a test, since this is just boilerplate code and all we really care about is that it builds and is registered correctly with CMake and the other build systems. Regarding the namespace, I think the additional benefit of using a namespace is that one could potentially switch some code over from LLVM IR to Sandbox IR by replacing |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not qualified to do a proper review here, just a couple of drive-by nits.
// LLVM IR so both IRs are always in sync. | ||
// - Feels like LLVM IR, similar API. | ||
// | ||
// SandboxIR forms a class hierarcy that resembles that of LLVM IR: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo: hierarchy
/// The LLVM Value that corresponds to this SBValue. | ||
/// NOTE: Some SBInstructions, like Packs, may include more than one value. | ||
Value *Val = nullptr; | ||
friend class ValueAttorney; // For Val |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: should this friend declaration be added in the same patch as the ValueAttorney
class? It's not added here.
Could you add a Value.cpp to llvm/unittests/Transforms/sandboxir/ with a small instantiation of sandboxir::Value to meet the test requirements? |
Yes, let me see what I can do. I am in the process of switching from the SB prefix to namespace for the whole project, so I will update the patch after I am done with the conversion. |
bda2114
to
eee6d0a
Compare
if you're not maintaining the gn/bazel build, no need to add those build files in this PR, let the respective communities handle them |
protected: | ||
static const char *getSubclassIDStr(ClassID ID) { | ||
switch (ID) { | ||
// clang-format off |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is clang-format off
just for one space? doesn't seem worth it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like this with clang-format:
#define DEF_VALUE(ID, CLASS) \
case ClassID::ID: \
return #ID;
#define DEF_USER(ID, CLASS) \
case ClassID::ID: \
return #ID;
#define DEF_INSTR(ID, OPC, CLASS) \
case ClassID::ID: \
return #ID;
```
which I find it quite a bit harder to read than with clang-format off, but I don't feel to strongly about it.
|
||
class Context { | ||
protected: | ||
LLVMContext &LLVMCtxt; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: context is almost always abbreviated ctx
instead of ctxt
, at least in LLVM
see rg -i ctxt llvm/include/llvm
vs rg -i ctx llvm/include/llvm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK, I will replace Ctxt with Ctx.
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
// clang-format off |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is this really necessary? no other .def
file in llvm/include
has clang-format off
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At this point it is not necessary, but later on there are some entries that look like this:
DEF_INSTR(BinOp, OPCODES(\
OP(Add) \
OP(FAdd) \
OP(Sub) \
OP(FSub) \
OP(Mul) \
OP(FMul) \
and clang-format won't list the OP() entries vertically to save vertical space. Anyway, I will remove it for now.
This is the first patch in a series of patches for the Sandbox Vectorizer project. SandboxIR is not tightly coupled to the Sandbox Vectorizer and could be used independently as a transactional layer on top of LLVM IR. For a more detailed description of the project please refer to the RFC: https://discourse.llvm.org/t/rfc-sandbox-vectorizer-an-experimental-modular-vectorizer/79059 This patch adds some basic boilerplate code for the SandboxIR which includes parts of the SandboxIR `Value` class.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
putting this in top level under llvm/
as opposed to under llvm/Transforms
makes more sense, lgtm
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/160/builds/965 Here is the relevant piece of the build log for the reference:
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/180/builds/964 Here is the relevant piece of the build log for the reference:
|
This is the first patch in a series of patches for the Sandbox Vectorizer project. SandboxIR is not tightly coupled to the Sandbox Vectorizer and could be used independently as a transactional layer on top of LLVM IR. For a detailed description of the project please refer to the RFC: https://discourse.llvm.org/t/rfc-sandbox-vectorizer-an-experimental-modular-vectorizer/79059 This patch adds some basic boilerplate code for the SandboxIR which includes parts of the SandboxIR `Value`, `User` and `Context` classes.
This reverts commit e8574e8.
This reverts commit 2f4f43c.
This is the first patch in a series of patches for the Sandbox Vectorizer project. SandboxIR is not tightly coupled to the Sandbox Vectorizer and could be used independently as a transactional layer on top of LLVM IR. For a detailed description of the project please refer to the RFC: https://discourse.llvm.org/t/rfc-sandbox-vectorizer-an-experimental-modular-vectorizer/79059 This patch adds some basic boilerplate code for the SandboxIR which includes parts of the SandboxIR `Value`, `User` and `Context` classes.
This reverts commit e8574e8.
This reverts commit 2f4f43c.
opt -passes=sandbox-vectorizer bbi-98907.ll -o /dev/null crashes with
Thanks for reporting the crash.
The vectorizer pass is empty at this point. It will just try to create
Sandbox IR and will quit. The crash is in the Sandbox IR creation phase,
which is still incomplete and under development. But thanks for reporting
the crash, it will help us with our Sandbox IR testing.
…On Mon, Sep 9, 2024 at 1:02 AM Mikael Holmén ***@***.***> wrote:
Hi,
I've no idea what to be expected but I noticed that
opt -passes=sandbox-vectorizer bbi-98907.ll -o /dev/null
crashes with
opt: ../lib/SandboxIR/SandboxIR.cpp:2542: llvm::sandboxir::Value *llvm::sandboxir::Context::registerValue(std::unique_ptr<Value> &&): Assertion `Pair.second && "Already exists!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: build-all/bin/opt -passes=sandbox-vectorizer bbi-98907.ll -o /dev/null
1. Running pass "function(sandbox-vectorizer)" on module "bbi-98907.ll"
2. Running pass "sandbox-vectorizer" on function "get"
#0 0x000055ee9d6fb447 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (build-all/bin/opt+0x419b447)
#1 0x000055ee9d6f8f2e llvm::sys::RunSignalHandlers() (build-all/bin/opt+0x4198f2e)
#2 0x000055ee9d6fbc6f SignalHandler(int) Signals.cpp:0:0
#3 0x00007f128e35fcf0 __restore_rt (/lib64/libpthread.so.0+0x12cf0)
#4 0x00007f128bf18acf raise (/lib64/libc.so.6+0x4eacf)
#5 0x00007f128beebea5 abort (/lib64/libc.so.6+0x21ea5)
#6 0x00007f128beebd79 _nl_load_domain.cold.0 (/lib64/libc.so.6+0x21d79)
#7 0x00007f128bf11426 (/lib64/libc.so.6+0x47426)
#8 0x000055eea0de61e7 llvm::sandboxir::Context::registerValue(std::unique_ptr<llvm::sandboxir::Value, std::default_delete<llvm::sandboxir::Value>>&&) (build-all/bin/opt+0x78861e7)
#9 0x000055eea0de7971 llvm::sandboxir::Context::createBasicBlock(llvm::BasicBlock*) (build-all/bin/opt+0x7887971)
#10 0x000055eea0de8861 llvm::sandboxir::Context::createFunction(llvm::Function*) (build-all/bin/opt+0x7888861)
#11 0x000055ee9f394dab llvm::SandboxVectorizerPass::runImpl(llvm::Function&) (build-all/bin/opt+0x5e34dab)
#12 0x000055ee9f3949fc llvm::SandboxVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x5e349fc)
#13 0x000055ee9f249f4d llvm::detail::PassModel<llvm::Function, llvm::SandboxVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#14 0x000055ee9d904d6a llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (build-all/bin/opt+0x43a4d6a)
#15 0x000055ee9ea8a2dd llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilderPipelines.cpp:0:0
#16 0x000055ee9d909901 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x43a9901)
#17 0x000055ee9ea837fd llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) PassBuilderPipelines.cpp:0:0
#18 0x000055ee9d9039fa llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (build-all/bin/opt+0x43a39fa)
#19 0x000055ee9ea2d1fb llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (build-all/bin/opt+0x54cd1fb)
#20 0x000055ee9d6c2bbd optMain (build-all/bin/opt+0x4162bbd)
#21 0x00007f128bf04d85 __libc_start_main (/lib64/libc.so.6+0x3ad85)
#22 0x000055ee9d6bc72e _start (build-all/bin/opt+0x415c72e)
Abort (core dumped)
bbi-98907.ll.gz
<https://github.com/user-attachments/files/16927359/bbi-98907.ll.gz>
—
Reply to this email directly, view it on GitHub
<#95814 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAP7T3V4ZU3EZCQKHUZF3A3ZVVIZNAVCNFSM6AAAAABJOOHRDCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMZXGQYDIOBXGU>
.
You are receiving this because you modified the open/close state.Message
ID: ***@***.***>
|
This is the first patch in a series of patches for the Sandbox Vectorizer project. For a detailed description of the project please refer to the RFC: https://discourse.llvm.org/t/rfc-sandbox-vectorizer-an-experimental-modular-vectorizer/79059
This patch adds some basic boilerplate code for the SandboxIR which includes parts of the
SBValue
class.