5
5
6
6
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
7
7
8
- declare i64 @wcslen (i32* )
8
+ declare i64 @wcslen (ptr )
9
9
10
10
!0 = !{i32 1 , !"wchar_size" , i32 4 }
11
11
!llvm.module.flags = !{!0 }
@@ -22,34 +22,31 @@ define i64 @test_simplify1() {
22
22
; CHECK-LABEL: @test_simplify1(
23
23
; CHECK-NEXT: ret i64 5
24
24
;
25
- %hello_p = getelementptr [6 x i32 ], [6 x i32 ]* @hello , i64 0 , i64 0
26
- %hello_l = call i64 @wcslen (i32* %hello_p )
25
+ %hello_l = call i64 @wcslen (ptr @hello )
27
26
ret i64 %hello_l
28
27
}
29
28
30
29
define i64 @test_simplify2 () {
31
30
; CHECK-LABEL: @test_simplify2(
32
31
; CHECK-NEXT: ret i64 0
33
32
;
34
- %null_p = getelementptr [1 x i32 ], [1 x i32 ]* @null , i64 0 , i64 0
35
- %null_l = call i64 @wcslen (i32* %null_p )
33
+ %null_l = call i64 @wcslen (ptr @null )
36
34
ret i64 %null_l
37
35
}
38
36
39
37
define i64 @test_simplify3 () {
40
38
; CHECK-LABEL: @test_simplify3(
41
39
; CHECK-NEXT: ret i64 0
42
40
;
43
- %null_hello_p = getelementptr [7 x i32 ], [7 x i32 ]* @null_hello , i64 0 , i64 0
44
- %null_hello_l = call i64 @wcslen (i32* %null_hello_p )
41
+ %null_hello_l = call i64 @wcslen (ptr @null_hello )
45
42
ret i64 %null_hello_l
46
43
}
47
44
48
45
define i64 @test_simplify4 () {
49
46
; CHECK-LABEL: @test_simplify4(
50
47
; CHECK-NEXT: ret i64 0
51
48
;
52
- %len = tail call i64 @wcslen (i32* @nullstring ) nounwind
49
+ %len = tail call i64 @wcslen (ptr @nullstring ) nounwind
53
50
ret i64 %len
54
51
}
55
52
@@ -59,19 +56,18 @@ define i1 @test_simplify5() {
59
56
; CHECK-LABEL: @test_simplify5(
60
57
; CHECK-NEXT: ret i1 false
61
58
;
62
- %hello_p = getelementptr [6 x i32 ], [6 x i32 ]* @hello , i64 0 , i64 0
63
- %hello_l = call i64 @wcslen (i32* %hello_p )
59
+ %hello_l = call i64 @wcslen (ptr @hello )
64
60
%eq_hello = icmp eq i64 %hello_l , 0
65
61
ret i1 %eq_hello
66
62
}
67
63
68
- define i1 @test_simplify6 (i32* %str_p ) {
64
+ define i1 @test_simplify6 (ptr %str_p ) {
69
65
; CHECK-LABEL: @test_simplify6(
70
- ; CHECK-NEXT: [[CHAR0:%.*]] = load i32, i32* [[STR_P:%.*]], align 4
66
+ ; CHECK-NEXT: [[CHAR0:%.*]] = load i32, ptr [[STR_P:%.*]], align 4
71
67
; CHECK-NEXT: [[EQ_NULL:%.*]] = icmp eq i32 [[CHAR0]], 0
72
68
; CHECK-NEXT: ret i1 [[EQ_NULL]]
73
69
;
74
- %str_l = call i64 @wcslen (i32* %str_p )
70
+ %str_l = call i64 @wcslen (ptr %str_p )
75
71
%eq_null = icmp eq i64 %str_l , 0
76
72
ret i1 %eq_null
77
73
}
@@ -82,19 +78,18 @@ define i1 @test_simplify7() {
82
78
; CHECK-LABEL: @test_simplify7(
83
79
; CHECK-NEXT: ret i1 true
84
80
;
85
- %hello_p = getelementptr [6 x i32 ], [6 x i32 ]* @hello , i64 0 , i64 0
86
- %hello_l = call i64 @wcslen (i32* %hello_p )
81
+ %hello_l = call i64 @wcslen (ptr @hello )
87
82
%ne_hello = icmp ne i64 %hello_l , 0
88
83
ret i1 %ne_hello
89
84
}
90
85
91
- define i1 @test_simplify8 (i32* %str_p ) {
86
+ define i1 @test_simplify8 (ptr %str_p ) {
92
87
; CHECK-LABEL: @test_simplify8(
93
- ; CHECK-NEXT: [[CHAR0:%.*]] = load i32, i32* [[STR_P:%.*]], align 4
88
+ ; CHECK-NEXT: [[CHAR0:%.*]] = load i32, ptr [[STR_P:%.*]], align 4
94
89
; CHECK-NEXT: [[NE_NULL:%.*]] = icmp ne i32 [[CHAR0]], 0
95
90
; CHECK-NEXT: ret i1 [[NE_NULL]]
96
91
;
97
- %str_l = call i64 @wcslen (i32* %str_p )
92
+ %str_l = call i64 @wcslen (ptr %str_p )
98
93
%ne_null = icmp ne i64 %str_l , 0
99
94
ret i1 %ne_null
100
95
}
@@ -104,10 +99,8 @@ define i64 @test_simplify9(i1 %x) {
104
99
; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[X:%.*]], i64 5, i64 6
105
100
; CHECK-NEXT: ret i64 [[TMP1]]
106
101
;
107
- %hello = getelementptr [6 x i32 ], [6 x i32 ]* @hello , i64 0 , i64 0
108
- %longer = getelementptr [7 x i32 ], [7 x i32 ]* @longer , i64 0 , i64 0
109
- %s = select i1 %x , i32* %hello , i32* %longer
110
- %l = call i64 @wcslen (i32* %s )
102
+ %s = select i1 %x , ptr @hello , ptr @longer
103
+ %l = call i64 @wcslen (ptr %s )
111
104
ret i64 %l
112
105
}
113
106
@@ -120,8 +113,8 @@ define i64 @test_simplify10(i32 %x) {
120
113
; CHECK-NEXT: [[TMP2:%.*]] = sub nsw i64 5, [[TMP1]]
121
114
; CHECK-NEXT: ret i64 [[TMP2]]
122
115
;
123
- %hello_p = getelementptr inbounds [6 x i32 ], [ 6 x i32 ]* @hello , i32 0 , i32 %x
124
- %hello_l = call i64 @wcslen (i32* %hello_p )
116
+ %hello_p = getelementptr inbounds [6 x i32 ], ptr @hello , i32 0 , i32 %x
117
+ %hello_l = call i64 @wcslen (ptr %hello_p )
125
118
ret i64 %hello_l
126
119
}
127
120
@@ -135,20 +128,19 @@ define i64 @test_simplify11(i32 %x) {
135
128
; CHECK-NEXT: ret i64 [[TMP1]]
136
129
;
137
130
%and = and i32 %x , 7
138
- %hello_p = getelementptr inbounds [13 x i32 ], [ 13 x i32 ]* @null_hello_mid , i32 0 , i32 %and
139
- %hello_l = call i64 @wcslen (i32* %hello_p )
131
+ %hello_p = getelementptr inbounds [13 x i32 ], ptr @null_hello_mid , i32 0 , i32 %and
132
+ %hello_l = call i64 @wcslen (ptr %hello_p )
140
133
ret i64 %hello_l
141
134
}
142
135
143
136
; Check cases that shouldn't be simplified.
144
137
145
138
define i64 @test_no_simplify1 () {
146
139
; CHECK-LABEL: @test_no_simplify1(
147
- ; CHECK-NEXT: [[A_L:%.*]] = call i64 @wcslen(i32* nonnull getelementptr inbounds ([32 x i32], [32 x i32]* @a, i64 0, i64 0) )
140
+ ; CHECK-NEXT: [[A_L:%.*]] = call i64 @wcslen(ptr nonnull @a )
148
141
; CHECK-NEXT: ret i64 [[A_L]]
149
142
;
150
- %a_p = getelementptr [32 x i32 ], [32 x i32 ]* @a , i64 0 , i64 0
151
- %a_l = call i64 @wcslen (i32* %a_p )
143
+ %a_l = call i64 @wcslen (ptr @a )
152
144
ret i64 %a_l
153
145
}
154
146
@@ -157,24 +149,24 @@ define i64 @test_no_simplify1() {
157
149
define i64 @test_no_simplify2 (i32 %x ) {
158
150
; CHECK-LABEL: @test_no_simplify2(
159
151
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[X:%.*]] to i64
160
- ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], [7 x i32]* @null_hello, i64 0, i64 [[TMP1]]
161
- ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* nonnull [[HELLO_P]])
152
+ ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], ptr @null_hello, i64 0, i64 [[TMP1]]
153
+ ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull [[HELLO_P]])
162
154
; CHECK-NEXT: ret i64 [[HELLO_L]]
163
155
;
164
- %hello_p = getelementptr inbounds [7 x i32 ], [ 7 x i32 ]* @null_hello , i32 0 , i32 %x
165
- %hello_l = call i64 @wcslen (i32* %hello_p )
156
+ %hello_p = getelementptr inbounds [7 x i32 ], ptr @null_hello , i32 0 , i32 %x
157
+ %hello_l = call i64 @wcslen (ptr %hello_p )
166
158
ret i64 %hello_l
167
159
}
168
160
169
161
define i64 @test_no_simplify2_no_null_opt (i32 %x ) #0 {
170
162
; CHECK-LABEL: @test_no_simplify2_no_null_opt(
171
163
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[X:%.*]] to i64
172
- ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], [7 x i32]* @null_hello, i64 0, i64 [[TMP1]]
173
- ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* [[HELLO_P]])
164
+ ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [7 x i32], ptr @null_hello, i64 0, i64 [[TMP1]]
165
+ ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr [[HELLO_P]])
174
166
; CHECK-NEXT: ret i64 [[HELLO_L]]
175
167
;
176
- %hello_p = getelementptr inbounds [7 x i32 ], [ 7 x i32 ]* @null_hello , i32 0 , i32 %x
177
- %hello_l = call i64 @wcslen (i32* %hello_p )
168
+ %hello_p = getelementptr inbounds [7 x i32 ], ptr @null_hello , i32 0 , i32 %x
169
+ %hello_l = call i64 @wcslen (ptr %hello_p )
178
170
ret i64 %hello_l
179
171
}
180
172
@@ -184,27 +176,27 @@ define i64 @test_no_simplify3(i32 %x) {
184
176
; CHECK-LABEL: @test_no_simplify3(
185
177
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 15
186
178
; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[AND]] to i64
187
- ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i64 0, i64 [[TMP1]]
188
- ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* nonnull [[HELLO_P]])
179
+ ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i64 0, i64 [[TMP1]]
180
+ ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr nonnull [[HELLO_P]])
189
181
; CHECK-NEXT: ret i64 [[HELLO_L]]
190
182
;
191
183
%and = and i32 %x , 15
192
- %hello_p = getelementptr inbounds [13 x i32 ], [ 13 x i32 ]* @null_hello_mid , i32 0 , i32 %and
193
- %hello_l = call i64 @wcslen (i32* %hello_p )
184
+ %hello_p = getelementptr inbounds [13 x i32 ], ptr @null_hello_mid , i32 0 , i32 %and
185
+ %hello_l = call i64 @wcslen (ptr %hello_p )
194
186
ret i64 %hello_l
195
187
}
196
188
197
189
define i64 @test_no_simplify3_no_null_opt (i32 %x ) #0 {
198
190
; CHECK-LABEL: @test_no_simplify3_no_null_opt(
199
191
; CHECK-NEXT: [[AND:%.*]] = and i32 [[X:%.*]], 15
200
192
; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[AND]] to i64
201
- ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], [13 x i32]* @null_hello_mid, i64 0, i64 [[TMP1]]
202
- ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(i32* [[HELLO_P]])
193
+ ; CHECK-NEXT: [[HELLO_P:%.*]] = getelementptr inbounds [13 x i32], ptr @null_hello_mid, i64 0, i64 [[TMP1]]
194
+ ; CHECK-NEXT: [[HELLO_L:%.*]] = call i64 @wcslen(ptr [[HELLO_P]])
203
195
; CHECK-NEXT: ret i64 [[HELLO_L]]
204
196
;
205
197
%and = and i32 %x , 15
206
- %hello_p = getelementptr inbounds [13 x i32 ], [ 13 x i32 ]* @null_hello_mid , i32 0 , i32 %and
207
- %hello_l = call i64 @wcslen (i32* %hello_p )
198
+ %hello_p = getelementptr inbounds [13 x i32 ], ptr @null_hello_mid , i32 0 , i32 %and
199
+ %hello_l = call i64 @wcslen (ptr %hello_p )
208
200
ret i64 %hello_l
209
201
}
210
202
@@ -218,7 +210,7 @@ define i64 @test_simplify12() {
218
210
; CHECK-LABEL: @test_simplify12(
219
211
; CHECK-NEXT: ret i64 0
220
212
;
221
- %l = call i64 @wcslen (i32* bitcast ([ 1 x i16 ]* @str16 to i32* ) )
213
+ %l = call i64 @wcslen (ptr @str16 )
222
214
ret i64 %l
223
215
}
224
216
0 commit comments