authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-03 17:55:10-07:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-06-05 10:37:08+02:00
log6da420419d79a735e88416056587c154b3cb3acd
treec0ac8e5502351b6a192a4c9489946ef1cf3d1057
parentd2f31d315e47c3918cd711d1008862df49df38f2

Sema: avoid emitting unused is_non_err AIR instruction


1 files changed, 31 insertions(+), 13 deletions(-)

src/Sema.zig+31-13
......@@ -1330,7 +1330,8 @@ fn analyzeBodyInner(
13301330 const extra = sema.code.extraData(Zir.Inst.Try, inst_data.payload_index);
13311331 const inline_body = sema.code.extra[extra.end..][0..extra.data.body_len];
13321332 const err_union = try sema.resolveInst(extra.data.operand);
1333 const is_non_err = try sema.analyzeIsNonErr(block, operand_src, err_union);
1333 const is_non_err = try sema.analyzeIsNonErrComptimeOnly(block, operand_src, err_union);
1334 assert(is_non_err != .none);
13341335 const is_non_err_tv = try sema.resolveInstConst(block, operand_src, is_non_err);
13351336 if (is_non_err_tv.val.toBool()) {
13361337 const err_union_ty = sema.typeOf(err_union);
......@@ -1357,7 +1358,8 @@ fn analyzeBodyInner(
13571358 // try sema.analyzeLoad(block, src, operand, operand_src)
13581359 // else
13591360 // operand;
1360 // const is_non_err = try sema.analyzeIsNonErr(block, operand_src, err_union);
1361 // const is_non_err = try sema.analyzeIsNonErrComptimeOnly(block, operand_src, err_union);
1362 // assert(is_non_err != .none);
13611363 // const is_non_err_tv = try sema.resolveInstConst(block, operand_src, is_non_err);
13621364 // if (is_non_err_tv.val.toBool()) {
13631365 // if (is_ptr) {
......@@ -1384,7 +1386,8 @@ fn analyzeBodyInner(
13841386 const inline_body = sema.code.extra[extra.end..][0..extra.data.body_len];
13851387 const operand = try sema.resolveInst(extra.data.operand);
13861388 const err_union = try sema.analyzeLoad(block, src, operand, operand_src);
1387 const is_non_err = try sema.analyzeIsNonErr(block, operand_src, err_union);
1389 const is_non_err = try sema.analyzeIsNonErrComptimeOnly(block, operand_src, err_union);
1390 assert(is_non_err != .none);
13881391 const is_non_err_tv = try sema.resolveInstConst(block, operand_src, is_non_err);
13891392 if (is_non_err_tv.val.toBool()) {
13901393 break :blk try sema.analyzeErrUnionPayloadPtr(block, src, operand, false, false);
......@@ -1405,7 +1408,8 @@ fn analyzeBodyInner(
14051408 // const inline_body = sema.code.extra[extra.end..][0..extra.data.body_len];
14061409 // const operand = try sema.resolveInst(extra.data.operand);
14071410 // const err_union = try sema.analyzeLoad(block, src, operand, operand_src);
1408 // const is_non_err = try sema.analyzeIsNonErr(block, operand_src, err_union);
1411 // const is_non_err = try sema.analyzeIsNonErrComptimeOnly(block, operand_src, err_union);
1412 // assert(is_non_err != .none);
14091413 // const is_non_err_tv = try sema.resolveInstConst(block, operand_src, is_non_err);
14101414 // if (is_non_err_tv.val.toBool()) {
14111415 // break :blk try sema.analyzeErrUnionPayloadPtr(block, src, operand, false, false);
......@@ -13078,9 +13082,9 @@ fn zirTry(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!
1307813082 err_union_ty.fmt(sema.mod),
1307913083 });
1308013084 }
13081 const is_non_err = try sema.analyzeIsNonErr(parent_block, operand_src, err_union);
13082
13083 if (try sema.resolveDefinedValue(parent_block, operand_src, is_non_err)) |is_non_err_val| {
13085 const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
13086 if (is_non_err != .none) {
13087 const is_non_err_val = (try sema.resolveDefinedValue(parent_block, operand_src, is_non_err)).?;
1308413088 if (is_non_err_val.toBool()) {
1308513089 return sema.analyzeErrUnionPayload(parent_block, src, err_union_ty, err_union, operand_src, false);
1308613090 }
......@@ -13124,9 +13128,9 @@ fn zirTryPtr(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileErr
1312413128 err_union_ty.fmt(sema.mod),
1312513129 });
1312613130 }
13127 const is_non_err = try sema.analyzeIsNonErr(parent_block, operand_src, err_union);
13128
13129 if (try sema.resolveDefinedValue(parent_block, operand_src, is_non_err)) |is_non_err_val| {
13131 const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
13132 if (is_non_err != .none) {
13133 const is_non_err_val = (try sema.resolveDefinedValue(parent_block, operand_src, is_non_err)).?;
1313013134 if (is_non_err_val.toBool()) {
1313113135 return sema.analyzeErrUnionPayloadPtr(parent_block, src, operand, false, false);
1313213136 }
......@@ -21795,7 +21799,7 @@ fn analyzeIsNull(
2179521799 return block.addUnOp(air_tag, operand);
2179621800}
2179721801
21798fn analyzeIsNonErr(
21802fn analyzeIsNonErrComptimeOnly(
2179921803 sema: *Sema,
2180021804 block: *Block,
2180121805 src: LazySrcLoc,
......@@ -21847,8 +21851,22 @@ fn analyzeIsNonErr(
2184721851 return Air.Inst.Ref.bool_false;
2184821852 }
2184921853 }
21850 try sema.requireRuntimeBlock(block, src);
21851 return block.addUnOp(.is_non_err, operand);
21854 return Air.Inst.Ref.none;
21855}
21856
21857fn analyzeIsNonErr(
21858 sema: *Sema,
21859 block: *Block,
21860 src: LazySrcLoc,
21861 operand: Air.Inst.Ref,
21862) CompileError!Air.Inst.Ref {
21863 const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
21864 if (result == .none) {
21865 try sema.requireRuntimeBlock(block, src);
21866 return block.addUnOp(.is_non_err, operand);
21867 } else {
21868 return result;
21869 }
2185221870}
2185321871
2185421872fn analyzeSlice(