Use address-taken to disambiguate global variable and indirect memops.

Major steps include:
 1). introduces a not-addr-taken bit-field in GlobalVariable
 2). GlobalOpt pass sets "not-address-taken" if it proves a global varirable 
    dosen't have its address taken.
 3). AA use this info for disambiguation. 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193251 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Shuxin Yang
2013-10-23 17:28:19 +00:00
parent f39fe46062
commit 8e3851a6eb
18 changed files with 72 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
; RUN: opt < %s -globalopt -S | grep "@X = internal unnamed_addr global i32"
; RUN: opt < %s -globalopt -S | grep "@X = internal unnamed_addr global notaddrtaken i32"
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i386-apple-darwin7"
@X = internal global i32* null ; <i32**> [#uses=2]

View File

@@ -8,7 +8,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
target triple = "x86_64-apple-darwin10.0"
@TOP = internal global i64* null ; <i64**> [#uses=2]
; CHECK: @TOP = internal unnamed_addr global i64* null
; CHECK: @TOP = internal unnamed_addr global notaddrtaken i64* null
@channelColumns = internal global i64 0 ; <i64*> [#uses=2]
; Derived from @DescribeChannel() in yacr2

View File

@@ -3,8 +3,8 @@
@GV1 = internal global i64 1
@GV2 = internal global i32 0
; CHECK: @GV1 = internal unnamed_addr constant i64 1
; CHECK: @GV2 = internal unnamed_addr global i32 0
; CHECK: @GV1 = internal unnamed_addr constant notaddrtaken i64 1
; CHECK: @GV2 = internal unnamed_addr global notaddrtaken i32 0
define void @test1() {
entry:

View File

@@ -1,5 +1,5 @@
; RUN: opt < %s -globalopt -S > %t
; RUN: grep "@Y = internal unnamed_addr global \[3 x [%]struct.X\] zeroinitializer" %t
; RUN: grep "@Y = internal unnamed_addr global notaddrtaken \[3 x [%]struct.X\] zeroinitializer" %t
; RUN: grep load %t | count 6
; RUN: grep "add i32 [%]a, [%]b" %t | count 3

View File

@@ -4,7 +4,7 @@
@G = internal addrspace(1) global i32 0
; CHECK: @G
; CHECK: addrspace(1)
; CHECK: global i1 false
; CHECK: global notaddrtaken i1 false
define void @set1() {
store i32 0, i32 addrspace(1)* @G

View File

@@ -6,10 +6,10 @@
@d = internal constant [4 x i8] c"foo\00", align 1
@e = linkonce_odr global i32 0
; CHECK: @a = internal global i32 0, align 4
; CHECK: @a = internal global notaddrtaken i32 0, align 4
; CHECK: @b = internal global i32 0, align 4
; CHECK: @c = internal unnamed_addr global i32 0, align 4
; CHECK: @d = internal unnamed_addr constant [4 x i8] c"foo\00", align 1
; CHECK: @c = internal unnamed_addr global notaddrtaken i32 0, align 4
; CHECK: @d = internal unnamed_addr constant notaddrtaken [4 x i8] c"foo\00", align 1
; CHECK: @e = linkonce_odr global i32 0
define i32 @get_e() {