diff options
Diffstat (limited to 'test/opttest.ll')
-rw-r--r-- | test/opttest.ll | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/opttest.ll b/test/opttest.ll new file mode 100644 index 0000000000..bbfe1f6edd --- /dev/null +++ b/test/opttest.ll @@ -0,0 +1,59 @@ + long 12 + +implementation + +ulong "const removal"() + long 12345 + %q = uint 4000000000 ; Def 0 - uint plane + ulong 123 ; Def 0 - ulong plane + ulong 4000000000000 ; Def 1 - ulong plane +begin + ret ulong %1 +end + +void "dce #1"() + int 0 +begin + ret void + + ret void ; Unreachable label +end + +void "basic block merge #1"(int %a, uint %b, bool %c, ulong %d) +begin + add int %0, %0 + br label %TestName ; Can be merged with next block +TestName: + add uint %0, %0 + br label %1 ; Can be merged with next block + add ulong %0, %0 + ret void +end + +void "const prop #1"() + %x = int 0 ; Def %x - int plane + int 0 ; Def 0 - int plane + bool false +begin +Startup: + %x = seteq int %0, %x + br bool %x, label %0, label %Startup ; Can be eliminated by const prop + + ret void +end + +int "const prop #2"() +begin + %x = add int 1, 1 ; Instrs can be const prop'd away + %y = sub int -1, 1 + %z = add int %x, %y + ret int %z ; Should equal %0 +end + +sbyte "const prop #3"() ; Instrs can be const prop'd away +begin + %x = add sbyte 127, 127 ; Must wrap around correctly! + %y = sub sbyte 1, -1 + %z = add sbyte %x, %y + ret sbyte %z ; Should equal %0! +end |