llhd 0.16.0

A Low Level Hardware Description that acts as a foundation for building hardware design tools.
Documentation
; RUN: llhd-opt %s -p cf

func @unary_i8 () void {
entry:
    %a = const i8 1

    %neg = neg i8 %a
    ; CHECK: %neg = const i8 255

    ret
}

func @binary_i8 () void {
entry:
    %a = const i8 7
    %an = const i8 -7
    %b = const i8 2
    %bn = const i8 -2
    %c = const i8 9
    %cn = const i8 -9
    %d = const i8 5
    %dn = const i8 -5

    %add1 = add i8 %a, %b
    %add2 = add i8 %an, %b
    %add3 = add i8 %a, %bn
    %add4 = add i8 %an, %bn
    ; CHECK: %add1 = const i8 9
    ; CHECK: %add2 = const i8 251
    ; CHECK: %add3 = const i8 5
    ; CHECK: %add4 = const i8 247

    %sub1 = sub i8 %a, %b
    %sub2 = sub i8 %an, %b
    %sub3 = sub i8 %a, %bn
    %sub4 = sub i8 %an, %bn
    ; CHECK: %sub1 = const i8 5
    ; CHECK: %sub2 = const i8 247
    ; CHECK: %sub3 = const i8 9
    ; CHECK: %sub4 = const i8 251

    %umul1 = umul i8 %a, %b
    %umul2 = umul i8 %an, %b
    %umul3 = umul i8 %a, %bn
    %umul4 = umul i8 %an, %bn
    ; CHECK: %umul1 = const i8 14
    ; CHECK: %umul2 = const i8 242
    ; CHECK: %umul3 = const i8 242
    ; CHECK: %umul4 = const i8 14

    %smul1 = smul i8 %a, %b
    %smul2 = smul i8 %an, %b
    %smul3 = smul i8 %a, %bn
    %smul4 = smul i8 %an, %bn
    ; CHECK: %smul1 = const i8 14
    ; CHECK: %smul2 = const i8 242
    ; CHECK: %smul3 = const i8 242
    ; CHECK: %smul4 = const i8 14

    %udiv1 = udiv i8 %a, %b
    %udiv2 = udiv i8 %an, %b
    %udiv3 = udiv i8 %a, %bn
    %udiv4 = udiv i8 %an, %bn
    ; CHECK: %udiv1 = const i8 3
    ; CHECK: %udiv2 = const i8 124
    ; CHECK: %udiv3 = const i8 0
    ; CHECK: %udiv4 = const i8 0

    %sdiv1 = sdiv i8 %a, %b
    %sdiv2 = sdiv i8 %an, %b
    %sdiv3 = sdiv i8 %a, %bn
    %sdiv4 = sdiv i8 %an, %bn
    ; CHECK: %sdiv1 = const i8 3
    ; CHECK: %sdiv2 = const i8 253
    ; CHECK: %sdiv3 = const i8 253
    ; CHECK: %sdiv4 = const i8 3

    %umod1 = umod i8 %c, %d
    %umod2 = umod i8 %cn, %d
    %umod3 = umod i8 %c, %dn
    %umod4 = umod i8 %cn, %dn
    ; CHECK: %umod1 = const i8 4
    ; CHECK: %umod2 = const i8 2
    ; CHECK: %umod3 = const i8 9
    ; CHECK: %umod4 = const i8 247

    %smod1 = smod i8 %c, %d
    %smod2 = smod i8 %cn, %d
    %smod3 = smod i8 %c, %dn
    %smod4 = smod i8 %cn, %dn
    ; CHECK: %smod1 = const i8 4
    ; CHECK: %smod2 = const i8 1
    ; CHECK: %smod3 = const i8 255
    ; CHECK: %smod4 = const i8 252

    %urem1 = urem i8 %c, %d
    %urem2 = urem i8 %cn, %d
    %urem3 = urem i8 %c, %dn
    %urem4 = urem i8 %cn, %dn
    ; CHECK: %urem1 = const i8 4
    ; CHECK: %urem2 = const i8 2
    ; CHECK: %urem3 = const i8 9
    ; CHECK: %urem4 = const i8 247

    %srem1 = srem i8 %c, %d
    %srem2 = srem i8 %cn, %d
    %srem3 = srem i8 %c, %dn
    %srem4 = srem i8 %cn, %dn
    ; CHECK: %srem1 = const i8 4
    ; CHECK: %srem2 = const i8 252
    ; CHECK: %srem3 = const i8 4
    ; CHECK: %srem4 = const i8 252

    ret
}