Skip to content

Commit 64f8a57

Browse files
committed
replace most aggregate interns in x86_64/CodeGen
1 parent 4e173b3 commit 64f8a57

File tree

1 file changed

+39
-63
lines changed

1 file changed

+39
-63
lines changed

src/arch/x86_64/CodeGen.zig

Lines changed: 39 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -170058,12 +170058,9 @@ fn airTrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
170058170058
});
170059170059
const splat_abi_size: u32 = @intCast(splat_ty.abiSize(zcu));
170060170060

170061-
const splat_val = try pt.intern(.{ .aggregate = .{
170062-
.ty = splat_ty.ip_index,
170063-
.storage = .{ .repeated_elem = mask_val.ip_index },
170064-
} });
170061+
const splat_val = try pt.aggregateSplatValue(splat_ty, mask_val);
170065170062

170066-
const splat_mcv = try self.lowerValue(.fromInterned(splat_val));
170063+
const splat_mcv = try self.lowerValue(splat_val);
170067170064
const splat_addr_mcv: MCValue = switch (splat_mcv) {
170068170065
.memory, .indirect, .load_frame => splat_mcv.address(),
170069170066
else => .{ .register = try self.copyToTmpRegister(.usize, splat_mcv.address()) },
@@ -171693,12 +171690,12 @@ fn airShlShrBinOp(self: *CodeGen, inst: Air.Inst.Index) !void {
171693171690
defer self.register_manager.unlockReg(shift_lock);
171694171691

171695171692
const mask_ty = try pt.vectorType(.{ .len = 16, .child = .u8_type });
171696-
const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
171697-
.ty = mask_ty.toIntern(),
171698-
.storage = .{ .elems = &([1]InternPool.Index{
171693+
const mask_mcv = try self.lowerValue(try pt.aggregateValue(
171694+
mask_ty,
171695+
&([1]InternPool.Index{
171699171696
(try rhs_ty.childType(zcu).maxIntScalar(pt, .u8)).toIntern(),
171700-
} ++ [1]InternPool.Index{.zero_u8} ** 15) },
171701-
} })));
171697+
} ++ [1]InternPool.Index{.zero_u8} ** 15),
171698+
));
171702171699
const mask_addr_reg = try self.copyToTmpRegister(.usize, mask_mcv.address());
171703171700
const mask_addr_lock = self.register_manager.lockRegAssumeUnused(mask_addr_reg);
171704171701
defer self.register_manager.unlockReg(mask_addr_lock);
@@ -181139,10 +181136,7 @@ fn genSetReg(
181139181136
.child = .u8_type,
181140181137
});
181141181138
try self.genSetReg(dst_reg, full_ty, try self.lowerValue(
181142-
.fromInterned(try pt.intern(.{ .aggregate = .{
181143-
.ty = full_ty.toIntern(),
181144-
.storage = .{ .repeated_elem = (try pt.intValue(.u8, 0xaa)).toIntern() },
181145-
} })),
181139+
try pt.aggregateSplatValue(full_ty, try pt.intValue(.u8, 0xaa)),
181146181140
), opts);
181147181141
},
181148181142
.x87 => try self.genSetReg(dst_reg, .f80, try self.lowerValue(
@@ -183565,10 +183559,7 @@ fn airSelect(self: *CodeGen, inst: Air.Inst.Index) !void {
183565183559
mask_elem_ty,
183566183560
@as(u8, 1) << @truncate(bit),
183567183561
)).toIntern();
183568-
const mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
183569-
.ty = mask_ty.toIntern(),
183570-
.storage = .{ .elems = mask_elems },
183571-
} })));
183562+
const mask_mcv = try self.lowerValue(try pt.aggregateValue(mask_ty, mask_elems));
183572183563
const mask_mem: Memory = .{
183573183564
.base = .{ .reg = try self.copyToTmpRegister(.usize, mask_mcv.address()) },
183574183565
.mod = .{ .rm = .{ .size = self.memSize(ty) } },
@@ -184296,10 +184287,9 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
184296184287
else
184297184288
try select_mask_elem_ty.minIntScalar(pt, select_mask_elem_ty)).toIntern();
184298184289
}
184299-
const select_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
184300-
.ty = select_mask_ty.toIntern(),
184301-
.storage = .{ .elems = select_mask_elems[0..mask_elems.len] },
184302-
} })));
184290+
const select_mask_mcv = try self.lowerValue(
184291+
try pt.aggregateValue(select_mask_ty, select_mask_elems[0..mask_elems.len]),
184292+
);
184303184293

