Skip to content

Conversation

kr-2003
Copy link
Contributor

@kr-2003 kr-2003 commented Aug 24, 2025

This is a refactoring PR. It sinks RemoteJITUtils into Interpreter and IncrementalExecutor classes.

Comment on lines +334 to +337
if (::OffloadArch.empty()) {
::OffloadArch = "sm_35";
}
CB.SetOffloadArch(OffloadArch);
CB.SetOffloadArch(::OffloadArch);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these changes relevant to the current PR?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes. if not done, it gives following error:

error: reference to 'OffloadArch' is ambiguous

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which compiler is this? Why it works upstream?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ping.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(base) llvm-project-test % clang --version       
Homebrew clang version 20.1.6
Target: arm64-apple-darwin24.5.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/20.1.6/bin
Configuration file: /opt/homebrew/etc/clang/arm64-apple-darwin24.cfg'

@vgvassilev vgvassilev requested a review from lhames August 25, 2025 12:07
Copy link

github-actions bot commented Aug 25, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@kr-2003 kr-2003 requested a review from vgvassilev August 26, 2025 15:12
@kr-2003 kr-2003 requested a review from vgvassilev August 27, 2025 16:12
bool UseSharedMemory;

/// String representing the slab allocation size for memory management.
std::string SlabAllocateSizeString;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be an unsigned int I think. All of these should have good default values.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually this has to be string. this is how it is handled:

static llvm::cl::opt<std::string> SlabAllocateSizeString(
    "slab-allocate",
    llvm::cl::desc("Allocate from a slab of the given size "
                   "(allowable suffixes: Kb, Mb, Gb. default = "
                   "Kb)"),
    llvm::cl::init(""), llvm::cl::cat(OOPCategory));

it has suffix

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can transform it before putting it in the config.

Comment on lines +334 to +337
if (::OffloadArch.empty()) {
::OffloadArch = "sm_35";
}
CB.SetOffloadArch(OffloadArch);
CB.SetOffloadArch(::OffloadArch);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which compiler is this? Why it works upstream?

@kr-2003 kr-2003 changed the title [Clang-Repl] Add Lambda Support, PID Retrieval, and Dynamic liborc_rt Path in Clang-Repl [Clang-Repl] Sinking RemoteJITUtils into Interpreter class(Refactoring) Aug 31, 2025
@kr-2003 kr-2003 requested a review from vgvassilev August 31, 2025 18:18
/// Indicates whether to use shared memory for communication.
bool UseSharedMemory;
/// String representing the slab allocation size for memory management.
std::string SlabAllocateSizeString;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
std::string SlabAllocateSizeString;
unsigned SlabAllocateSize = 1024;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still believe that having this as string should not be changed. otherwise, we will have more code for conversion

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code for conversion will be exactly the same. It's location will be different. I do not see a reason for the user API to take strings when it can take the right types constructed programmatically.

std::string OOPExecutor;
std::string OOPExecutorConnect;
/// Indicates whether to use shared memory for communication.
bool UseSharedMemory;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bool UseSharedMemory;
bool UseSharedMemory = true;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

already initialised in the constructor

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's probably clearer to initialize it here too.

public:
struct OutOfProcessJITConfig {
/// Indicates whether out-of-process JIT execution is enabled.
bool IsOutOfProcess;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bool IsOutOfProcess;
bool IsOutOfProcess = false;

@@ -535,9 +659,14 @@ llvm::Error Interpreter::CreateExecutor() {
llvm::Error Err = llvm::Error::success();
#ifdef __EMSCRIPTEN__
auto Executor = std::make_unique<WasmIncrementalExecutor>(*TSCtx);
#else
#ifndef _WIN32
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need a special branch -- we just need to pass in empty JitConfig.

Comment on lines +423 to +443
DiagnosticsEngine &Diags = CI->getDiagnostics();
std::string BinaryName = llvm::sys::fs::getMainExecutable(nullptr, nullptr);
driver::Driver Driver(BinaryName, Triple.str(), Diags);
std::vector<const char *> Args = {"clang", "--version"};
std::unique_ptr<clang::driver::Compilation> C(
Driver.BuildCompilation(Args));
if (!C) {
return llvm::make_error<llvm::StringError>(
"Failed to create driver compilation for out-of-process JIT",
std::error_code());
}
if (Config.OrcRuntimePath == "") {
const clang::driver::ToolChain &TC = C->getDefaultToolChain();

auto OrcRuntimePathOrErr = getOrcRuntimePath(TC);
if (!OrcRuntimePathOrErr) {
return OrcRuntimePathOrErr.takeError();
}

Config.OrcRuntimePath = *OrcRuntimePathOrErr;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to happen on the existing compiler instance that we create and not on a fake one clang --version.

@@ -521,6 +618,23 @@ llvm::Error Interpreter::CreateExecutor() {
return llvm::make_error<llvm::StringError>("Operation failed. "
"No code generator available",
std::error_code());
#ifndef _WIN32
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We must check the target triple, not an ifdef because we can be cross compiling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants