Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / GlobalOpt / globalsra-unknown-index.ll
blobaec795113e76c761734ed4b4b8f9a330af8eb994
1 ; RUN: opt < %s -passes=globalopt -S | FileCheck %s
3 ; globalopt should not sra the global, because it can't see the index.
5 %struct.X = type { [3 x i32], [3 x i32] }
7 ; CHECK: @Y = internal unnamed_addr global [3 x %struct.X] zeroinitializer
8 @Y = internal global [3 x %struct.X] zeroinitializer
10 @addr = external global i8
12 define void @frob() {
13   store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 ptrtoint (ptr @addr to i64)), align 4
14   ret void
17 ; CHECK-LABEL: @borf
18 ; CHECK: %a = load
19 ; CHECK: %b = load
20 ; CHECK: add i32 %a, %b
21 define i32 @borf(i64 %i, i64 %j) {
22   %a = load i32, ptr @Y
23   %q = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 0, i32 1, i64 0
24   %b = load i32, ptr %q
25   %c = add i32 %a, %b
26   ret i32 %c
29 ; CHECK-LABEL: @borg
30 ; CHECK: %a = load
31 ; CHECK: %b = load
32 ; CHECK: add i32 %a, %b
33 define i32 @borg(i64 %i, i64 %j) {
34   %p = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 1, i32 0, i64 1
35   %a = load i32, ptr %p
36   %q = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 1, i32 1, i64 1
37   %b = load i32, ptr %q
38   %c = add i32 %a, %b
39   ret i32 %c
42 ; CHECK-LABEL: @borh
43 ; CHECK: %a = load
44 ; CHECK: %b = load
45 ; CHECK: add i32 %a, %b
46 define i32 @borh(i64 %i, i64 %j) {
47   %p = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 2, i32 0, i64 2
48   %a = load i32, ptr %p
49   %q = getelementptr inbounds [3 x %struct.X], ptr @Y, i64 0, i64 2, i32 1, i64 2
50   %b = load i32, ptr %q
51   %c = add i32 %a, %b
52   ret i32 %c