authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2022-01-07 22:09:35+01:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2022-01-07 22:10:36+01:00
logd5093b6c1395d4a60a923e1911321784ce368bda
tree6bf3b906f3779e4b60b8b93b7eef8684ffcc1fea
parenta68e6cd3d73680282d06e2d7676f0bca3056c71b

Shift right is a noop if rhs is comptime known to be zero


1 files changed, 8 insertions(+), 2 deletions(-)

src/Sema.zig+8-2
......@@ -7318,8 +7318,8 @@ fn zirShr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
73187318 const lhs = sema.resolveInst(extra.lhs);
73197319 const rhs = sema.resolveInst(extra.rhs);
73207320
7321 if (try sema.resolveMaybeUndefVal(block, lhs_src, lhs)) |lhs_val| {
7322 if (try sema.resolveMaybeUndefVal(block, rhs_src, rhs)) |rhs_val| {
7321 if (try sema.resolveMaybeUndefVal(block, rhs_src, rhs)) |rhs_val| {
7322 if (try sema.resolveMaybeUndefVal(block, lhs_src, lhs)) |lhs_val| {
73237323 const lhs_ty = sema.typeOf(lhs);
73247324 if (lhs_val.isUndef() or rhs_val.isUndef()) {
73257325 return sema.addConstUndef(lhs_ty);
......@@ -7331,6 +7331,12 @@ fn zirShr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
73317331 const val = try lhs_val.shr(rhs_val, sema.arena);
73327332 return sema.addConstant(lhs_ty, val);
73337333 }
7334 // Even if lhs is not comptime known, we can still deduce certain things based
7335 // on rhs.
7336 // If rhs is 0, return lhs without doing any calculations.
7337 else if (rhs_val.compareWithZero(.eq)) {
7338 return lhs;
7339 }
73347340 }
73357341
73367342 try sema.requireRuntimeBlock(block, src);