about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper
AgeCommit message (Collapse)AuthorLines
2025-09-25Rollup merge of #147015 - Zalathar:dispose-tm, r=lqdStuart Cook-4/+0
Use `LLVMDisposeTargetMachine` After bumping the minimum LLVM version to 20 (rust-lang/rust#145071), we no longer need to run any custom code when disposing of a TargetMachine, so we can just use the upstream LLVM-C function.
2025-09-25Use `LLVMDisposeTargetMachine`Zalathar-4/+0
2025-09-24llvm: add a destructor to call releaseSerializerJosh Stone-0/+8
2025-09-23llvm: update remarks support on LLVM 22Augie Fackler-0/+5
LLVM change dfbd76bda01e removed separate remark support entirely, but it turns out we can just drop the parameter and everything appears to work fine. Fixes 146912 as far as I can tell (the test passes.) @rustbot label llvm-main
2025-09-21emit attribute for readonly non-pure inline assemblyFolkert de Vries-0/+5
2025-09-19Auto merge of #146700 - Zalathar:quoted-args, r=nikicbors-21/+7
cg_llvm: Move target machine command-line quoting from C++ to Rust When this code was introduced in rust-lang/rust#130446 and rust-lang/rust#131805, it was complicated by the need to maintain compatibility with earlier versions of LLVM. Now that LLVM 20 is the baseline (rust-lang/rust#145071), we can do all of the quoting in pure Rust code, and pass two flat strings to LLVM to be used as-is. --- In this PR, my priority has been to preserve the existing behaviour as much as possible, without worrying too much about what the behaviour *should* be. (Though I did avoid a leading space before the first argument.)
2025-09-18Move target machine command-line quoting from C++ to RustZalathar-21/+7
2025-09-17Use `LLVMDIBuilderCreateTypedef`Zalathar-10/+0
2025-09-17Use `LLVMDIBuilderCreateQualifiedType`Zalathar-7/+0
2025-09-17Use `LLVMDIBuilderCreateStaticMemberType`Zalathar-10/+0
2025-09-17Use `LLVMDIBuilderCreateMemberType`Zalathar-11/+0
2025-09-17Rollup merge of #146631 - Zalathar:di-builder, r=nnethercoteStuart Cook-60/+0
cg_llvm: Replace some DIBuilder wrappers with LLVM-C API bindings (part 3) - Part of rust-lang/rust#134001 - Follow-up to rust-lang/rust#136375 - Follow-up to rust-lang/rust#136632 --- This is another batch of LLVMDIBuilder binding migrations, replacing some our own LLVMRust bindings with bindings to upstream LLVM-C APIs. This PR migrates all of the bindings that were touched by rust-lang/rust#136632, plus `LLVMDIBuilderCreateStructType`.
2025-09-17Use `LLVMDIBuilderCreateStructType`Zalathar-14/+0
2025-09-17Use `LLVMDIBuilderCreatePointerType`Zalathar-9/+0
2025-09-17Use `LLVMDIBuilderCreateBasicType`Zalathar-8/+0
2025-09-17Use `LLVMDIBuilderCreateArrayType`Zalathar-9/+0
2025-09-17Use `LLVMDIBuilderCreateUnionType`Zalathar-13/+0
2025-09-17Use `LLVMDIBuilderCreateSubroutineType`Zalathar-7/+0
2025-09-16Update the minimum external LLVM to 20Josh Stone-110/+30
2025-09-11remove unused getLongestEntryLengthklensy-8/+0
2025-09-11remove unused macroklensy-116/+0
2025-09-06Remove want_summary argument from prepare_thinbjorn3-8/+3
It is always false nowadays. ThinLTO summary writing is instead done by llvm_optimize.
2025-08-29Update to ar_archive_writer 0.5.1Daniel Paoliello-42/+57
2025-08-28Move ___asan_globals_registered exportbjorn3-6/+0
All other sanitizer symbols are handled in prepare_lto already.
2025-08-28Auto merge of #145877 - nikic:capture-address, r=tmiaskobors-10/+5
Use captures(address) instead of captures(none) for indirect args While provenance cannot be captured through these arguments, the address / object identity can. Fixes https://github.com/rust-lang/rust/issues/137668. r? `@ghost`
2025-08-26Use captures(address) instead of captures(none) for indirect argsNikita Popov-10/+5
While provenance cannot be captured through these arguments, the address / object identity can.
2025-08-26Assert that LLVM range-attribute values don't exceed 128 bitsZalathar-0/+3
The underlying implementation of `LLVMCreateConstantRangeAttribute` assumes that each of `LowerWords` and `UpperWords` points to enough u64 values to define an integer of the specified bit-length, and will encounter UB if that is not the case. Our safe wrapper function always passes pointers to `[u64; 2]` arrays, regardless of the bit-length specified. That's fine in practice, because scalar primitives never exceed 128 bits, but it is technically a soundness hole in a safe function. We can close the soundness hole by explicitly asserting `size_bits <= 128`. This is effectively just a stricter version of the existing check that the value must be small enough to fit in `c_uint`.
2025-08-20Tell LLVM about read-only capturesNikita Popov-0/+8
`&Freeze` parameters are not only `readonly` within the function, but any captures of the pointer can also only be used for reads. This can now be encoded using the `captures(address, read_provenance)` attribute.
2025-08-19Rollup merge of #145484 - Zalathar:archive-builder, r=bjorn3Stuart Cook-208/+0
Remove `LlvmArchiveBuilder` and supporting code/bindings Switching over to the newer Rust-based `ArArchiveBuilder` happened in rust-lang/rust#128936, a year ago. Per the comment in `new_archive_builder`, that seems like enough time to justify removing the older, unused `LlvmArchiveBuilder` implementation and its associated bindings. Fixes rust-lang/rust#128955.
2025-08-16Remove `LlvmArchiveBuilder` and supporting code/bindingsZalathar-208/+0
2025-08-15Use `LLVMGetTypeKind`Zalathar-54/+0
2025-08-15Use `LLVMSetTailCallKind`Zalathar-26/+0
2025-08-11Set dead_on_return attribute for indirect argumentsNikita Popov-0/+7
Set the dead_on_return attribute (added in LLVM 21) for arguments that are passed indirectly, but not byval. This indicates that the value of the argument on return does not matter, enabling additional dead store elimination.
2025-08-06coverage: Remove all unstable support for MC/DC instrumentationZalathar-62/+3
2025-07-31Rollup merge of #144232 - xacrimon:explicit-tail-call, r=WaffleLapkinStuart Cook-0/+26
Implement support for `become` and explicit tail call codegen for the LLVM backend This PR implements codegen of explicit tail calls via `become` in `rustc_codegen_ssa` and support within the LLVM backend. Completes a task on (https://github.com/rust-lang/rust/issues/112788). This PR implements all the necessary bits to make explicit tail calls usable, other backends have received stubs for now and will ICE if you use `become` on them. I suspect there is some bikeshedding to be done on how we should go about implementing this for other backends, but it should be relatively straightforward for GCC after this is merged. During development I also put together a POC bytecode VM based on tail call dispatch to test these changes out and analyze the codegen to make sure it generates expected assembly. That is available [here](https://github.com/xacrimon/tcvm).
2025-07-28Rollup merge of #144503 - bjorn3:lto_refactors3, r=petrochenkovMatthias Krüger-34/+0
Various refactors to the codegen coordinator code (part 3) Continuing from https://github.com/rust-lang/rust/pull/144062 this removes an option without any known users, uses the object crate in favor of LLVM for getting the LTO bitcode and improves the coordinator channel handling.
2025-07-26Implement support for explicit tail calls in the MIR block builders and the ↵Joel Wejdenstål-0/+26
LLVM codegen backend.
2025-07-25Use the object crate rather than LLVM for extracting bitcode sectionsbjorn3-34/+0
2025-07-23RustWrapper: Suppress getNextNonDebugInfoInstructionWANG Rui-1/+1
Link: https://github.com/llvm/llvm-project/pull/144383
2025-07-22Rollup merge of #142097 - ZuseZ4:offload-host1, r=oli-obk许杰友 Jieyou Xu (Joe)-0/+37
gpu offload host code generation r? ghost This will generate most of the host side code to use llvm's offload feature. The first PR will only handle automatic mem-transfers to and from the device. So if a user calls a kernel, we will copy inputs back and forth, but we won't do the actual kernel launch. Before merging, we will use LLVM's Info infrastructure to verify that the memcopies match what openmp offloa generates in C++. `LIBOMPTARGET_INFO=-1 ./my_rust_binary` should print that a memcpy to and later from the device is happening. A follow-up PR will generate the actual device-side kernel which will then do computations on the GPU. A third PR will implement manual host2device and device2host functionality, but the goal is to minimize cases where a user has to overwrite our default handling due to performance issues. I'm trying to get a full MVP out first, so this just recognizes GPU functions based on magic names. The final frontend will obviously move this over to use proper macros, like I'm already doing it for the autodiff work. This work will also be compatible with std::autodiff, so one can differentiate GPU kernels. Tracking: - https://github.com/rust-lang/rust/issues/131513
2025-07-20Rollup merge of #144116 - nikic:llvm-21-fixes, r=dianqkMatthias Krüger-1/+4
Fixes for LLVM 21 This fixes compatibility issues with LLVM 21 without performing the actual upgrade. Split out from https://github.com/rust-lang/rust/pull/143684. This fixes three issues: * Updates the AMDGPU data layout for address space 8. * Makes emit-arity-indicator.rs a no_core test, so it doesn't fail on non-x86 hosts. * Explicitly sets the exception model for wasm, as this is no longer implied by `-wasm-enable-eh`.
2025-07-19Rollup merge of #142444 - KMJ-007:autodiff-codegen-test, r=ZuseZ4Matthias Krüger-0/+13
adding run-make test to autodiff r? `@ZuseZ4`
2025-07-18add various wrappers for gpu code generationManuel Drehwald-0/+37
2025-07-18Pass wasm exception model to TargetOptionsNikita Popov-1/+4
This is no longer implied by -wasm-enable-eh.
2025-07-02awhile -> a while where appropriateнаб-1/+1
2025-07-02fix: Fix TypePrintFn flag passing for autodiff codegenKaran Janthe-0/+13
Signed-off-by: Karan Janthe <karanjanthe@gmail.com>
2025-05-11Use `LLVMGetInlineAsm`Zalathar-27/+0
This LLVM-C binding replaces the existing `LLVMRustInlineAsm` function.
2025-05-01PassWrapper: adapt for ↵Erick Tryzelaar-0/+5
llvm/llvm-project@f137c3d592e96330e450a8fd63ef7e8877fc1908 In LLVM 21 PR https://github.com/llvm/llvm-project/pull/130940 `TargetRegistry::createTargetMachine` was changed to take a `const Triple&` and has deprecated the old `StringRef` method. @rustbot label llvm-main
2025-04-29Rollup merge of #140400 - durin42:llvm-21-getguid, r=cuviperTrevor Gross-4/+9
PassWrapper: adapt for llvm/llvm-project@d3d856ad8469 LLVM 21 moves to making it more explicit what this function call is doing, but nothing has changed behaviorally, so for now we just adjust to using the new name of the function. `@rustbot` label llvm-main
2025-04-28PassWrapper: adapt for llvm/llvm-project@d3d856ad8469Augie Fackler-4/+9
LLVM 21 moves to making it more explicit what this function call is doing, but nothing has changed behaviorally, so for now we just adjust to using the new name of the function. @rustbot label llvm-main