; RUN: firrtl -i %s -o %s.v -X verilog -p ct 2>&1 | tee %s.out | FileCheck %s ;CHECK: Infer Types circuit top : module top : wire a : UInt<16> wire b : UInt<8> wire c : SInt<16> wire d : SInt<8> wire e : UInt<1> a <= UInt(1) b <= UInt(1) c <= SInt(1) d <= SInt(1) e <= UInt(1) node vadd = add(a, c) ;CHECK: node vadd = add(a@, c@)@ node wadd = add(a, b) ;CHECK: node wadd = add(a@, b@)@ node xadd = add(a, d) ;CHECK: node xadd = add(a@, d@)@ node yadd = add(c, b) ;CHECK: node yadd = add(c@, b@)@ node zadd = add(c, d) ;CHECK: node zadd = add(c@, d@)@ node vsub = sub(a, c) ;CHECK: node vsub = sub(a@, c@)@ node wsub = sub(a, b) ;CHECK: node wsub = sub(a@, b@)@ node xsub = sub(a, d) ;CHECK: node xsub = sub(a@, d@)@ node ysub = sub(c, b) ;CHECK: node ysub = sub(c@, b@)@ node zsub = sub(c, d) ;CHECK: node zsub = sub(c@, d@)@ node vmul = mul(a, c) ;CHECK: node vmul = mul(a@, c@)@ node wmul = mul(a, b) ;CHECK: node wmul = mul(a@, b@)@ node xmul = mul(a, d) ;CHECK: node xmul = mul(a@, d@)@ node ymul = mul(c, b) ;CHECK: node ymul = mul(c@, b@)@ node zmul = mul(c, d) ;CHECK: node zmul = mul(c@, d@)@ node vdiv = div(a, c) ;CHECK: node vdiv = div(a@, c@)@ node wdiv = div(a, b) ;CHECK: node wdiv = div(a@, b@)@ node xdiv = div(a, d) ;CHECK: node xdiv = div(a@, d@)@ node ydiv = div(c, b) ;CHECK: node ydiv = div(c@, b@)@ node zdiv = div(c, d) ;CHECK: node zdiv = div(c@, d@)@ node vmod = mod(a, c) ;CHECK: node vmod = mod(a@, c@)@ node wmod = mod(a, b) ;CHECK: node wmod = mod(a@, b@)@ node xmod = mod(a, d) ;CHECK: node xmod = mod(a@, d@)@ node ymod = mod(c, b) ;CHECK: node ymod = mod(c@, b@)@ node zmod = mod(c, d) ;CHECK: node zmod = mod(c@, d@)@ node vquo = quo(a, c) ;CHECK: node vquo = quo(a@, c@)@ node wquo = quo(a, b) ;CHECK: node wquo = quo(a@, b@)@ node xquo = quo(a, d) ;CHECK: node xquo = quo(a@, d@)@ node yquo = quo(c, b) ;CHECK: node yquo = quo(c@, b@)@ node zquo = quo(c, d) ;CHECK: node zquo = quo(c@, d@)@ node vrem = rem(a, c) ;CHECK: node vrem = rem(a@, c@)@ node wrem = rem(a, b) ;CHECK: node wrem = rem(a@, b@)@ node xrem = rem(a, d) ;CHECK: node xrem = rem(a@, d@)@ node yrem = rem(c, b) ;CHECK: node yrem = rem(c@, b@)@ node zrem = rem(c, d) ;CHECK: node zrem = rem(c@, d@)@ node vaddw = addw(a, c) ;CHECK: node vaddw = addw(a@, c@)@ node waddw = addw(a, b) ;CHECK: node waddw = addw(a@, b@)@ node xaddw = addw(a, d) ;CHECK: node xaddw = addw(a@, d@)@ node yaddw = addw(c, b) ;CHECK: node yaddw = addw(c@, b@)@ node zaddw = addw(c, d) ;CHECK: node zaddw = addw(c@, d@)@ node vsubw = subw(a, c) ;CHECK: node vsubw = subw(a@, c@)@ node wsubw = subw(a, b) ;CHECK: node wsubw = subw(a@, b@)@ node xsubw = subw(a, d) ;CHECK: node xsubw = subw(a@, d@)@ node ysubw = subw(c, b) ;CHECK: node ysubw = subw(c@, b@)@ node zsubw = subw(c, d) ;CHECK: node zsubw = subw(c@, d@)@ node vlt = lt(a, c) ;CHECK: node vlt = lt(a@, c@)@ node wlt = lt(a, b) ;CHECK: node wlt = lt(a@, b@)@ node xlt = lt(a, d) ;CHECK: node xlt = lt(a@, d@)@ node ylt = lt(c, b) ;CHECK: node ylt = lt(c@, b@)@ node zlt = lt(c, d) ;CHECK: node zlt = lt(c@, d@)@ node vleq = leq(a, c) ;CHECK: node vleq = leq(a@, c@)@ node wleq = leq(a, b) ;CHECK: node wleq = leq(a@, b@)@ node xleq = leq(a, d) ;CHECK: node xleq = leq(a@, d@)@ node yleq = leq(c, b) ;CHECK: node yleq = leq(c@, b@)@ node zleq = leq(c, d) ;CHECK: node zleq = leq(c@, d@)@ node vgt = gt(a, c) ;CHECK: node vgt = gt(a@, c@)@ node wgt = gt(a, b) ;CHECK: node wgt = gt(a@, b@)@ node xgt = gt(a, d) ;CHECK: node xgt = gt(a@, d@)@ node ygt = gt(c, b) ;CHECK: node ygt = gt(c@, b@)@ node zgt = gt(c, d) ;CHECK: node zgt = gt(c@, d@)@ node vgeq = geq(a, c) ;CHECK: node vgeq = geq(a@, c@)@ node wgeq = geq(a, b) ;CHECK: node wgeq = geq(a@, b@)@ node xgeq = geq(a, d) ;CHECK: node xgeq = geq(a@, d@)@ node ygeq = geq(c, b) ;CHECK: node ygeq = geq(c@, b@)@ node zgeq = geq(c, d) ;CHECK: node zgeq = geq(c@, d@)@ node veq = eq(a, c) ;CHECK: node veq = eq(a@, c@)@ node weq = eq(a, b) ;CHECK: node weq = eq(a@, b@)@ node xeq = eq(a, d) ;CHECK: node xeq = eq(a@, d@)@ node yeq = eq(c, b) ;CHECK: node yeq = eq(c@, b@)@ node zeq = eq(c, d) ;CHECK: node zeq = eq(c@, d@)@ node vneq = neq(a, c) ;CHECK: node vneq = neq(a@, c@)@ node wneq = neq(a, b) ;CHECK: node wneq = neq(a@, b@)@ node xneq = neq(a, d) ;CHECK: node xneq = neq(a@, d@)@ node yneq = neq(c, b) ;CHECK: node yneq = neq(c@, b@)@ node zneq = neq(c, d) ;CHECK: node zneq = neq(c@, d@)@ node vneqv = neqv(a, b) ;CHECK: node vneqv = neqv(a@, b@)@ node wneqv = neqv(a, b) ;CHECK: node wneqv = neqv(a@, b@)@ node zneqv = neqv(c, d) ;CHECK: node zneqv = neqv(c@, d@)@ node veqv = eqv(a, b) ;CHECK: node veqv = eqv(a@, b@)@ node weqv = eqv(a, b) ;CHECK: node weqv = eqv(a@, b@)@ node zeqv = eqv(c, d) ;CHECK: node zeqv = eqv(c@, d@)@ node vmux = mux(e, a, b) ;CHECK: node vmux = mux(e@, a@, b@)@ node wmux = mux(e, a, b) ;CHECK: node wmux = mux(e@, a@, b@)@ node zmux = mux(e, c, d) ;CHECK: node zmux = mux(e@, c@, d@)@ node vpad = pad(a, 10) ;CHECK: node vpad = pad(a@, 10)@ node wpad = pad(a, 10) ;CHECK: node wpad = pad(a@, 10)@ node zpad = pad(c, 10) ;CHECK: node zpad = pad(c@, 10)@ node vasUInt = asUInt(d) ;CHECK: node vasUInt = asUInt(d@)@ node wasUInt = asUInt(a) ;CHECK: node wasUInt = asUInt(a@)@ node zasUInt = asUInt(c) ;CHECK: node zasUInt = asUInt(c@)@ node vasSInt = asSInt(a) ;CHECK: node vasSInt = asSInt(a@)@ node wasSInt = asSInt(a) ;CHECK: node wasSInt = asSInt(a@)@ node zasSInt = asSInt(c) ;CHECK: node zasSInt = asSInt(c@)@ node vshl = shl(a, 10) ;CHECK: node vshl = shl(a@, 10)@ node wshl = shl(a, 10) ;CHECK: node wshl = shl(a@, 10)@ node zshl = shl(c, 10) ;CHECK: node zshl = shl(c@, 10)@ node vdshl = dshl(a, a) ;CHECK: node vdshl = dshl(a@, a@)@ node wdshl = dshl(a, a) ;CHECK: node wdshl = dshl(a@, a@)@ node zdshl = dshl(c, a) ;CHECK: node zdshl = dshl(c@, a@)@ node vdshr = dshr(a, a) ;CHECK: node vdshr = dshr(a@, a@)@ node wdshr = dshr(a, a) ;CHECK: node wdshr = dshr(a@, a@)@ node zdshr = dshr(c, a) ;CHECK: node zdshr = dshr(c@, a@)@ node vshr = shr(a, 10) ;CHECK: node vshr = shr(a@, 10)@ node wshr = shr(a, 10) ;CHECK: node wshr = shr(a@, 10)@ node zshr = shr(c, 10) ;CHECK: node zshr = shr(c@, 10)@ node vcvt = cvt(a) ;CHECK: node vcvt = cvt(a@)@ node wcvt = cvt(a) ;CHECK: node wcvt = cvt(a@)@ node zcvt = cvt(c) ;CHECK: node zcvt = cvt(c@)@ node vneg = neg(a) ;CHECK: node vneg = neg(a@)@ node wneg = neg(a) ;CHECK: node wneg = neg(a@)@ node zneg = neg(c) ;CHECK: node zneg = neg(c@)@ node wnot = not(a) ;CHECK: node wnot = not(a@)@ node unot = not(c) ;CHECK: node unot = not(c@)@ node WAND = and(a, b) ;CHECK: node WAND = and(a@, b@)@ node uand = and(c, d) ;CHECK: node uand = and(c@, d@)@ node WOR = or(a, b) ;CHECK: node WOR = or(a@, b@)@ node uor = or(c, d) ;CHECK: node uor = or(c@, d@)@ node wxor = xor(a, b) ;CHECK: node wxor = xor(a@, b@)@ node uxor = xor(c, d) ;CHECK: node uxor = xor(c@, d@)@ node wbit = bit(a, 0) ;CHECK: node wbit = bit(a@, 0)@ node ubit = bit(c, 0) ;CHECK: node ubit = bit(c@, 0)@ node wbits = bits(a, 2, 0) ;CHECK: node wbits = bits(a@, 2, 0)@ node ubits = bits(c, 2, 0) ;CHECK: node ubits = bits(c@, 2, 0)@ node xcat = cat(a, b) ;CHECK: node xcat = cat(a@, b@)@ node uandr = andr(a, b, a) ;CHECK: node uandr = andr(a@, b@, a@)@ node uorr = orr(a, b, a) ;CHECK: node uorr = orr(a@, b@, a@)@ node uxorr = xorr(a, b, a) ;CHECK: node uxorr = xorr(a@, b@, a@)@ ;CHECK: Finished Infer Types