Chris Lattner | ac39b4e | 2002-08-22 17:31:36 +0000 | [diff] [blame] | 1 | ; Test that GCSE uses basicaa to do alias analysis, which is capable of |
| 2 | ; disambiguating some obvious cases. All loads should be removable in |
| 3 | ; this testcase. |
| 4 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 5 | ; RUN: llvm-as < %s | opt -basicaa -load-vn -gcse -instcombine -dce \ |
| 6 | ; RUN: | llvm-dis | not grep load |
Chris Lattner | ac39b4e | 2002-08-22 17:31:36 +0000 | [diff] [blame] | 7 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 8 | @A = global i32 7 |
| 9 | @B = global i32 8 |
Chris Lattner | ac39b4e | 2002-08-22 17:31:36 +0000 | [diff] [blame] | 10 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 11 | define i32 @test() { |
| 12 | %A1 = load i32* @A |
Chris Lattner | ac39b4e | 2002-08-22 17:31:36 +0000 | [diff] [blame] | 13 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 14 | store i32 123, i32* @B ; Store cannot alias @A |
Chris Lattner | ac39b4e | 2002-08-22 17:31:36 +0000 | [diff] [blame] | 15 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 16 | %A2 = load i32* @A |
| 17 | %X = sub i32 %A1, %A2 |
| 18 | ret i32 %X |
Chris Lattner | ac39b4e | 2002-08-22 17:31:36 +0000 | [diff] [blame] | 19 | } |
| 20 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 21 | define i32 @test2() { |
| 22 | %A1 = load i32* @A |
Chris Lattner | 8673e44 | 2002-08-22 20:22:55 +0000 | [diff] [blame] | 23 | br label %Loop |
| 24 | Loop: |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 25 | %AP = phi i32 [0, %0], [%X, %Loop] |
| 26 | store i32 %AP, i32* @B ; Store cannot alias @A |
Chris Lattner | 8673e44 | 2002-08-22 20:22:55 +0000 | [diff] [blame] | 27 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 28 | %A2 = load i32* @A |
| 29 | %X = sub i32 %A1, %A2 |
| 30 | %c = icmp eq i32 %X, 0 |
| 31 | br i1 %c, label %out, label %Loop |
Chris Lattner | 8673e44 | 2002-08-22 20:22:55 +0000 | [diff] [blame] | 32 | |
| 33 | out: |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 34 | ret i32 %X |
Chris Lattner | 8673e44 | 2002-08-22 20:22:55 +0000 | [diff] [blame] | 35 | } |
| 36 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 37 | declare void @external() |
Chris Lattner | 1306089 | 2004-03-12 22:38:31 +0000 | [diff] [blame] | 38 | |
Tanya Lattner | dcd188d | 2008-02-14 06:56:27 +0000 | [diff] [blame^] | 39 | define i32 @test3() { |
| 40 | %X = alloca i32 |
| 41 | store i32 7, i32* %X |
| 42 | call void @external() |
| 43 | %V = load i32* %X |
| 44 | ret i32 %V |
Chris Lattner | 1306089 | 2004-03-12 22:38:31 +0000 | [diff] [blame] | 45 | } |
| 46 | |