~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/ScalarRepl/lifetime.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt -scalarrepl -S < %s | FileCheck %s
 
2
 
 
3
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
 
4
target triple = "x86_64-unknown-linux-gnu"
 
5
 
 
6
declare void @llvm.lifetime.start(i64, i8*)
 
7
declare void @llvm.lifetime.end(i64, i8*)
 
8
 
 
9
%t1 = type {i32, i32, i32}
 
10
 
 
11
define void @test1() {
 
12
; CHECK-LABEL: @test1(
 
13
  %A = alloca %t1
 
14
  %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
 
15
  %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
 
16
  %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
 
17
  %B = bitcast i32* %A1 to i8*
 
18
  store i32 0, i32* %A1
 
19
  call void @llvm.lifetime.start(i64 -1, i8* %B)
 
20
  ret void
 
21
; CHECK-NEXT: ret void
 
22
}
 
23
 
 
24
define void @test2() {
 
25
; CHECK-LABEL: @test2(
 
26
  %A = alloca %t1
 
27
  %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
 
28
  %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
 
29
  %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
 
30
  %B = bitcast i32* %A2 to i8*
 
31
  store i32 0, i32* %A2
 
32
  call void @llvm.lifetime.start(i64 -1, i8* %B)
 
33
  %C = load i32, i32* %A2
 
34
  ret void
 
35
; CHECK: ret void
 
36
}
 
37
 
 
38
define void @test3() {
 
39
; CHECK-LABEL: @test3(
 
40
  %A = alloca %t1
 
41
  %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
 
42
  %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
 
43
  %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
 
44
  %B = bitcast i32* %A2 to i8*
 
45
  store i32 0, i32* %A2
 
46
  call void @llvm.lifetime.start(i64 6, i8* %B)
 
47
  %C = load i32, i32* %A2
 
48
  ret void
 
49
; CHECK-NEXT: ret void
 
50
}
 
51
 
 
52
define void @test4() {
 
53
; CHECK-LABEL: @test4(
 
54
  %A = alloca %t1
 
55
  %A1 = getelementptr %t1, %t1* %A, i32 0, i32 0
 
56
  %A2 = getelementptr %t1, %t1* %A, i32 0, i32 1
 
57
  %A3 = getelementptr %t1, %t1* %A, i32 0, i32 2
 
58
  %B = bitcast i32* %A2 to i8*
 
59
  store i32 0, i32* %A2
 
60
  call void @llvm.lifetime.start(i64 1, i8* %B)
 
61
  %C = load i32, i32* %A2
 
62
  ret void
 
63
; CHECK-NEXT: ret void
 
64
}
 
65
 
 
66
%t2 = type {i32, [4 x i8], i32}
 
67
 
 
68
define void @test5() {
 
69
; CHECK-LABEL: @test5(
 
70
  %A = alloca %t2
 
71
; CHECK: alloca{{.*}}i8
 
72
; CHECK: alloca{{.*}}i8
 
73
; CHECK: alloca{{.*}}i8
 
74
 
 
75
  %A21 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 0
 
76
  %A22 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 1
 
77
  %A23 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 2
 
78
  %A24 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 3
 
79
; CHECK-NOT: store i8 1
 
80
  store i8 1, i8* %A21
 
81
  store i8 2, i8* %A22
 
82
  store i8 3, i8* %A23
 
83
  store i8 4, i8* %A24
 
84
 
 
85
  %A1 = getelementptr %t2, %t2* %A, i32 0, i32 0
 
86
  %A2 = getelementptr %t2, %t2* %A, i32 0, i32 1, i32 1
 
87
  %A3 = getelementptr %t2, %t2* %A, i32 0, i32 2
 
88
  store i8 0, i8* %A2
 
89
  call void @llvm.lifetime.start(i64 5, i8* %A2)
 
90
; CHECK: llvm.lifetime{{.*}}i64 1
 
91
; CHECK: llvm.lifetime{{.*}}i64 1
 
92
; CHECK: llvm.lifetime{{.*}}i64 1
 
93
  %C = load i8, i8* %A2
 
94
  ret void
 
95
}
 
96
 
 
97
%t3 = type {[4 x i16], [4 x i8]}
 
98
 
 
99
define void @test6() {
 
100
; CHECK-LABEL: @test6(
 
101
  %A = alloca %t3
 
102
; CHECK: alloca i8
 
103
; CHECK: alloca i8
 
104
; CHECK: alloca i8
 
105
 
 
106
  %A11 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 0
 
107
  %A12 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 1
 
108
  %A13 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 2
 
109
  %A14 = getelementptr %t3, %t3* %A, i32 0, i32 0, i32 3
 
110
  store i16 11, i16* %A11
 
111
  store i16 12, i16* %A12
 
112
  store i16 13, i16* %A13
 
113
  store i16 14, i16* %A14
 
114
; CHECK-NOT: store i16 11
 
115
; CHECK-NOT: store i16 12
 
116
; CHECK-NOT: store i16 13
 
117
; CHECK-NOT: store i16 14
 
118
 
 
119
  %A21 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 0
 
120
  %A22 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 1
 
121
  %A23 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 2
 
122
  %A24 = getelementptr %t3, %t3* %A, i32 0, i32 1, i32 3
 
123
  store i8 21, i8* %A21
 
124
  store i8 22, i8* %A22
 
125
  store i8 23, i8* %A23
 
126
  store i8 24, i8* %A24
 
127
; CHECK: store i8 21
 
128
; CHECK: store i8 22
 
129
; CHECK: store i8 23
 
130
; CHECK-NOT: store i8 24
 
131
 
 
132
  %B = bitcast i16* %A13 to i8*
 
133
  call void @llvm.lifetime.start(i64 7, i8* %B)
 
134
; CHECK: lifetime.start{{.*}}i64 1
 
135
; CHECK: lifetime.start{{.*}}i64 1
 
136
; CHECK: lifetime.start{{.*}}i64 1
 
137
 
 
138
  ret void
 
139
}