aboutsummaryrefslogtreecommitdiff
path: root/src/Air.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-07-13 15:45:08 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-07-20 12:19:16 -0700
commitc09b973ec25f328f5e15e9e6eed4da7f5e4634af (patch)
tree3e6d262995f7c4b1760d154078875681082b4110 /src/Air.zig
parent0f38f686964664f68e013ec3c63cfe655001f165 (diff)
downloadzig-c09b973ec25f328f5e15e9e6eed4da7f5e4634af.tar.gz
zig-c09b973ec25f328f5e15e9e6eed4da7f5e4634af.zip
stage2: compile error fixes for AIR memory layout branch
Now the branch is compiling again, provided that one uses `-Dskip-non-native`, but many code paths are disabled. The code paths can now be re-enabled one at a time and updated to conform to the new AIR memory layout.
Diffstat (limited to 'src/Air.zig')
-rw-r--r--src/Air.zig30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/Air.zig b/src/Air.zig
index e85f2e5c43..1f294c43f3 100644
--- a/src/Air.zig
+++ b/src/Air.zig
@@ -332,12 +332,12 @@ pub const Block = struct {
body_len: u32,
};
-/// Trailing is a list of `Ref` for every `args_len`.
+/// Trailing is a list of `Inst.Ref` for every `args_len`.
pub const Call = struct {
args_len: u32,
};
-/// This data is stored inside extra, with two sets of trailing `Ref`:
+/// This data is stored inside extra, with two sets of trailing `Inst.Ref`:
/// * 0. the then body, according to `then_body_len`.
/// * 1. the else body, according to `else_body_len`.
pub const CondBr = struct {
@@ -355,19 +355,19 @@ pub const SwitchBr = struct {
/// Trailing:
/// * instruction index for each `body_len`.
pub const Case = struct {
- item: Ref,
+ item: Inst.Ref,
body_len: u32,
};
};
pub const StructField = struct {
- struct_ptr: Ref,
+ struct_ptr: Inst.Ref,
field_index: u32,
};
/// Trailing:
-/// 0. `Ref` for every outputs_len
-/// 1. `Ref` for every inputs_len
+/// 0. `Inst.Ref` for every outputs_len
+/// 1. `Inst.Ref` for every inputs_len
pub const Asm = struct {
/// Index to the corresponding ZIR instruction.
/// `asm_source`, `outputs_len`, `inputs_len`, `clobbers_len`, `is_volatile`, and
@@ -381,6 +381,24 @@ pub fn getMainBody(air: Air) []const Air.Inst.Index {
return air.extra[body_index..][0..body_len];
}
+pub fn getType(air: Air, inst: Air.Inst.Index) Type {
+ _ = air;
+ _ = inst;
+ @panic("TODO Air getType");
+}
+
+pub fn getRefType(air: Air, ref: Air.Inst.Ref) Type {
+ var i: usize = @enumToInt(ref);
+ if (i < Air.Inst.Ref.typed_value_map.len) {
+ return Air.Inst.Ref.typed_value_map[i].val.toType(undefined) catch unreachable;
+ }
+ i -= Air.Inst.Ref.typed_value_map.len;
+ const air_tags = air.instructions.items(.tag);
+ const air_datas = air.instructions.items(.data);
+ assert(air_tags[i] == .const_ty);
+ return air_datas[i].ty;
+}
+
/// Returns the requested data, as well as the new index which is at the start of the
/// trailers for the object.
pub fn extraData(air: Air, comptime T: type, index: usize) struct { data: T, end: usize } {