diff options
Diffstat (limited to 'llvm/test/Transforms/InstCombine/div.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/div.ll | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/div.ll b/llvm/test/Transforms/InstCombine/div.ll new file mode 100644 index 00000000000..18d93c2a76d --- /dev/null +++ b/llvm/test/Transforms/InstCombine/div.ll @@ -0,0 +1,68 @@ +; This test makes sure that div instructions are properly eliminated. +; + +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep div + +implementation + +int %test1(int %A) { + %B = div int %A, 1 + ret int %B +} + +uint %test2(uint %A) { + %B = div uint %A, 8 ; => Shift + ret uint %B +} + +int %test3(int %A) { + %B = div int 0, %A ; => 0, don't need to keep traps + ret int %B +} + +int %test4(int %A) { + %B = div int %A, -1 ; 0-A + ret int %B +} + +uint %test5(uint %A) { + %B = div uint %A, 4294967280 + %C = div uint %B, 4294967292 + ret uint %C +} + +bool %test6(uint %A) { + %B = div uint %A, 123 + %C = seteq uint %B, 0 ; A < 123 + ret bool %C +} + +bool %test7(uint %A) { + %B = div uint %A, 10 + %C = seteq uint %B, 2 ; A >= 20 && A < 30 + ret bool %C +} + +bool %test8(ubyte %A) { + %B = div ubyte %A, 123 + %C = seteq ubyte %B, 2 ; A >= 246 + ret bool %C +} + +bool %test9(ubyte %A) { + %B = div ubyte %A, 123 + %C = setne ubyte %B, 2 ; A < 246 + ret bool %C +} + +uint %test10(uint %X, bool %C) { + %V = select bool %C, uint 64, uint 8 + %R = udiv uint %X, %V + ret uint %R +} + +int %test11(int %X, bool %C) { + %A = select bool %C, int 1024, int 32 + %B = udiv int %X, %A + ret int %B +} |