aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2022-08-22 00:21:31 +0200
committerRobin Voetter <robin@voetter.nl>2022-10-12 20:36:12 +0200
commit5d429b03e3d43e937e2b517d594275034a873959 (patch)
tree2071dddfb806b692bf51864dd413c60c90d42bdd /src/codegen/llvm.zig
parent5f3b91437f5cd23bcae66227932555b7abe32669 (diff)
downloadzig-5d429b03e3d43e937e2b517d594275034a873959.tar.gz
zig-5d429b03e3d43e937e2b517d594275034a873959.zip
stage2: add @addrSpaceCast builtin
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index f400e841ea..aebd7a7dd0 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -4512,6 +4512,7 @@ pub const FuncGen = struct {
.aggregate_init => try self.airAggregateInit(inst),
.union_init => try self.airUnionInit(inst),
.prefetch => try self.airPrefetch(inst),
+ .addrspace_cast => try self.airAddrSpaceCast(inst),
.is_named_enum_value => try self.airIsNamedEnumValue(inst),
.error_set_has_value => try self.airErrorSetHasValue(inst),
@@ -9045,6 +9046,17 @@ pub const FuncGen = struct {
return null;
}
+ fn airAddrSpaceCast(self: *FuncGen, inst: Air.Inst.Index) !?*llvm.Value {
+ if (self.liveness.isUnused(inst)) return null;
+
+ const ty_op = self.air.instructions.items(.data)[inst].ty_op;
+ const inst_ty = self.air.typeOfIndex(inst);
+ const operand = try self.resolveInst(ty_op.operand);
+
+ const llvm_dest_ty = try self.dg.lowerType(inst_ty);
+ return self.builder.buildAddrSpaceCast(operand, llvm_dest_ty, "");
+ }
+
fn softF80TruncOrExt(
self: *FuncGen,
operand: *llvm.Value,