annotate llvm/test/Transforms/GlobalOpt/globalsra-unknown-index.ll @ 201:a96fbbdf2d0f

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 04 Jun 2021 21:07:06 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; RUN: opt < %s -globalopt -S | FileCheck %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 ; globalopt should not sra the global, because it can't see the index.
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 %struct.X = type { [3 x i32], [3 x i32] }
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 ; CHECK: @Y = internal unnamed_addr global [3 x %struct.X] zeroinitializer
anatofuz
parents:
diff changeset
8 @Y = internal global [3 x %struct.X] zeroinitializer
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 @addr = external global i8
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 define void @frob() {
anatofuz
parents:
diff changeset
13 store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 ptrtoint (i8* @addr to i64)), align 4
anatofuz
parents:
diff changeset
14 ret void
anatofuz
parents:
diff changeset
15 }
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 ; CHECK-LABEL: @borf
anatofuz
parents:
diff changeset
18 ; CHECK: %a = load
anatofuz
parents:
diff changeset
19 ; CHECK: %b = load
anatofuz
parents:
diff changeset
20 ; CHECK: add i32 %a, %b
anatofuz
parents:
diff changeset
21 define i32 @borf(i64 %i, i64 %j) {
anatofuz
parents:
diff changeset
22 %p = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 0
anatofuz
parents:
diff changeset
23 %a = load i32, i32* %p
anatofuz
parents:
diff changeset
24 %q = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 1, i64 0
anatofuz
parents:
diff changeset
25 %b = load i32, i32* %q
anatofuz
parents:
diff changeset
26 %c = add i32 %a, %b
anatofuz
parents:
diff changeset
27 ret i32 %c
anatofuz
parents:
diff changeset
28 }
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 ; CHECK-LABEL: @borg
anatofuz
parents:
diff changeset
31 ; CHECK: %a = load
anatofuz
parents:
diff changeset
32 ; CHECK: %b = load
anatofuz
parents:
diff changeset
33 ; CHECK: add i32 %a, %b
anatofuz
parents:
diff changeset
34 define i32 @borg(i64 %i, i64 %j) {
anatofuz
parents:
diff changeset
35 %p = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 0, i64 1
anatofuz
parents:
diff changeset
36 %a = load i32, i32* %p
anatofuz
parents:
diff changeset
37 %q = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 1, i64 1
anatofuz
parents:
diff changeset
38 %b = load i32, i32* %q
anatofuz
parents:
diff changeset
39 %c = add i32 %a, %b
anatofuz
parents:
diff changeset
40 ret i32 %c
anatofuz
parents:
diff changeset
41 }
anatofuz
parents:
diff changeset
42
anatofuz
parents:
diff changeset
43 ; CHECK-LABEL: @borh
anatofuz
parents:
diff changeset
44 ; CHECK: %a = load
anatofuz
parents:
diff changeset
45 ; CHECK: %b = load
anatofuz
parents:
diff changeset
46 ; CHECK: add i32 %a, %b
anatofuz
parents:
diff changeset
47 define i32 @borh(i64 %i, i64 %j) {
anatofuz
parents:
diff changeset
48 %p = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 0, i64 2
anatofuz
parents:
diff changeset
49 %a = load i32, i32* %p
anatofuz
parents:
diff changeset
50 %q = getelementptr inbounds [3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 1, i64 2
anatofuz
parents:
diff changeset
51 %b = load i32, i32* %q
anatofuz
parents:
diff changeset
52 %c = add i32 %a, %b
anatofuz
parents:
diff changeset
53 ret i32 %c
anatofuz
parents:
diff changeset
54 }