Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 1 | ; RUN: opt -codegenprepare -S < %s | FileCheck %s |
| 2 | |
| 3 | target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128" |
| 4 | target triple = "x86_64-pc-linux-gnu" |
| 5 | |
| 6 | declare zeroext i1 @return_i1() |
| 7 | |
Philip Reames | e1bf270 | 2015-03-27 05:09:33 +0000 | [diff] [blame] | 8 | define i32 @test_sor_basic(i32* %base) gc "statepoint-example" { |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 9 | ; CHECK: getelementptr i32, i32* %base, i32 15 |
| 10 | ; CHECK: getelementptr i32, i32* %base-new, i32 15 |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 11 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 12 | %ptr = getelementptr i32, i32* %base, i32 15 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 13 | %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, i32* %base, i32* %ptr) |
| 14 | %base-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 5) |
| 15 | %ptr-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 16 | %ret = load i32, i32* %ptr-new |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 17 | ret i32 %ret |
| 18 | } |
| 19 | |
Philip Reames | e1bf270 | 2015-03-27 05:09:33 +0000 | [diff] [blame] | 20 | define i32 @test_sor_two_derived(i32* %base) gc "statepoint-example" { |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 21 | ; CHECK: getelementptr i32, i32* %base, i32 15 |
| 22 | ; CHECK: getelementptr i32, i32* %base, i32 12 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 23 | ; CHECK: getelementptr i32, i32* %base-new, i32 12 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 24 | ; CHECK: getelementptr i32, i32* %base-new, i32 15 |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 25 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 26 | %ptr = getelementptr i32, i32* %base, i32 15 |
| 27 | %ptr2 = getelementptr i32, i32* %base, i32 12 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 28 | %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, i32* %base, i32* %ptr, i32* %ptr2) |
| 29 | %base-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 5) |
| 30 | %ptr-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
| 31 | %ptr2-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 7) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 32 | %ret = load i32, i32* %ptr-new |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 33 | ret i32 %ret |
| 34 | } |
| 35 | |
Philip Reames | e1bf270 | 2015-03-27 05:09:33 +0000 | [diff] [blame] | 36 | define i32 @test_sor_ooo(i32* %base) gc "statepoint-example" { |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 37 | ; CHECK: getelementptr i32, i32* %base, i32 15 |
| 38 | ; CHECK: getelementptr i32, i32* %base-new, i32 15 |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 39 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 40 | %ptr = getelementptr i32, i32* %base, i32 15 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 41 | %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, i32* %base, i32* %ptr) |
| 42 | %ptr-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
| 43 | %base-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 5) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 44 | %ret = load i32, i32* %ptr-new |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 45 | ret i32 %ret |
| 46 | } |
| 47 | |
Philip Reames | e1bf270 | 2015-03-27 05:09:33 +0000 | [diff] [blame] | 48 | define i32 @test_sor_gep_smallint([3 x i32]* %base) gc "statepoint-example" { |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 49 | ; CHECK: getelementptr [3 x i32], [3 x i32]* %base, i32 0, i32 2 |
| 50 | ; CHECK: getelementptr [3 x i32], [3 x i32]* %base-new, i32 0, i32 2 |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 51 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 52 | %ptr = getelementptr [3 x i32], [3 x i32]* %base, i32 0, i32 2 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 53 | %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, [3 x i32]* %base, i32* %ptr) |
| 54 | %base-new = call [3 x i32]* @llvm.experimental.gc.relocate.p0a3i32(i32 %tok, i32 5, i32 5) |
| 55 | %ptr-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 56 | %ret = load i32, i32* %ptr-new |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 57 | ret i32 %ret |
| 58 | } |
| 59 | |
Philip Reames | e1bf270 | 2015-03-27 05:09:33 +0000 | [diff] [blame] | 60 | define i32 @test_sor_gep_largeint([3 x i32]* %base) gc "statepoint-example" { |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 61 | ; CHECK: getelementptr [3 x i32], [3 x i32]* %base, i32 0, i32 21 |
| 62 | ; CHECK-NOT: getelementptr [3 x i32], [3 x i32]* %base-new, i32 0, i32 21 |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 63 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 64 | %ptr = getelementptr [3 x i32], [3 x i32]* %base, i32 0, i32 21 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 65 | %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, [3 x i32]* %base, i32* %ptr) |
| 66 | %base-new = call [3 x i32]* @llvm.experimental.gc.relocate.p0a3i32(i32 %tok, i32 5, i32 5) |
| 67 | %ptr-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 68 | %ret = load i32, i32* %ptr-new |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 69 | ret i32 %ret |
| 70 | } |
| 71 | |
Philip Reames | e1bf270 | 2015-03-27 05:09:33 +0000 | [diff] [blame] | 72 | define i32 @test_sor_noop(i32* %base) gc "statepoint-example" { |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 73 | ; CHECK: getelementptr i32, i32* %base, i32 15 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 74 | ; CHECK: call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
| 75 | ; CHECK: call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 7) |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 76 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 77 | %ptr = getelementptr i32, i32* %base, i32 15 |
| 78 | %ptr2 = getelementptr i32, i32* %base, i32 12 |
Pat Gavlin | cc0431d | 2015-05-08 18:07:42 +0000 | [diff] [blame^] | 79 | %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 0, i32* %base, i32* %ptr, i32* %ptr2) |
| 80 | %ptr-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 6) |
| 81 | %ptr2-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 5, i32 7) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 82 | %ret = load i32, i32* %ptr-new |
Ramkumar Ramachandra | dba7329 | 2015-01-14 23:27:07 +0000 | [diff] [blame] | 83 | ret i32 %ret |
| 84 | } |
| 85 | |
| 86 | declare i32 @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()*, i32, i32, ...) |
| 87 | declare i32* @llvm.experimental.gc.relocate.p0i32(i32, i32, i32) |
| 88 | declare [3 x i32]* @llvm.experimental.gc.relocate.p0a3i32(i32, i32, i32) |