Commit c57b4e70b0

antlilja <liljaanton2001@gmail.com>
2024-01-20 00:13:08
Builder: Add function_attributes_set
1 parent 52e8434
Changed files (1)
src
codegen
src/codegen/llvm/Builder.zig
@@ -37,6 +37,8 @@ attributes_map: std.AutoArrayHashMapUnmanaged(void, void),
 attributes_indices: std.ArrayListUnmanaged(u32),
 attributes_extra: std.ArrayListUnmanaged(u32),
 
+function_attributes_set: std.AutoArrayHashMapUnmanaged(FunctionAttributes, void),
+
 globals: std.AutoArrayHashMapUnmanaged(String, Global),
 next_unnamed_global: String,
 next_replaced_global: String,
@@ -8248,6 +8250,8 @@ pub fn init(options: Options) InitError!Builder {
         .attributes_indices = .{},
         .attributes_extra = .{},
 
+        .function_attributes_set = .{},
+
         .globals = .{},
         .next_unnamed_global = @enumFromInt(0),
         .next_replaced_global = .none,
@@ -8385,6 +8389,8 @@ pub fn deinit(self: *Builder) void {
     self.attributes_indices.deinit(self.gpa);
     self.attributes_extra.deinit(self.gpa);
 
+    self.function_attributes_set.deinit(self.gpa);
+
     self.globals.deinit(self.gpa);
     self.next_unique_global_id.deinit(self.gpa);
     self.aliases.deinit(self.gpa);
@@ -8825,12 +8831,16 @@ pub fn attrs(self: *Builder, attributes: []Attribute.Index) Allocator.Error!Attr
 }
 
 pub fn fnAttrs(self: *Builder, fn_attributes: []const Attributes) Allocator.Error!FunctionAttributes {
-    return @enumFromInt(try self.attrGeneric(@ptrCast(
+    try self.function_attributes_set.ensureUnusedCapacity(self.gpa, 1);
+    const function_attributes: FunctionAttributes = @enumFromInt(try self.attrGeneric(@ptrCast(
         fn_attributes[0..if (std.mem.lastIndexOfNone(Attributes, fn_attributes, &.{.none})) |last|
             last + 1
         else
             0],
     )));
+
+    _ = self.function_attributes_set.getOrPutAssumeCapacity(function_attributes);
+    return function_attributes;
 }
 
 pub fn addGlobal(self: *Builder, name: String, global: Global) Allocator.Error!Global.Index {