// #target: windows-x64
module test;

fn int foo()
{
    int x = 0;
    int y;
    x += y;
    x -= y;
    x %= y;
    x /= y;
    x *= y;
    x <<= y;
    x >>= y;
    x ^= y;
    x |= y;
    x &= y;
    return x;
}


/* #expect: test.ll

  %x = alloca i32, align 4
  %y = alloca i32, align 4
  store i32 0, ptr %x, align 4
  store i32 0, ptr %y, align 4
  %0 = load i32, ptr %x, align 4
  %1 = load i32, ptr %y, align 4
  %add = add i32 %0, %1
  store i32 %add, ptr %x, align 4
  %2 = load i32, ptr %x, align 4
  %3 = load i32, ptr %y, align 4
  %sub = sub i32 %2, %3
  store i32 %sub, ptr %x, align 4
  %4 = load i32, ptr %x, align 4
  %5 = load i32, ptr %y, align 4
  %smod = srem i32 %4, %5
  store i32 %smod, ptr %x, align 4
  %6 = load i32, ptr %x, align 4
  %7 = load i32, ptr %y, align 4
  %sdiv = sdiv i32 %6, %7
  store i32 %sdiv, ptr %x, align 4
  %8 = load i32, ptr %x, align 4
  %9 = load i32, ptr %y, align 4
  %mul = mul i32 %8, %9
  store i32 %mul, ptr %x, align 4
  %10 = load i32, ptr %x, align 4
  %11 = load i32, ptr %y, align 4
  %shl = shl i32 %10, %11
  %12 = freeze i32 %shl
  store i32 %12, ptr %x, align 4
  %13 = load i32, ptr %x, align 4
  %14 = load i32, ptr %y, align 4
  %ashr = ashr i32 %13, %14
  %15 = freeze i32 %ashr
  store i32 %15, ptr %x, align 4
  %16 = load i32, ptr %x, align 4
  %17 = load i32, ptr %y, align 4
  %xor = xor i32 %16, %17
  store i32 %xor, ptr %x, align 4
  %18 = load i32, ptr %x, align 4
  %19 = load i32, ptr %y, align 4
  %or = or i32 %18, %19
  store i32 %or, ptr %x, align 4
  %20 = load i32, ptr %x, align 4
  %21 = load i32, ptr %y, align 4
  %and = and i32 %20, %21
  store i32 %and, ptr %x, align 4
  %22 = load i32, ptr %x, align 4
