| OLD | NEW |
| 1 ; This is distilled from a real function that led to a bug in the | 1 ; This is distilled from a real function that led to a bug in the |
| 2 ; address mode optimization code. It followed assignment chains | 2 ; address mode optimization code. It followed assignment chains |
| 3 ; through non-SSA temporaries created from Phi instruction lowering. | 3 ; through non-SSA temporaries created from Phi instruction lowering. |
| 4 ; | 4 ; |
| 5 ; This test depends to some degree on the stability of "--verbose | 5 ; This test depends to some degree on the stability of "--verbose |
| 6 ; addropt" output format. | 6 ; addropt" output format. |
| 7 | 7 |
| 8 ; REQUIRES: x86-32 |
| 9 ; REQUIRES: allow_dump |
| 8 ; RUN: %p2i -i %s --args -O2 --verbose addropt | FileCheck %s | 10 ; RUN: %p2i -i %s --args -O2 --verbose addropt | FileCheck %s |
| 9 | 11 |
| 10 declare i32 @_calloc_r(i32, i32, i32) | 12 declare i32 @_calloc_r(i32, i32, i32) |
| 11 | 13 |
| 12 define internal i32 @_Balloc(i32 %ptr, i32 %k) { | 14 define internal i32 @_Balloc(i32 %ptr, i32 %k) { |
| 13 entry: | 15 entry: |
| 14 %gep = add i32 %ptr, 76 | 16 %gep = add i32 %ptr, 76 |
| 15 %gep.asptr = inttoptr i32 %gep to i32* | 17 %gep.asptr = inttoptr i32 %gep to i32* |
| 16 %0 = load i32* %gep.asptr, align 1 | 18 %0 = load i32* %gep.asptr, align 1 |
| 17 %cmp = icmp eq i32 %0, 0 | 19 %cmp = icmp eq i32 %0, 0 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 ; Instruction: [ 12] %gep_array = mul i32 %k, 4 | 59 ; Instruction: [ 12] %gep_array = mul i32 %k, 4 |
| 58 ; results in Base=%__4, Index=%k, Shift=2, Offset=0 | 60 ; results in Base=%__4, Index=%k, Shift=2, Offset=0 |
| 59 ; | 61 ; |
| 60 ; CHECK-NOT: results in Base=%__4, | 62 ; CHECK-NOT: results in Base=%__4, |
| 61 ; | 63 ; |
| 62 ret i32 %2 | 64 ret i32 %2 |
| 63 | 65 |
| 64 return: ; preds = %if.then | 66 return: ; preds = %if.then |
| 65 ret i32 0 | 67 ret i32 0 |
| 66 } | 68 } |
| OLD | NEW |