Skip to content

Commit 00a10ef

Browse files
[InstCombine] Regenerate test checks (NFC)
1 parent 1d20b00 commit 00a10ef

File tree

3 files changed

+87
-35
lines changed

3 files changed

+87
-35
lines changed
Lines changed: 10 additions & 9 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 UTC_ARGS: --version 4
12
; RUN: opt < %s -passes=instcombine -S | grep inttoptr | count 2
23

34
;; Target triple for gep raising case below.
@@ -7,15 +8,15 @@ target triple = "i686-apple-darwin8"
78
; PR1795
89
define void @test2(i32 %.val24) {
910
EntryBlock:
10-
add i32 %.val24, -12
11-
inttoptr i32 %0 to ptr
12-
store i32 1, ptr %1
13-
add i32 %.val24, -16
14-
inttoptr i32 %2 to ptr
15-
getelementptr i32, ptr %3, i32 1
16-
load i32, ptr %4
17-
tail call i32 @callee( i32 %5 )
18-
ret void
11+
add i32 %.val24, -12
12+
inttoptr i32 %0 to ptr
13+
store i32 1, ptr %1
14+
add i32 %.val24, -16
15+
inttoptr i32 %2 to ptr
16+
getelementptr i32, ptr %3, i32 1
17+
load i32, ptr %4
18+
tail call i32 @callee( i32 %5 )
19+
ret void
1920
}
2021

2122
declare i32 @callee(i32)
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
12
; RUN: opt < %s -passes=instcombine -S | grep " sub " | count 1
23
; PR2047
34

