Teach ComputeNumSignBits about signed divisions.
[oota-llvm.git] / test / Transforms / InstCombine / apint-sub.ll
index 05328bc1a87fd3fdb1aa69c6c287a5ecdbb1b8b3..3b69c17e183ac8dab34623499d1c5e8093a7b467 100644 (file)
@@ -2,8 +2,9 @@
 ; even with arbitrary precision integers.
 ;
 
-; RUN:  llvm-as < %s | opt -instcombine | llvm-dis | \
-; RUN:   grep -v 'sub i19 %Cok, %Bok' | not grep sub
+; RUN: opt < %s -instcombine -S | \
+; RUN:   grep -v "sub i19 %Cok, %Bok" | grep -v "sub i25 0, %Aok" | not grep sub
+; END.
 
 define i23 @test1(i23 %A) {
        %B = sub i23 %A, %A             ; <i23> [#uses=1]
@@ -94,20 +95,16 @@ define i1024 @test14(i1024 %A) {
        ret i1024 %D
 }
 
-define i14 @test15(i14 %A, i14 %B) {
-       %C = sub i14 0, %A              ; <i14> [#uses=1]
-       %D = srem i14 %B, %C            ; <i14> [#uses=1]
-       ret i14 %D
-}
-
 define i51 @test16(i51 %A) {
        %X = sdiv i51 %A, 1123          ; <i51> [#uses=1]
        %Y = sub i51 0, %X              ; <i51> [#uses=1]
        ret i51 %Y
 }
 
-define i25 @test17(i25 %A) {
-       %B = sub i25 0, %A              ; <i25> [#uses=1]
+; Can't fold subtract here because negation it might oveflow.
+; PR3142
+define i25 @test17(i25 %Aok) {
+       %B = sub i25 0, %Aok            ; <i25> [#uses=1]
        %C = sdiv i25 %B, 1234          ; <i25> [#uses=1]
        ret i25 %C
 }