rust/compiler
Flakebi cde7e805ad
Cast allocas to default address space
Pointers for variables all need to be in the same address space for
correct compilation. Therefore ensure that even if an `alloca` is
created in a different address space, it is casted to the default
address space before its value is used.

This is necessary for the amdgpu target and others where the default
address space for `alloca`s is not 0.

For example the following code compiles incorrectly when not casting the
address space to the default one:

```rust
fn f(p: *const i8 /* addrspace(0) */) -> *const i8 /* addrspace(0) */ {
    let local = 0i8; /* addrspace(5) */
    let res = if cond { p } else { &raw const local };
    res
}
```

results in

```llvm
    %local = alloca addrspace(5) i8
    %res = alloca addrspace(5) ptr

if:
    ; Store 64-bit flat pointer
    store ptr %p, ptr addrspace(5) %res

else:
    ; Store 32-bit scratch pointer
    store ptr addrspace(5) %local, ptr addrspace(5) %res

ret:
    ; Load and return 64-bit flat pointer
    %res.load = load ptr, ptr addrspace(5) %res
    ret ptr %res.load
```

For amdgpu, `addrspace(0)` are 64-bit pointers, `addrspace(5)` are
32-bit pointers.
The above code may store a 32-bit pointer and read it back as a 64-bit
pointer, which is obviously wrong and cannot work. Instead, we need to
`addrspacecast %local to ptr addrspace(0)`, then we store and load the
correct type.
2025-02-10 21:38:44 +01:00
..
rustc
rustc_abi compiler: Add a statement-of-intent to rustc_abi 2024-12-30 15:21:27 -08:00
rustc_arena
rustc_ast upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_ast_ir
rustc_ast_lowering Fix ICE when opaque captures a duplicated/invalid lifetime 2025-01-01 19:32:51 +00:00
rustc_ast_passes Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_ast_pretty Rollup merge of #134834 - dtolnay:unnamedcall, r=compiler-errors 2024-12-27 18:43:05 -08:00
rustc_attr_data_structures rename rustc_attr to rustc_attr_parsing and create rustc_attr_data_structures 2024-12-16 19:08:19 +01:00
rustc_attr_parsing Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_baked_icu_data
rustc_borrowck Rollup merge of #134945 - compiler-errors:map-mutate-nits, r=estebank 2025-01-01 16:35:31 +11:00
rustc_builtin_macros Rollup merge of #134877 - DavisRayM:129966-format-string-help-message, r=estebank 2025-01-01 16:35:30 +11:00
rustc_codegen_cranelift Update compiler-builtins to 0.1.140 2024-12-27 22:26:08 +00:00
rustc_codegen_gcc upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_codegen_llvm Cast allocas to default address space 2025-02-10 21:38:44 +01:00
rustc_codegen_ssa upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_const_eval Auto merge of #134757 - RalfJung:const_swap, r=scottmcm 2024-12-30 23:46:42 +00:00
rustc_data_structures MatchBranchSimplification: Consider empty-unreachable otherwise branch 2024-12-27 10:57:46 +00:00
rustc_driver
rustc_driver_impl Rollup merge of #131439 - mu001999-contrib:cleanup/static-mut, r=estebank 2025-01-01 16:35:29 +11:00
rustc_error_codes Rewrite the error-code docs for coverage attributes [E0788] 2024-12-25 19:23:48 +11:00
rustc_error_messages Convert some Into impls into From impls 2024-12-31 01:56:33 +00:00
rustc_errors Convert some Into impls into From impls 2024-12-31 01:56:33 +00:00
rustc_expand Rollup merge of #131522 - c410-f3r:unlock-rfc-2011, r=chenyukang 2024-12-26 21:56:47 -05:00
rustc_feature Revert "Auto merge of #130766 - clarfonthey:stable-coverage-attribute, r=wesleywiser" 2024-12-23 12:30:37 +11:00
rustc_fluent_macro
rustc_fs_util
rustc_graphviz
rustc_hir Rollup merge of #135000 - compiler-errors:opaque-captures-dupe, r=lqd 2025-01-01 22:04:18 +01:00
rustc_hir_analysis Rollup merge of #135000 - compiler-errors:opaque-captures-dupe, r=lqd 2025-01-01 22:04:18 +01:00
rustc_hir_pretty Support pretty-printing dyn* trait objects 2024-12-20 21:31:21 -08:00
rustc_hir_typeck Obligation tweaks 2024-12-31 20:46:06 +00:00
rustc_incremental Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_index improve bit_set assertion 2024-12-29 17:47:30 +00:00
rustc_index_macros update rustc_index_macros feature handling 2024-12-19 20:32:12 +03:00
rustc_infer fix a couple nits 2024-12-30 06:51:16 +00:00
rustc_interface Rollup merge of #134514 - bjorn3:more_driver_refactors, r=jieyouxu 2024-12-20 21:47:00 +08:00
rustc_lexer Add test to check unicode identifier version 2024-12-09 06:23:59 -08:00
rustc_lint Rollup merge of #134979 - estebank:default-lint-sugg, r=compiler-errors 2025-01-01 16:35:32 +11:00
rustc_lint_defs Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_llvm upstream rustc_codegen_llvm changes for enzyme/autodiff 2025-01-01 21:42:45 +01:00
rustc_log
rustc_macros Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_metadata Convert some Into impls into From impls 2024-12-31 01:56:33 +00:00
rustc_middle Rollup merge of #134949 - compiler-errors:froms, r=jieyouxu 2024-12-31 14:12:49 +11:00
rustc_mir_build Fix typos 2024-12-27 21:35:57 +08:00
rustc_mir_dataflow Auto merge of #134625 - compiler-errors:unsafe-binders-ty, r=oli-obk 2024-12-24 00:51:51 +00:00
rustc_mir_transform MatchBranchSimplification: Consider empty-unreachable otherwise branch 2024-12-27 10:57:46 +00:00
rustc_monomorphize Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_next_trait_solver Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_parse Rollup merge of #134884 - calciumbe:patch1, r=jieyouxu 2024-12-29 21:18:07 +01:00
rustc_parse_format add suggestion for wrongly ordered format parameters 2024-12-30 06:14:26 -08:00
rustc_passes Overhaul error messages for disallowed coverage attributes 2024-12-25 16:17:09 +11:00
rustc_pattern_analysis Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_privacy Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_query_impl Rename ty_def_id so people will stop using it by accident 2024-12-13 16:36:38 +00:00
rustc_query_system Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
rustc_resolve Fix spacing of markdown code block fences in compiler rustdoc 2024-12-22 10:16:31 -08:00
rustc_sanitizers Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_serialize
rustc_session make -Csoft-float have an effect on all ARM targets 2024-12-29 11:10:36 +01:00
rustc_smir Auto merge of #134625 - compiler-errors:unsafe-binders-ty, r=oli-obk 2024-12-24 00:51:51 +00:00
rustc_span Auto merge of #134757 - RalfJung:const_swap, r=scottmcm 2024-12-30 23:46:42 +00:00
rustc_symbol_mangling Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_target musleabi* targets: we no longer need to set gnueabi* for LLVM now that we set the float ABI explicitly 2024-12-30 21:59:05 +01:00
rustc_trait_selection Rollup merge of #133292 - dianne:e0277-suggest-deref, r=estebank 2025-01-01 16:35:30 +11:00
rustc_traits
rustc_transmute add comment explaining why ty_and_layout_field is not used 2024-12-18 11:01:54 +01:00
rustc_ty_utils Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_type_ir Begin to implement type system layer of unsafe binders 2024-12-22 21:57:57 +00:00
rustc_type_ir_macros
stable_mir make no-variant types a dedicated Variants variant 2024-12-18 11:01:54 +01:00