Skip to content

Commit d3ac92f

Browse files
committed
[GlobalOpt] Regenerate test checks (NFC)
And drop the unnecessary main function.
1 parent 45b6a33 commit d3ac92f

File tree

1 file changed

+39
-37
lines changed

1 file changed

+39
-37
lines changed

llvm/test/Transforms/GlobalOpt/global-demotion.ll

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
12
; RUN: opt -passes=globalopt -S < %s | FileCheck %s
23

34
@G1 = internal global i32 5
@@ -6,72 +7,73 @@
67
@G4 = internal global i32 5
78
@G5 = internal global i32 5
89

9-
; CHECK-LABEL: @test1
10-
define internal i32 @test1() norecurse {
11-
; CHECK-NOT: @G1
10+
define i32 @test1() norecurse {
11+
; CHECK-LABEL: @test1(
12+
; CHECK-NEXT: [[G1:%.*]] = alloca i32, align 4
13+
; CHECK-NEXT: store i32 5, ptr [[G1]], align 4
14+
; CHECK-NEXT: store i32 4, ptr [[G1]], align 4
15+
; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[G1]], align 4
16+
; CHECK-NEXT: ret i32 [[A]]
17+
;
1218
store i32 4, ptr @G1
1319
%a = load i32, ptr @G1
14-
; CHECK: ret
1520
ret i32 %a
1621
}
1722

1823
; The load comes before the store which makes @G2 live before the call.
19-
; CHECK-LABEL: @test2
20-
define internal i32 @test2() norecurse {
21-
; CHECK-NOT: %G2
24+
define i32 @test2() norecurse {
25+
; CHECK-LABEL: @test2(
26+
; CHECK-NEXT: [[A_B:%.*]] = load i1, ptr @G2, align 1
27+
; CHECK-NEXT: [[A:%.*]] = select i1 [[A_B]], i32 4, i32 5
28+
; CHECK-NEXT: store i1 true, ptr @G2, align 1
29+
; CHECK-NEXT: ret i32 [[A]]
30+
;
2231
%a = load i32, ptr @G2
2332
store i32 4, ptr @G2
24-
; CHECK: ret
2533
ret i32 %a
2634
}
2735

2836
; This global is indexed by a GEP - this makes it partial alias and we bail out.
2937
; FIXME: We don't actually have to bail out in this case.
30-
31-
; CHECK-LABEL: @test3
32-
define internal i32 @test3() norecurse {
33-
; CHECK-NOT: %G3
38+
define i32 @test3() norecurse {
39+
; CHECK-LABEL: @test3(
40+
; CHECK-NEXT: [[A_B:%.*]] = load i1, ptr @G3, align 1
41+
; CHECK-NEXT: [[A:%.*]] = select i1 [[A_B]], i32 4, i32 5
42+
; CHECK-NEXT: store i1 true, ptr @G3, align 1
43+
; CHECK-NEXT: ret i32 [[A]]
44+
;
3445
%a = load i32, ptr @G3
3546
store i32 4, ptr @G3
36-
; CHECK: ret
3747
ret i32 %a
3848
}
3949

4050
; The global is casted away to a larger type then loaded. The store only partially
4151
; covers the load, so we must not demote.
42-
43-
; CHECK-LABEL: @test4
44-
define internal i32 @test4() norecurse {
45-
; CHECK-NOT: %G4
52+
define i32 @test4() norecurse {
53+
; CHECK-LABEL: @test4(
54+
; CHECK-NEXT: store i32 4, ptr @G4, align 4
55+
; CHECK-NEXT: [[A:%.*]] = load i64, ptr @G4, align 4
56+
; CHECK-NEXT: [[B:%.*]] = trunc i64 [[A]] to i32
57+
; CHECK-NEXT: ret i32 [[B]]
58+
;
4659
store i32 4, ptr @G4
4760
%a = load i64, ptr @G4
4861
%b = trunc i64 %a to i32
49-
; CHECK: ret
5062
ret i32 %b
5163
}
5264

5365
; The global is casted away to a smaller type then loaded. This one is fine.
54-
55-
; CHECK-LABEL: @test5
56-
define internal i32 @test5() norecurse {
57-
; CHECK-NOT: @G5
66+
define i32 @test5() norecurse {
67+
; CHECK-LABEL: @test5(
68+
; CHECK-NEXT: [[G5:%.*]] = alloca i32, align 4
69+
; CHECK-NEXT: store i32 5, ptr [[G5]], align 4
70+
; CHECK-NEXT: store i32 4, ptr [[G5]], align 4
71+
; CHECK-NEXT: [[A:%.*]] = load i16, ptr [[G5]], align 2
72+
; CHECK-NEXT: [[B:%.*]] = zext i16 [[A]] to i32
73+
; CHECK-NEXT: ret i32 [[B]]
74+
;
5875
store i32 4, ptr @G5
5976
%a = load i16, ptr @G5
6077
%b = zext i16 %a to i32
61-
; CHECK: ret
6278
ret i32 %b
6379
}
64-
65-
define i32 @main() norecurse {
66-
%a = call i32 @test1()
67-
%b = call i32 @test2()
68-
%c = call i32 @test3()
69-
%d = call i32 @test4()
70-
%e = call i32 @test5()
71-
72-
%x = or i32 %a, %b
73-
%y = or i32 %x, %c
74-
%z = or i32 %y, %d
75-
%w = or i32 %z, %e
76-
ret i32 %w
77-
}

0 commit comments

Comments
 (0)