184304184294
if (self.hasFeature(.sse4_1)) {
184305184295
const mir_tag: Mir.Inst.FixedTag = .{
@@ -184441,10 +184431,9 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
184441184431
})).toIntern();
184442184432
}
184443184433
const lhs_mask_ty = try pt.vectorType(.{ .len = max_abi_size, .child = .u8_type });
184444-
const lhs_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
184445-
.ty = lhs_mask_ty.toIntern(),
184446-
.storage = .{ .elems = lhs_mask_elems[0..max_abi_size] },
184447-
} })));
184434+
const lhs_mask_mcv = try self.lowerValue(
184435+
try pt.aggregateValue(lhs_mask_ty, lhs_mask_elems[0..max_abi_size]),
184436+
);
184448184437
const lhs_mask_mem: Memory = .{
184449184438
.base = .{ .reg = try self.copyToTmpRegister(.usize, lhs_mask_mcv.address()) },
184450184439
.mod = .{ .rm = .{ .size = .fromSize(@max(max_abi_size, 16)) } },
@@ -184472,10 +184461,9 @@ fn airShuffle(self: *CodeGen, inst: Air.Inst.Index) !void {
184472184461
})).toIntern();
184473184462
}
184474184463
const rhs_mask_ty = try pt.vectorType(.{ .len = max_abi_size, .child = .u8_type });
184475-
const rhs_mask_mcv = try self.lowerValue(.fromInterned(try pt.intern(.{ .aggregate = .{
184476-
.ty = rhs_mask_ty.toIntern(),
184477-
.storage = .{ .elems = rhs_mask_elems[0..max_abi_size] },
184478-
} })));
184464+
const rhs_mask_mcv = try self.lowerValue(
184465+
try pt.aggregateValue(rhs_mask_ty, rhs_mask_elems[0..max_abi_size]),
184466+
);
184479184467
const rhs_mask_mem: Memory = .{
184480184468
.base = .{ .reg = try self.copyToTmpRegister(.usize, rhs_mask_mcv.address()) },
184481184469
.mod = .{ .rm = .{ .size = .fromSize(@max(max_abi_size, 16)) } },
@@ -192924,36 +192912,30 @@ const Select = struct {
192924192912
break :res_scalar .{ res_scalar_ty, try pt.intValue_big(res_scalar_ty, res_big_int.toConst()) };
192925192913
},
192926192914
};
192927-
const res_val: Value = if (res_vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
192928-
.ty = (try pt.vectorType(.{
192929-
.len = len,
192930-
.child = res_scalar_ty.toIntern(),
192931-
})).toIntern(),
192932-
.storage = .{ .repeated_elem = res_scalar_val.toIntern() },
192933-
} })) else res_scalar_val;
192915+
const res_val = if (res_vector_len) |len| try pt.aggregateSplatValue(try pt.vectorType(.{
192916+
.len = len,
192917+
.child = res_scalar_ty.toIntern(),
192918+
}), res_scalar_val) else res_scalar_val;
192934192919
return .{ try cg.tempMemFromValue(res_val), true };
192935192920
},
192936-
.f64_0x1p52_0x1p84_mem => .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
192937-
.ty = (try pt.vectorType(.{ .len = 2, .child = .f64_type })).toIntern(),
192938-
.storage = .{ .elems = &.{
192921+
.f64_0x1p52_0x1p84_mem => .{ try cg.tempMemFromValue(
192922+
try pt.aggregateValue(try pt.vectorType(.{ .len = 2, .child = .f64_type }), &.{
192939192923
(try pt.floatValue(.f64, @as(f64, 0x1p52))).toIntern(),
192940192924
(try pt.floatValue(.f64, @as(f64, 0x1p84))).toIntern(),
192941-
} },
192942-
} }))), true },
192943-
.u32_0x1p52_hi_0x1p84_hi_0_0_mem => .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
192944-
.ty = (try pt.vectorType(.{ .len = 4, .child = .u32_type })).toIntern(),
192945-
.storage = .{ .elems = &(.{
192925+
}),
192926+
), true },
192927+
.u32_0x1p52_hi_0x1p84_hi_0_0_mem => .{ try cg.tempMemFromValue(
192928+
try pt.aggregateValue(try pt.vectorType(.{ .len = 4, .child = .u32_type }), &(.{
192946192929
(try pt.intValue(.u32, @as(u64, @bitCast(@as(f64, 0x1p52))) >> 32)).toIntern(),
192947192930
(try pt.intValue(.u32, @as(u64, @bitCast(@as(f64, 0x1p84))) >> 32)).toIntern(),
192948-
} ++ .{(try pt.intValue(.u32, 0)).toIntern()} ** 2) },
192949-
} }))), true },
192950-
.f32_0_0x1p64_mem => .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
192951-
.ty = (try pt.vectorType(.{ .len = 2, .child = .f32_type })).toIntern(),
192952-
.storage = .{ .elems = &.{
192931+
} ++ .{(try pt.intValue(.u32, 0)).toIntern()} ** 2)),
192932+
), true },
192933+
.f32_0_0x1p64_mem => .{ try cg.tempMemFromValue(
192934+
try pt.aggregateValue(try pt.vectorType(.{ .len = 2, .child = .f32_type }), &.{
192953192935
(try pt.floatValue(.f32, @as(f32, 0))).toIntern(),
192954192936
(try pt.floatValue(.f32, @as(f32, 0x1p64))).toIntern(),
192955-
} },
192956-
} }))), true },
192937+
}),
192938+
), true },
192957192939
.pshufb_splat_mem => |splat_spec| {
192958192940
const zcu = pt.zcu;
192959192941
assert(spec.type.isVector(zcu) and spec.type.childType(zcu).toIntern() == .u8_type);
@@ -193110,13 +193092,10 @@ const Select = struct {
193110193092
const mem_size = cg.unalignedSize(spec.type);
193111193093
return .{ try cg.tempMemFromAlignedValue(
193112193094
if (mem_size < 16) .fromByteUnits(mem_size) else .none,
193113-
.fromInterned(try pt.intern(.{ .aggregate = .{
193114-
.ty = if (mem_size < 16)
193115-
(try pt.arrayType(.{ .len = elems.len, .child = elem_ty.toIntern() })).toIntern()
193116-
else
193117-
spec.type.toIntern(),
193118-
.storage = .{ .elems = elems },
193119-
} })),
193095+
try pt.aggregateValue(if (mem_size < 16) try pt.arrayType(.{
193096+
.len = elems.len,
193097+
.child = elem_ty.toIntern(),
193098+
}) else spec.type, elems),
193120193099
), true };
193121193100
},
193122193101
.splat_float_mem => |splat_spec| {
@@ -193133,10 +193112,7 @@ const Select = struct {
193133193112
.zero => 0.0,
193134193113
}))).toIntern());
193135193114
@memset(elems[inside_len..], (try pt.floatValue(elem_ty, splat_spec.outside)).toIntern());
193136-
return .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
193137-
.ty = spec.type.toIntern(),
193138-
.storage = .{ .elems = elems },
193139-
} }))), true };
193115+
return .{ try cg.tempMemFromValue(try pt.aggregateValue(spec.type, elems)), true };
193140193116
},
193141193117
.frame => |frame_index| .{ try cg.tempInit(spec.type, .{ .load_frame = .{
193142193118
.index = frame_index,

0 commit comments

Comments
 (0)