; This test makes sure that add instructions are properly eliminated.

; RUN: opt < %s -instcombine -S | \
; RUN:    grep -v OK | not grep add

define i32 @test1(i32 %A) {
        %B = add i32 %A, 0              ; <i32> [#uses=1]
        ret i32 %B
}

define i32 @test2(i32 %A) {
        %B = add i32 %A, 5              ; <i32> [#uses=1]
        %C = add i32 %B, -5             ; <i32> [#uses=1]
        ret i32 %C
}

define i32 @test3(i32 %A) {
        %B = add i32 %A, 5              ; <i32> [#uses=1]
        ;; This should get converted to an add
        %C = sub i32 %B, 5              ; <i32> [#uses=1]
        ret i32 %C
}

define i32 @test4(i32 %A, i32 %B) {
        %C = sub i32 0, %A              ; <i32> [#uses=1]
        ; D = B + -A = B - A
        %D = add i32 %B, %C             ; <i32> [#uses=1]
        ret i32 %D
}

define i32 @test5(i32 %A, i32 %B) {
        %C = sub i32 0, %A              ; <i32> [#uses=1]
        ; D = -A + B = B - A
        %D = add i32 %C, %B             ; <i32> [#uses=1]
        ret i32 %D
}

define i32 @test6(i32 %A) {
        %B = mul i32 7, %A              ; <i32> [#uses=1]
        ; C = 7*A+A == 8*A == A << 3
        %C = add i32 %B, %A             ; <i32> [#uses=1]
        ret i32 %C
}

define i32 @test7(i32 %A) {
        %B = mul i32 7, %A              ; <i32> [#uses=1]
        ; C = A+7*A == 8*A == A << 3
        %C = add i32 %A, %B             ; <i32> [#uses=1]
        ret i32 %C
}

; (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
define i32 @test8(i32 %A, i32 %B) {
        %A1 = and i32 %A, 7             ; <i32> [#uses=1]
        %B1 = and i32 %B, 128           ; <i32> [#uses=1]
        %C = add i32 %A1, %B1           ; <i32> [#uses=1]
        ret i32 %C
}

define i32 @test9(i32 %A) {
        %B = shl i32 %A, 4              ; <i32> [#uses=2]
        ; === shl int %A, 5
        %C = add i32 %B, %B             ; <i32> [#uses=1]
        ret i32 %C
}

define i1 @test10(i8 %A, i8 %b) {
        %B = add i8 %A, %b              ; <i8> [#uses=1]
        ; === A != -b
        %c = icmp ne i8 %B, 0           ; <i1> [#uses=1]
        ret i1 %c
}

define i1 @test11(i8 %A) {
        %B = add i8 %A, -1              ; <i8> [#uses=1]
        ; === A != 1
        %c = icmp ne i8 %B, 0           ; <i1> [#uses=1]
        ret i1 %c
}

define i32 @test12(i32 %A, i32 %B) {
        ; Should be transformed into shl A, 1
         %C_OK = add i32 %B, %A          ; <i32> [#uses=1]
        br label %X

X:              ; preds = %0
        %D = add i32 %C_OK, %A          ; <i32> [#uses=1]
        ret i32 %D
}

define i32 @test13(i32 %A, i32 %B, i32 %C) {
        %D_OK = add i32 %A, %B          ; <i32> [#uses=1]
        %E_OK = add i32 %D_OK, %C               ; <i32> [#uses=1]
        ;; shl A, 1
        %F = add i32 %E_OK, %A          ; <i32> [#uses=1]
        ret i32 %F
}

define i32 @test14(i32 %offset, i32 %difference) {
        %tmp.2 = and i32 %difference, 3         ; <i32> [#uses=1]
        %tmp.3_OK = add i32 %tmp.2, %offset             ; <i32> [#uses=1]
        %tmp.5.mask = and i32 %difference, -4           ; <i32> [#uses=1]
        ; == add %offset, %difference
        %tmp.8 = add i32 %tmp.3_OK, %tmp.5.mask         ; <i32> [#uses=1]
        ret i32 %tmp.8
}

define i8 @test15(i8 %A) {
        ; Does not effect result
        %B = add i8 %A, -64             ; <i8> [#uses=1]
        ; Only one bit set
        %C = and i8 %B, 16              ; <i8> [#uses=1]
        ret i8 %C
}

define i8 @test16(i8 %A) {
        ; Turn this into a XOR
        %B = add i8 %A, 16              ; <i8> [#uses=1]
        ; Only one bit set
        %C = and i8 %B, 16              ; <i8> [#uses=1]
        ret i8 %C
}

define i32 @test17(i32 %A) {
        %B = xor i32 %A, -1             ; <i32> [#uses=1]
        ; == sub int 0, %A
        %C = add i32 %B, 1              ; <i32> [#uses=1]
        ret i32 %C
}

define i8 @test18(i8 %A) {
        %B = xor i8 %A, -1              ; <i8> [#uses=1]
        ; == sub ubyte 16, %A
        %C = add i8 %B, 17              ; <i8> [#uses=1]
        ret i8 %C
}

define i32 @test19(i1 %C) {
        %A = select i1 %C, i32 1000, i32 10             ; <i32> [#uses=1]
        %V = add i32 %A, 123            ; <i32> [#uses=1]
        ret i32 %V
}

define i32 @test20(i32 %x) {
        %tmp.2 = xor i32 %x, -2147483648                ; <i32> [#uses=1]
        ;; Add of sign bit -> xor of sign bit.
        %tmp.4 = add i32 %tmp.2, -2147483648            ; <i32> [#uses=1]
        ret i32 %tmp.4
}

define i1 @test21(i32 %x) {
        %t = add i32 %x, 4              ; <i32> [#uses=1]
        %y = icmp eq i32 %t, 123                ; <i1> [#uses=1]
        ret i1 %y
}

define i32 @test22(i32 %V) {
        %V2 = add i32 %V, 10            ; <i32> [#uses=1]
        switch i32 %V2, label %Default [
                 i32 20, label %Lab1
                 i32 30, label %Lab2
        ]

Default:                ; preds = %0
        ret i32 123

Lab1:           ; preds = %0
        ret i32 12312

Lab2:           ; preds = %0
        ret i32 1231231
}

define i32 @test23(i1 %C, i32 %a) {
entry:
        br i1 %C, label %endif, label %else

else:           ; preds = %entry
        br label %endif

endif:          ; preds = %else, %entry
        %b.0 = phi i32 [ 0, %entry ], [ 1, %else ]              ; <i32> [#uses=1]
        %tmp.4 = add i32 %b.0, 1                ; <i32> [#uses=1]
        ret i32 %tmp.4
}

define i32 @test24(i32 %A) {
        %B = add i32 %A, 1              ; <i32> [#uses=1]
        %C = shl i32 %B, 1              ; <i32> [#uses=1]
        %D = sub i32 %C, 2              ; <i32> [#uses=1]
        ret i32 %D
}

define i64 @test25(i64 %Y) {
        %tmp.4 = shl i64 %Y, 2          ; <i64> [#uses=1]
        %tmp.12 = shl i64 %Y, 2         ; <i64> [#uses=1]
        %tmp.8 = add i64 %tmp.4, %tmp.12                ; <i64> [#uses=1]
        ret i64 %tmp.8
}

define i32 @test26(i32 %A, i32 %B) {
        %C = add i32 %A, %B             ; <i32> [#uses=1]
        %D = sub i32 %C, %B             ; <i32> [#uses=1]
        ret i32 %D
}

define i32 @test27(i1 %C, i32 %X, i32 %Y) {
        %A = add i32 %X, %Y             ; <i32> [#uses=1]
        %B = add i32 %Y, 123            ; <i32> [#uses=1]
        ;; Fold add through select.
        %C.upgrd.1 = select i1 %C, i32 %A, i32 %B               ; <i32> [#uses=1]
        %D = sub i32 %C.upgrd.1, %Y             ; <i32> [#uses=1]
        ret i32 %D
}

define i32 @test28(i32 %X) {
        %Y = add i32 %X, 1234           ; <i32> [#uses=1]
        %Z = sub i32 42, %Y             ; <i32> [#uses=1]
        ret i32 %Z
}

define i32 @test29(i32 %X, i32 %x) {
        %tmp.2 = sub i32 %X, %x         ; <i32> [#uses=2]
        %tmp.2.mask = and i32 %tmp.2, 63                ; <i32> [#uses=1]
        %tmp.6 = add i32 %tmp.2.mask, %x                ; <i32> [#uses=1]
        %tmp.7 = and i32 %tmp.6, 63             ; <i32> [#uses=1]
        %tmp.9 = and i32 %tmp.2, -64            ; <i32> [#uses=1]
        %tmp.10 = or i32 %tmp.7, %tmp.9         ; <i32> [#uses=1]
        ret i32 %tmp.10
}

define i64 @test30(i64 %x) {
        %tmp.2 = xor i64 %x, -9223372036854775808               ; <i64> [#uses=1]
        ;; Add of sign bit -> xor of sign bit.
        %tmp.4 = add i64 %tmp.2, -9223372036854775808           ; <i64> [#uses=1]
        ret i64 %tmp.4
}

define i32 @test31(i32 %A) {
        %B = add i32 %A, 4              ; <i32> [#uses=1]
        %C = mul i32 %B, 5              ; <i32> [#uses=1]
        %D = sub i32 %C, 20             ; <i32> [#uses=1]
        ret i32 %D
}

define i32 @test32(i32 %A) {
        %B = add i32 %A, 4              ; <i32> [#uses=1]
        %C = shl i32 %B, 2              ; <i32> [#uses=1]
        %D = sub i32 %C, 16             ; <i32> [#uses=1]
        ret i32 %D
}

define i8 @test33(i8 %A) {
        %B = and i8 %A, -2              ; <i8> [#uses=1]
        %C = add i8 %B, 1               ; <i8> [#uses=1]
        ret i8 %C
}

define i8 @test34(i8 %A) {
        %B = add i8 %A, 64              ; <i8> [#uses=1]
        %C = and i8 %B, 12              ; <i8> [#uses=1]
        ret i8 %C
}

define i32 @test35(i32 %a) {
        %tmpnot = xor i32 %a, -1                ; <i32> [#uses=1]
        %tmp2 = add i32 %tmpnot, %a             ; <i32> [#uses=1]
        ret i32 %tmp2
}

define i32 @test36(i32 %a) {
	%x = and i32 %a, -2
	%y = and i32 %a, -126
	%z = add i32 %x, %y
	%q = and i32 %z, 1  ; always zero
	ret i32 %q
}

define i1 @test37(i32 %a, i32 %b) nounwind readnone {
  %add = add i32 %a, %b
  %cmp = icmp eq i32 %add, %a
  ret i1 %cmp
}

define i1 @test38(i32 %a, i32 %b) nounwind readnone {
  %add = add i32 %a, %b
  %cmp = icmp eq i32 %add, %b
  ret i1 %cmp
}

define i1 @test39(i32 %a, i32 %b) nounwind readnone {
  %add = add i32 %b, %a
  %cmp = icmp eq i32 %add, %a
  ret i1 %cmp
}

define i1 @test40(i32 %a, i32 %b) nounwind readnone {
  %add = add i32 %b, %a
  %cmp = icmp eq i32 %add, %b
  ret i1 %cmp
}
