Skip to content

Commit 0a59028

Browse files
committed
[GlobalOpt] Add test case for issue #115282
1 parent f5151ec commit 0a59028

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
2+
; RUN: opt < %s -passes=globalopt -S | FileCheck %s
3+
4+
@params = internal global [4 x i32] zeroinitializer, align 32
5+
6+
;.
7+
; CHECK: @params.0 = internal unnamed_addr global i32 0, align 32
8+
; CHECK: @params.1 = internal unnamed_addr global i32 0, align 32
9+
; CHECK: @params.2 = internal unnamed_addr global i32 0, align 8
10+
; CHECK: @params.3 = internal unnamed_addr global i32 0, align 32
11+
;.
12+
define void @set(i32 %a, i32 %b, i32 %c, i32 %d) {
13+
; CHECK-LABEL: define void @set(
14+
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]], i32 [[D:%.*]]) local_unnamed_addr {
15+
; CHECK-NEXT: store i32 [[A]], ptr @params.0, align 32
16+
; CHECK-NEXT: store i32 [[B]], ptr @params.1, align 32
17+
; CHECK-NEXT: store i32 [[C]], ptr @params.2, align 8
18+
; CHECK-NEXT: store i32 [[D]], ptr @params.3, align 32
19+
; CHECK-NEXT: ret void
20+
;
21+
store i32 %a, ptr @params
22+
store i32 %b, ptr getelementptr ([4 x i32], ptr @params, i32 0, i32 1)
23+
store i32 %c, ptr getelementptr ([4 x i32], ptr @params, i32 0, i32 2)
24+
store i32 %d, ptr getelementptr ([4 x i32], ptr @params, i32 0, i32 3)
25+
ret void
26+
}
27+
28+
%S = type { i32, i32, i32, i32 }
29+
30+
define %S @get() {
31+
; CHECK-LABEL: define %S @get() local_unnamed_addr {
32+
; CHECK-NEXT: [[A:%.*]] = load i32, ptr @params.0, align 32
33+
; CHECK-NEXT: [[SA:%.*]] = insertvalue [[S:%.*]] undef, i32 [[A]], 0
34+
; CHECK-NEXT: [[B:%.*]] = load i32, ptr @params.1, align 32
35+
; CHECK-NEXT: [[SB:%.*]] = insertvalue [[S]] [[SA]], i32 [[B]], 1
36+
; CHECK-NEXT: [[C:%.*]] = load i32, ptr @params.2, align 8
37+
; CHECK-NEXT: [[SC:%.*]] = insertvalue [[S]] [[SB]], i32 [[C]], 2
38+
; CHECK-NEXT: [[D:%.*]] = load i32, ptr @params.3, align 32
39+
; CHECK-NEXT: [[SD:%.*]] = insertvalue [[S]] [[SC]], i32 [[D]], 3
40+
; CHECK-NEXT: ret [[S]] [[SD]]
41+
;
42+
%a = load i32, ptr @params
43+
%sa = insertvalue %S undef, i32 %a, 0
44+
%b = load i32, ptr getelementptr ([4 x i32], ptr @params, i32 0, i32 1)
45+
%sb = insertvalue %S %sa, i32 %b, 1
46+
%c = load i32, ptr getelementptr ([4 x i32], ptr @params, i32 0, i32 2)
47+
%sc = insertvalue %S %sb, i32 %c, 2
48+
%d = load i32, ptr getelementptr ([4 x i32], ptr @params, i32 0, i32 3)
49+
%sd = insertvalue %S %sc, i32 %d, 3
50+
ret %S %sd
51+
}

0 commit comments

Comments
 (0)