summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstCombine/div.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/InstCombine/div.ll')
-rw-r--r--llvm/test/Transforms/InstCombine/div.ll68
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
+}
OpenPOWER on IntegriCloud