Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -argpromotion -S | FileCheck %s |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 2 | ; PR2498 |
| 3 | |
| 4 | ; This test tries to convince argpromotion about promoting the load from %A + 2, |
| 5 | ; because there is a load of %A in the entry block |
| 6 | define internal i32 @callee(i1 %C, i32* %A) { |
Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 7 | ; CHECK-LABEL: define internal i32 @callee( |
| 8 | ; CHECK: i1 %C, i32* %A) |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 9 | entry: |
Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 10 | ; Unconditonally load the element at %A |
| 11 | %A.0 = load i32, i32* %A |
| 12 | br i1 %C, label %T, label %F |
| 13 | |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 14 | T: |
Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 15 | ret i32 %A.0 |
| 16 | |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 17 | F: |
Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 18 | ; Load the element at offset two from %A. This should not be promoted! |
| 19 | %A.2 = getelementptr i32, i32* %A, i32 2 |
| 20 | %R = load i32, i32* %A.2 |
| 21 | ret i32 %R |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 22 | } |
| 23 | |
| 24 | define i32 @foo() { |
Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 25 | ; CHECK-LABEL: define i32 @foo |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 26 | %X = call i32 @callee(i1 false, i32* null) ; <i32> [#uses=1] |
Chandler Carruth | 044d1e0 | 2017-02-06 08:43:11 +0000 | [diff] [blame] | 27 | ; CHECK: call i32 @callee(i1 false, i32* null) |
Matthijs Kooijman | fd30704 | 2008-07-29 10:00:13 +0000 | [diff] [blame] | 28 | ret i32 %X |
| 29 | } |
| 30 | |