aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-10-26 00:30:17 +0300
committerAndrew Kelley <andrew@ziglang.org>2022-10-27 21:08:25 -0400
commitd03c47bf85b17f7727d2f1fe5bd497b311c9eba7 (patch)
treefc2008e0adbee552fd72215614eefe7e111dbf5d /src/codegen
parent398a3aae40bc03f6b7c6cd86d78a4cde125f2811 (diff)
downloadzig-d03c47bf85b17f7727d2f1fe5bd497b311c9eba7.tar.gz
zig-d03c47bf85b17f7727d2f1fe5bd497b311c9eba7.zip
Sema: use `runtime_value` instead of creating allocs
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/c.zig6
-rw-r--r--src/codegen/llvm.zig6
2 files changed, 10 insertions, 2 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index d6584d75ae..d0f76f0390 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -555,9 +555,13 @@ pub const DeclGen = struct {
dg: *DeclGen,
writer: anytype,
ty: Type,
- val: Value,
+ arg_val: Value,
location: ValueRenderLocation,
) error{ OutOfMemory, AnalysisFail }!void {
+ var val = arg_val;
+ if (val.castTag(.runtime_value)) |rt| {
+ val = rt.data;
+ }
const target = dg.module.getTarget();
if (val.isUndefDeep()) {
switch (ty.zigTypeTag()) {
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index ffc19cb6f6..938770629f 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -3187,7 +3187,11 @@ pub const DeclGen = struct {
return llvm_elem_ty;
}
- fn lowerValue(dg: *DeclGen, tv: TypedValue) Error!*llvm.Value {
+ fn lowerValue(dg: *DeclGen, arg_tv: TypedValue) Error!*llvm.Value {
+ var tv = arg_tv;
+ if (tv.val.castTag(.runtime_value)) |rt| {
+ tv.val = rt.data;
+ }
if (tv.val.isUndef()) {
const llvm_type = try dg.lowerType(tv.ty);
return llvm_type.getUndef();