Reid Spencer | ea8b07e | 2007-03-23 20:48:34 +0000 | [diff] [blame] | 1 | ; This test makes sure that or instructions are properly eliminated. |
| 2 | ; This test is for Integer BitWidth > 64 && BitWidth <= 1024. |
| 3 | ; |
Reid Spencer | ea8b07e | 2007-03-23 20:48:34 +0000 | [diff] [blame] | 4 | ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep or |
| 5 | |
Reid Spencer | ea8b07e | 2007-03-23 20:48:34 +0000 | [diff] [blame] | 6 | |
| 7 | define i777 @test0(i777 %X) { |
| 8 | %Y = or i777 %X, 0 |
| 9 | ret i777 %Y |
| 10 | } |
| 11 | |
| 12 | define i117 @test1(i117 %X) { |
| 13 | %Y = or i117 %X, -1 |
| 14 | ret i117 %Y |
| 15 | } |
| 16 | |
| 17 | define i1023 @test2(i1023 %A) { |
| 18 | ;; A | ~A == -1 |
| 19 | %NotA = xor i1023 -1, %A |
| 20 | %B = or i1023 %A, %NotA |
| 21 | ret i1023 %B |
| 22 | } |
| 23 | |
| 24 | define i399 @test3(i399 %V, i399 %M) { |
| 25 | ;; If we have: ((V + N) & C1) | (V & C2) |
| 26 | ;; .. and C2 = ~C1 and C2 is 0+1+ and (N & C2) == 0 |
| 27 | ;; replace with V+N. |
| 28 | %C1 = xor i399 274877906943, -1 ;; C2 = 274877906943 |
| 29 | %N = and i399 %M, 18446742974197923840 |
| 30 | %A = add i399 %V, %N |
| 31 | %B = and i399 %A, %C1 |
| 32 | %D = and i399 %V, 274877906943 |
| 33 | %R = or i399 %B, %D |
| 34 | ret i399 %R |
| 35 | } |