45
define i32 @l(i32 %a, i32 %b, i32 %c, i32 %d) {
56
entry:
6-
%b.neg = sub i32 0, %b ; <i32> [#uses=1]
7-
%c.neg = sub i32 0, %c ; <i32> [#uses=1]
8-
%sub4 = add i32 %c.neg, %b.neg ; <i32> [#uses=1]
9-
%sub6 = add i32 %sub4, %d ; <i32> [#uses=1]
10-
ret i32 %sub6
7+
%b.neg = sub i32 0, %b ; <i32> [#uses=1]
8+
%c.neg = sub i32 0, %c ; <i32> [#uses=1]
9+
%sub4 = add i32 %c.neg, %b.neg ; <i32> [#uses=1]
10+
%sub6 = add i32 %sub4, %d ; <i32> [#uses=1]
11+
ret i32 %sub6
1112
}

llvm/test/Transforms/InstCombine/allocsize.ll

Lines changed: 71 additions & 21 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 UTC_ARGS: --version 4
12
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
23
;
34
; Test that instcombine folds allocsize function calls properly.
@@ -8,54 +9,79 @@
89
declare ptr @my_malloc(ptr, i32) allocsize(1)
910
declare ptr @my_calloc(ptr, ptr, i32, i32) allocsize(2, 3)
1011

11-
; CHECK-LABEL: define void @test_malloc
1212
define void @test_malloc(ptr %p, ptr %r) {
13+
; CHECK-LABEL: define void @test_malloc(
14+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]]) {
15+
; CHECK-NEXT: [[TMP1:%.*]] = call dereferenceable_or_null(100) ptr @my_malloc(ptr null, i32 100)
16+
; CHECK-NEXT: store ptr [[TMP1]], ptr [[P]], align 8
17+
; CHECK-NEXT: store i64 100, ptr [[R]], align 8
18+
; CHECK-NEXT: ret void
19+
;
1320
%1 = call ptr @my_malloc(ptr null, i32 100)
1421
store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
1522

1623
%2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
17-
; CHECK: store i64 100
1824
store i64 %2, ptr %r, align 8
1925
ret void
2026
}
2127

22-
; CHECK-LABEL: define void @test_calloc
2328
define void @test_calloc(ptr %p, ptr %r) {
29+
; CHECK-LABEL: define void @test_calloc(
30+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]]) {
31+
; CHECK-NEXT: [[TMP1:%.*]] = call dereferenceable_or_null(500) ptr @my_calloc(ptr null, ptr null, i32 100, i32 5)
32+
; CHECK-NEXT: store ptr [[TMP1]], ptr [[P]], align 8
33+
; CHECK-NEXT: store i64 500, ptr [[R]], align 8
34+
; CHECK-NEXT: ret void
35+
;
2436
%1 = call ptr @my_calloc(ptr null, ptr null, i32 100, i32 5)
2537
store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
2638

2739
%2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
28-
; CHECK: store i64 500
2940
store i64 %2, ptr %r, align 8
3041
ret void
3142
}
3243

3344
; Failure cases with non-constant values...
34-
; CHECK-LABEL: define void @test_malloc_fails
3545
define void @test_malloc_fails(ptr %p, ptr %r, i32 %n) {
46+
; CHECK-LABEL: define void @test_malloc_fails(
47+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]], i32 [[N:%.*]]) {
48+
; CHECK-NEXT: [[TMP1:%.*]] = call ptr @my_malloc(ptr null, i32 [[N]])
49+
; CHECK-NEXT: store ptr [[TMP1]], ptr [[P]], align 8
50+
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.objectsize.i64.p0(ptr [[TMP1]], i1 false, i1 false, i1 false)
51+
; CHECK-NEXT: store i64 [[TMP2]], ptr [[R]], align 8
52+
; CHECK-NEXT: ret void
53+
;
3654
%1 = call ptr @my_malloc(ptr null, i32 %n)
3755
store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
3856

39-
; CHECK: @llvm.objectsize.i64.p0
4057
%2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
4158
store i64 %2, ptr %r, align 8
4259
ret void
4360
}
4461

45-
; CHECK-LABEL: define void @test_calloc_fails
4662
define void @test_calloc_fails(ptr %p, ptr %r, i32 %n) {
63+
; CHECK-LABEL: define void @test_calloc_fails(
64+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]], i32 [[N:%.*]]) {
65+
; CHECK-NEXT: [[TMP1:%.*]] = call ptr @my_calloc(ptr null, ptr null, i32 [[N]], i32 5)
66+
; CHECK-NEXT: store ptr [[TMP1]], ptr [[P]], align 8
67+
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.objectsize.i64.p0(ptr [[TMP1]], i1 false, i1 false, i1 false)
68+
; CHECK-NEXT: store i64 [[TMP2]], ptr [[R]], align 8
69+
; CHECK-NEXT: [[TMP3:%.*]] = call ptr @my_calloc(ptr null, ptr null, i32 100, i32 [[N]])
70+
; CHECK-NEXT: store ptr [[TMP3]], ptr [[P]], align 8
71+
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.objectsize.i64.p0(ptr [[TMP3]], i1 false, i1 false, i1 false)
72+
; CHECK-NEXT: store i64 [[TMP4]], ptr [[R]], align 8
73+
; CHECK-NEXT: ret void
74+
;
4775
%1 = call ptr @my_calloc(ptr null, ptr null, i32 %n, i32 5)
4876
store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
4977

50-
; CHECK: @llvm.objectsize.i64.p0
5178
%2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
5279
store i64 %2, ptr %r, align 8
5380

5481

5582
%3 = call ptr @my_calloc(ptr null, ptr null, i32 100, i32 %n)
5683
store ptr %3, ptr %p, align 8 ; To ensure objectsize isn't killed
5784

58-
; CHECK: @llvm.objectsize.i64.p0
5985
%4 = call i64 @llvm.objectsize.i64.p0(ptr %3, i1 false)
6086
store i64 %4, ptr %r, align 8
6187
ret void
@@ -65,21 +91,28 @@ declare ptr @my_malloc_outofline(ptr, i32) #0
6591
declare ptr @my_calloc_outofline(ptr, ptr, i32, i32) #1
6692

6793
; Verifying that out of line allocsize is parsed correctly
68-
; CHECK-LABEL: define void @test_outofline
6994
define void @test_outofline(ptr %p, ptr %r) {
95+
; CHECK-LABEL: define void @test_outofline(
96+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]]) {
97+
; CHECK-NEXT: [[TMP1:%.*]] = call dereferenceable_or_null(100) ptr @my_malloc_outofline(ptr null, i32 100)
98+
; CHECK-NEXT: store ptr [[TMP1]], ptr [[P]], align 8
99+
; CHECK-NEXT: store i64 100, ptr [[R]], align 8
100+
; CHECK-NEXT: [[TMP2:%.*]] = call dereferenceable_or_null(500) ptr @my_calloc_outofline(ptr null, ptr null, i32 100, i32 5)
101+
; CHECK-NEXT: store ptr [[TMP2]], ptr [[P]], align 8
102+
; CHECK-NEXT: store i64 500, ptr [[R]], align 8
103+
; CHECK-NEXT: ret void
104+
;
70105
%1 = call ptr @my_malloc_outofline(ptr null, i32 100)
71106
store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
72107

73108
%2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
74-
; CHECK: store i64 100
75109
store i64 %2, ptr %r, align 8
76110

77111

78112
%3 = call ptr @my_calloc_outofline(ptr null, ptr null, i32 100, i32 5)
79113
store ptr %3, ptr %p, align 8 ; To ensure objectsize isn't killed
80114

81115
%4 = call i64 @llvm.objectsize.i64.p0(ptr %3, i1 false)
82-
; CHECK: store i64 500
83116
store i64 %4, ptr %r, align 8
84117
ret void
85118
}
@@ -88,22 +121,37 @@ declare ptr @my_malloc_i64(ptr, i64) #0
88121
declare ptr @my_tiny_calloc(ptr, ptr, i8, i8) #1
89122
declare ptr @my_varied_calloc(ptr, ptr, i32, i8) #1
90123

91-
; CHECK-LABEL: define void @test_overflow
92124
define void @test_overflow(ptr %p, ptr %r) {
93-
94125
; (2**31 + 1) * 2 > 2**31. So overflow. Yay.
126+
; CHECK-LABEL: define void @test_overflow(
127+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]]) {
128+
; CHECK-NEXT: [[BIG_MALLOC:%.*]] = call dereferenceable_or_null(4294967298) ptr @my_calloc(ptr null, ptr null, i32 -2147483647, i32 2)
129+
; CHECK-NEXT: store ptr [[BIG_MALLOC]], ptr [[P]], align 8
130+
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.objectsize.i32.p0(ptr [[BIG_MALLOC]], i1 false, i1 false, i1 false)
131+
; CHECK-NEXT: store i32 [[TMP1]], ptr [[R]], align 4
132+
; CHECK-NEXT: [[BIG_LITTLE_MALLOC:%.*]] = call dereferenceable_or_null(508) ptr @my_tiny_calloc(ptr null, ptr null, i8 127, i8 4)
133+
; CHECK-NEXT: store ptr [[BIG_LITTLE_MALLOC]], ptr [[P]], align 8
134+
; CHECK-NEXT: store i32 508, ptr [[R]], align 4
135+
; CHECK-NEXT: [[BIG_MALLOC_I64:%.*]] = call dereferenceable_or_null(8589934592) ptr @my_malloc_i64(ptr null, i64 8589934592)
136+
; CHECK-NEXT: store ptr [[BIG_MALLOC_I64]], ptr [[P]], align 8
137+
; CHECK-NEXT: [[TMP2:%.*]] = call i32 @llvm.objectsize.i32.p0(ptr [[BIG_MALLOC_I64]], i1 false, i1 false, i1 false)
138+
; CHECK-NEXT: store i32 [[TMP2]], ptr [[R]], align 4
139+
; CHECK-NEXT: store i64 8589934592, ptr [[R]], align 8
140+
; CHECK-NEXT: [[VARIED_CALLOC:%.*]] = call dereferenceable_or_null(5000) ptr @my_varied_calloc(ptr null, ptr null, i32 1000, i8 5)
141+
; CHECK-NEXT: store ptr [[VARIED_CALLOC]], ptr [[P]], align 8
142+
; CHECK-NEXT: store i32 5000, ptr [[R]], align 4
143+
; CHECK-NEXT: ret void
144+
;
95145
%big_malloc = call ptr @my_calloc(ptr null, ptr null, i32 2147483649, i32 2)
96146
store ptr %big_malloc, ptr %p, align 8
97147

98-
; CHECK: @llvm.objectsize
99148
%1 = call i32 @llvm.objectsize.i32.p0(ptr %big_malloc, i1 false)
100149
store i32 %1, ptr %r, align 4
101150

102151

103152
%big_little_malloc = call ptr @my_tiny_calloc(ptr null, ptr null, i8 127, i8 4)
104153
store ptr %big_little_malloc, ptr %p, align 8
105154

106-
; CHECK: store i32 508
107155
%2 = call i32 @llvm.objectsize.i32.p0(ptr %big_little_malloc, i1 false)
108156
store i32 %2, ptr %r, align 4
109157

@@ -112,36 +160,38 @@ define void @test_overflow(ptr %p, ptr %r) {
112160
%big_malloc_i64 = call ptr @my_malloc_i64(ptr null, i64 8589934592)
113161
store ptr %big_malloc_i64, ptr %p, align 8
114162

115-
; CHECK: @llvm.objectsize
116163
%3 = call i32 @llvm.objectsize.i32.p0(ptr %big_malloc_i64, i1 false)
117164
store i32 %3, ptr %r, align 4
118165

119166

120167
%4 = call i64 @llvm.objectsize.i64.p0(ptr %big_malloc_i64, i1 false)
121-
; CHECK: store i64 8589934592
122168
store i64 %4, ptr %r, align 8
123169

124170

125171
; Just intended to ensure that we properly handle args of different types...
126172
%varied_calloc = call ptr @my_varied_calloc(ptr null, ptr null, i32 1000, i8 5)
127173
store ptr %varied_calloc, ptr %p, align 8
128174

129-
; CHECK: store i32 5000
130175
%5 = call i32 @llvm.objectsize.i32.p0(ptr %varied_calloc, i1 false)
131176
store i32 %5, ptr %r, align 4
132177

133178
ret void
134179
}
135180

136-
; CHECK-LABEL: define void @test_nobuiltin
137181
; We had a bug where `nobuiltin` would cause `allocsize` to be ignored in
138182
; @llvm.objectsize calculations.
139183
define void @test_nobuiltin(ptr %p, ptr %r) {
184+
; CHECK-LABEL: define void @test_nobuiltin(
185+
; CHECK-SAME: ptr [[P:%.*]], ptr [[R:%.*]]) {
186+
; CHECK-NEXT: [[TMP1:%.*]] = call dereferenceable_or_null(100) ptr @my_malloc(ptr null, i32 100) #[[ATTR3:[0-9]+]]
187+
; CHECK-NEXT: store ptr [[TMP1]], ptr [[P]], align 8
188+
; CHECK-NEXT: store i64 100, ptr [[R]], align 8
189+
; CHECK-NEXT: ret void
190+
;
140191
%1 = call ptr @my_malloc(ptr null, i32 100) nobuiltin
141192
store ptr %1, ptr %p, align 8
142193

143194
%2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
144-
; CHECK: store i64 100
145195
store i64 %2, ptr %r, align 8
146196
ret void
147197
}

0 commit comments

Comments
 (0)