Mercurial > hg > CbC > CbC_llvm
diff test/Analysis/BasicAA/gcsetest.ll @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | 60c9769439b8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/Analysis/BasicAA/gcsetest.ll Thu Dec 12 13:56:28 2013 +0900 @@ -0,0 +1,61 @@ +; Test that GCSE uses basicaa to do alias analysis, which is capable of +; disambiguating some obvious cases. All loads should be removable in +; this testcase. + +; RUN: opt < %s -basicaa -gvn -instcombine -dce -S | FileCheck %s + +@A = global i32 7 +@B = global i32 8 + +; CHECK: define i32 @test() +; CHECK-NEXT: store i32 123, i32* @B +; CHECK-NEXT: ret i32 0 + +define i32 @test() { + %A1 = load i32* @A + + store i32 123, i32* @B ; Store cannot alias @A + + %A2 = load i32* @A + %X = sub i32 %A1, %A2 + ret i32 %X +} + +; CHECK: define i32 @test2() +; CHECK-NEXT: br label %Loop +; CHECK: Loop: +; CHECK-NEXT: store i32 0, i32* @B +; CHECK-NEXT: br i1 true, label %out, label %Loop +; CHECK: out: +; CHECK-NEXT: ret i32 0 + +define i32 @test2() { + %A1 = load i32* @A + br label %Loop +Loop: + %AP = phi i32 [0, %0], [%X, %Loop] + store i32 %AP, i32* @B ; Store cannot alias @A + + %A2 = load i32* @A + %X = sub i32 %A1, %A2 + %c = icmp eq i32 %X, 0 + br i1 %c, label %out, label %Loop + +out: + ret i32 %X +} + +declare void @external() + +; CHECK: define i32 @test3() +; CHECK-NEXT: call void @external() +; CHECK-NEXT: ret i32 7 + +define i32 @test3() { + %X = alloca i32 + store i32 7, i32* %X + call void @external() + %V = load i32* %X + ret i32 %V +} +