Commit 91ecce3bc0

Andrew Kelley <andrew@ziglang.org>
2020-01-21 18:14:43
fix cache of cpu features
1 parent 6793af8
Changed files (1)
src-self-hosted
src-self-hosted/stage1.zig
@@ -13,6 +13,7 @@ const Target = std.Target;
 const self_hosted_main = @import("main.zig");
 const errmsg = @import("errmsg.zig");
 const DepTokenizer = @import("dep_tokenizer.zig").Tokenizer;
+const assert = std.debug.assert;
 
 var stderr_file: fs.File = undefined;
 var stderr: *io.OutStream(fs.File.WriteError) = undefined;
@@ -675,7 +676,7 @@ const Stage2CpuFeatures = struct {
         });
         errdefer allocator.free(builtin_str);
 
-        const cache_hash = try std.fmt.allocPrint0(allocator, "{}\n{x}", .{ cpu.name, cpu.features });
+        const cache_hash = try std.fmt.allocPrint0(allocator, "{}\n{x}", .{ cpu.name, cpu.features.bytes });
         errdefer allocator.free(cache_hash);
 
         self.* = Self{
@@ -696,29 +697,19 @@ const Stage2CpuFeatures = struct {
     ) ![*:0]const u8 {
         var llvm_features_buffer = try std.Buffer.initSize(allocator, 0);
         defer llvm_features_buffer.deinit();
-        // First, disable all features.
-        // This way, we only get the ones the user requests.
+
         const all_features = arch.allFeaturesList();
-        for (all_features) |feature| {
-            if (feature.llvm_name) |llvm_name| {
-                try llvm_features_buffer.append("-");
-                try llvm_features_buffer.append(llvm_name);
-                try llvm_features_buffer.append(",");
-            }
-        }
         for (all_features) |feature, index| {
-            if (!feature_set.isEnabled(@intCast(u8, index))) continue;
+            const llvm_name = feature.llvm_name orelse continue;
 
-            if (feature.llvm_name) |llvm_name| {
-                try llvm_features_buffer.append("+");
-                try llvm_features_buffer.append(llvm_name);
-                try llvm_features_buffer.append(",");
-            }
+            const plus_or_minus = "-+"[@boolToInt(feature_set.isEnabled(@intCast(u8, index)))];
+            try llvm_features_buffer.appendByte(plus_or_minus);
+            try llvm_features_buffer.append(llvm_name);
+            try llvm_features_buffer.append(",");
         }
+        assert(mem.endsWith(u8, llvm_features_buffer.toSliceConst(), ","));
+        llvm_features_buffer.shrink(llvm_features_buffer.len() - 1);
 
-        if (mem.endsWith(u8, llvm_features_buffer.toSliceConst(), ",")) {
-            llvm_features_buffer.shrink(llvm_features_buffer.len() - 1);
-        }
         return llvm_features_buffer.toOwnedSlice().ptr;
     }
 
@@ -730,7 +721,7 @@ const Stage2CpuFeatures = struct {
         const self = try allocator.create(Self);
         errdefer allocator.destroy(self);
 
-        const cache_hash = try std.fmt.allocPrint0(allocator, "\n{x}", .{feature_set});
+        const cache_hash = try std.fmt.allocPrint0(allocator, "\n{}", .{feature_set.bytes});
         errdefer allocator.free(cache_hash);
 
         const generic_arch_name = arch.genericName();