| ... | ... | @@ -7318,8 +7318,8 @@ fn zirShr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins |
| 7318 | 7318 | const lhs = sema.resolveInst(extra.lhs); |
| 7319 | 7319 | const rhs = sema.resolveInst(extra.rhs); |
| 7320 | 7320 | |
| 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| { |
| 7323 | 7323 | const lhs_ty = sema.typeOf(lhs); |
| 7324 | 7324 | if (lhs_val.isUndef() or rhs_val.isUndef()) { |
| 7325 | 7325 | return sema.addConstUndef(lhs_ty); |
| ... | ... | @@ -7331,6 +7331,12 @@ fn zirShr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins |
| 7331 | 7331 | const val = try lhs_val.shr(rhs_val, sema.arena); |
| 7332 | 7332 | return sema.addConstant(lhs_ty, val); |
| 7333 | 7333 | } |
| 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 | } |
| 7334 | 7340 | } |
| 7335 | 7341 | |
| 7336 | 7342 | try sema.requireRuntimeBlock(block, src); |