Keno Fischer | 5329174 | 2017-06-09 19:31:10 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -basicaa -sink -S | FileCheck %s |
| 2 | declare void @foo(i64 *) |
Fiona Glaser | efe6a84 | 2018-01-11 21:28:57 +0000 | [diff] [blame^] | 3 | declare i8* @llvm.load.relative.i32(i8* %ptr, i32 %offset) argmemonly nounwind readonly |
| 4 | define i64 @sinkload(i1 %cmp, i8* %ptr, i32 %off) { |
Keno Fischer | 5329174 | 2017-06-09 19:31:10 +0000 | [diff] [blame] | 5 | ; CHECK-LABEL: @sinkload |
| 6 | top: |
| 7 | %a = alloca i64 |
| 8 | ; CHECK: call void @foo(i64* %a) |
| 9 | ; CHECK-NEXT: %x = load i64, i64* %a |
Fiona Glaser | efe6a84 | 2018-01-11 21:28:57 +0000 | [diff] [blame^] | 10 | ; CHECK-NEXT: %y = call i8* @llvm.load.relative.i32(i8* %ptr, i32 %off) |
Keno Fischer | 5329174 | 2017-06-09 19:31:10 +0000 | [diff] [blame] | 11 | call void @foo(i64* %a) |
| 12 | %x = load i64, i64* %a |
Fiona Glaser | efe6a84 | 2018-01-11 21:28:57 +0000 | [diff] [blame^] | 13 | %y = call i8* @llvm.load.relative.i32(i8* %ptr, i32 %off) |
Keno Fischer | 5329174 | 2017-06-09 19:31:10 +0000 | [diff] [blame] | 14 | br i1 %cmp, label %A, label %B |
| 15 | A: |
| 16 | store i64 0, i64 *%a |
Fiona Glaser | efe6a84 | 2018-01-11 21:28:57 +0000 | [diff] [blame^] | 17 | store i8 0, i8 *%ptr |
Keno Fischer | 5329174 | 2017-06-09 19:31:10 +0000 | [diff] [blame] | 18 | br label %B |
| 19 | B: |
| 20 | ; CHECK-NOT: load i64, i64 *%a |
Fiona Glaser | efe6a84 | 2018-01-11 21:28:57 +0000 | [diff] [blame^] | 21 | ; CHECK-NOT: call i8* @llvm.load.relative(i8* %ptr, i32 off) |
| 22 | %y2 = ptrtoint i8* %y to i64 |
| 23 | %retval = add i64 %y2, %x |
| 24 | ret i64 %retval |
Keno Fischer | 5329174 | 2017-06-09 19:31:10 +0000 | [diff] [blame] | 25 | } |
Fiona Glaser | efe6a84 | 2018-01-11 21:28:57 +0000 | [diff] [blame^] | 26 | |