Skip to content

Commit 9324982

Browse files
authored
Rollup merge of #149661 - alinas:llvm-22-runtimelibraryinfo-fix, r=cuviper
Fix for LLVM22 making lowering decisions dependent on RuntimeLibraryInfo. LLVM added codegen decision making based on RuntimeLibraryInfo. Mirror the change in Rust's codegen. LLVM reference commit: llvm/llvm-project@04c81a9.
2 parents d076da7 + ad73972 commit 9324982

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

compiler/rustc_codegen_llvm/src/back/write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ fn write_output_file<'ll>(
7575
let result = unsafe {
7676
let pm = llvm::LLVMCreatePassManager();
7777
llvm::LLVMAddAnalysisPasses(target, pm);
78-
llvm::LLVMRustAddLibraryInfo(pm, m, no_builtins);
78+
llvm::LLVMRustAddLibraryInfo(target, pm, m, no_builtins);
7979
llvm::LLVMRustWriteOutputFile(
8080
target,
8181
pm,

compiler/rustc_codegen_llvm/src/llvm/ffi.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2379,6 +2379,7 @@ unsafe extern "C" {
23792379
) -> *mut TargetMachine;
23802380

23812381
pub(crate) fn LLVMRustAddLibraryInfo<'a>(
2382+
T: &TargetMachine,
23822383
PM: &PassManager<'a>,
23832384
M: &'a Module,
23842385
DisableSimplifyLibCalls: bool,

compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include "llvm/ADT/SmallVector.h"
77
#include "llvm/Analysis/Lint.h"
88
#include "llvm/Analysis/TargetLibraryInfo.h"
9+
#if LLVM_VERSION_GE(22, 0)
10+
#include "llvm/Analysis/RuntimeLibcallInfo.h"
11+
#endif
912
#include "llvm/Bitcode/BitcodeWriter.h"
1013
#include "llvm/Bitcode/BitcodeWriterPass.h"
1114
#include "llvm/CodeGen/CommandFlags.h"
@@ -379,13 +382,20 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
379382

380383
// Unfortunately, the LLVM C API doesn't provide a way to create the
381384
// TargetLibraryInfo pass, so we use this method to do so.
382-
extern "C" void LLVMRustAddLibraryInfo(LLVMPassManagerRef PMR, LLVMModuleRef M,
385+
extern "C" void LLVMRustAddLibraryInfo(LLVMTargetMachineRef T,
386+
LLVMPassManagerRef PMR, LLVMModuleRef M,
383387
bool DisableSimplifyLibCalls) {
384388
auto TargetTriple = Triple(unwrap(M)->getTargetTriple());
389+
TargetOptions *Options = &unwrap(T)->Options;
385390
auto TLII = TargetLibraryInfoImpl(TargetTriple);
386391
if (DisableSimplifyLibCalls)
387392
TLII.disableAllFunctions();
388393
unwrap(PMR)->add(new TargetLibraryInfoWrapperPass(TLII));
394+
#if LLVM_VERSION_GE(22, 0)
395+
unwrap(PMR)->add(new RuntimeLibraryInfoWrapper(
396+
TargetTriple, Options->ExceptionModel, Options->FloatABIType,
397+
Options->EABIVersion, Options->MCOptions.ABIName, Options->VecLib));
398+
#endif
389399
}
390400

391401
extern "C" void LLVMRustSetLLVMOptions(int Argc, char **Argv) {

0 commit comments

Comments
 (0)