diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2023-10-15 16:49:59 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-10-21 21:38:41 -0400 |
| commit | ecfb18286a5270943382effdf383bae4546b184f (patch) | |
| tree | a0f2853e50a26ab2d7e98f92cde006ac66de022a /src/codegen/llvm.zig | |
| parent | 3cd3052d4d303dbae7d517fa40f6d171c957afdd (diff) | |
| download | zig-ecfb18286a5270943382effdf383bae4546b184f.tar.gz zig-ecfb18286a5270943382effdf383bae4546b184f.zip | |
migrate make_ptr_const to new anonymous decl mechanism
Instead of creating Module.Decl objects, directly create InternPool
pointer values using the anon_decl Addr encoding.
The LLVM backend needed code to notice the alignment of the pointer and
lower accordingly. The other backends likely need a similar change.
Diffstat (limited to 'src/codegen/llvm.zig')
| -rw-r--r-- | src/codegen/llvm.zig | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index cddd4340d7..9bb012deb1 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -3049,6 +3049,7 @@ pub const Object = struct { o: *Object, decl_val: InternPool.Index, llvm_addr_space: Builder.AddrSpace, + alignment: InternPool.Alignment, ) Error!Builder.Variable.Index { // TODO: Add address space to the anon_decl_map const gop = try o.anon_decl_map.getOrPut(o.gpa, decl_val); @@ -3068,6 +3069,8 @@ pub const Object = struct { try variable_index.setInitializer(try o.lowerValue(decl_val), &o.builder); variable_index.setLinkage(.internal, &o.builder); variable_index.setUnnamedAddr(.unnamed_addr, &o.builder); + if (alignment != .none) + variable_index.setAlignment(alignment.toLlvm(), &o.builder); return variable_index; } @@ -4415,7 +4418,8 @@ pub const Object = struct { const addr_space = target_util.defaultAddressSpace(target, .global_constant); const llvm_addr_space = toLlvmAddressSpace(addr_space, target); - const llvm_global = (try o.resolveGlobalAnonDecl(decl_val, llvm_addr_space)).ptrConst(&o.builder).global; + const alignment = ptr_ty.ptrAlignment(mod); + const llvm_global = (try o.resolveGlobalAnonDecl(decl_val, llvm_addr_space, alignment)).ptrConst(&o.builder).global; const llvm_val = try o.builder.convConst( .unneeded, |
