Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 1 | ; RUN: opt -basicaa -load-combine -instcombine -S < %s | FileCheck %s |
| 2 | target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" |
| 3 | target triple = "x86_64-unknown-linux-gnu" |
| 4 | |
| 5 | declare void @llvm.assume(i1) nounwind |
| 6 | |
| 7 | ; 'load' before the 'call' gets optimized: |
| 8 | define i64 @test1(i32* nocapture readonly %a, i1 %b) { |
| 9 | ; CHECK-LABEL: @test1 |
| 10 | |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 11 | ; CHECK-DAG: load i64, i64* %1, align 4 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 12 | ; CHECK-DAG: tail call void @llvm.assume(i1 %b) |
| 13 | ; CHECK: ret i64 |
| 14 | |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 15 | %load1 = load i32, i32* %a, align 4 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 16 | %conv = zext i32 %load1 to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 17 | %arrayidx1 = getelementptr inbounds i32, i32* %a, i64 1 |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 18 | %load2 = load i32, i32* %arrayidx1, align 4 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 19 | tail call void @llvm.assume(i1 %b) |
| 20 | %conv2 = zext i32 %load2 to i64 |
| 21 | %shl = shl nuw i64 %conv2, 32 |
| 22 | %add = or i64 %shl, %conv |
| 23 | ret i64 %add |
| 24 | } |
| 25 | |
| 26 | ; 'call' before the 'load' doesn't get optimized: |
| 27 | define i64 @test2(i32* nocapture readonly %a, i1 %b) { |
| 28 | ; CHECK-LABEL: @test2 |
| 29 | |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 30 | ; CHECK-DAG: load i64, i64* %1, align 4 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 31 | ; CHECK-DAG: tail call void @llvm.assume(i1 %b) |
| 32 | ; CHECK: ret i64 |
| 33 | |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 34 | %load1 = load i32, i32* %a, align 4 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 35 | %conv = zext i32 %load1 to i64 |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 36 | %arrayidx1 = getelementptr inbounds i32, i32* %a, i64 1 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 37 | tail call void @llvm.assume(i1 %b) |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 38 | %load2 = load i32, i32* %arrayidx1, align 4 |
Hal Finkel | 840257a | 2014-11-03 23:19:16 +0000 | [diff] [blame] | 39 | %conv2 = zext i32 %load2 to i64 |
| 40 | %shl = shl nuw i64 %conv2, 32 |
| 41 | %add = or i64 %shl, %conv |
| 42 | ret i64 %add |
| 43 | } |
| 44 | |