@@ -38,20 +38,15 @@ define i1 @allones7(ptr %p) {
38
38
; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
39
39
; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_allones7_global_addr to i64)
40
40
; X86-NEXT: [[TMP3:%.*]] = zext i8 ptrtoint (ptr @__typeid_allones7_align to i8) to i64
41
- ; X86-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP2]], [[TMP3]]
42
- ; X86-NEXT: [[TMP5:%.*]] = zext i8 sub (i8 64, i8 ptrtoint (ptr @__typeid_allones7_align to i8)) to i64
43
- ; X86-NEXT: [[TMP6:%.*]] = shl i64 [[TMP2]], [[TMP5]]
44
- ; X86-NEXT: [[TMP7:%.*]] = or i64 [[TMP4]], [[TMP6]]
41
+ ; X86-NEXT: [[TMP7:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 [[TMP3]])
45
42
; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_allones7_size_m1 to i64)
46
43
; X86-NEXT: ret i1 [[TMP8]]
47
44
;
48
45
; ARM-LABEL: define i1 @allones7(
49
46
; ARM-SAME: ptr [[P:%.*]]) {
50
47
; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
51
48
; ARM-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_allones7_global_addr to i64)
52
- ; ARM-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 1
53
- ; ARM-NEXT: [[TMP4:%.*]] = shl i64 [[TMP2]], 63
54
- ; ARM-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP4]]
49
+ ; ARM-NEXT: [[TMP5:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 1)
55
50
; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 42
56
51
; ARM-NEXT: ret i1 [[TMP6]]
57
52
;
@@ -65,20 +60,15 @@ define i1 @allones32(ptr %p) {
65
60
; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
66
61
; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_allones32_global_addr to i64)
67
62
; X86-NEXT: [[TMP3:%.*]] = zext i8 ptrtoint (ptr @__typeid_allones32_align to i8) to i64
68
- ; X86-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP2]], [[TMP3]]
69
- ; X86-NEXT: [[TMP5:%.*]] = zext i8 sub (i8 64, i8 ptrtoint (ptr @__typeid_allones32_align to i8)) to i64
70
- ; X86-NEXT: [[TMP6:%.*]] = shl i64 [[TMP2]], [[TMP5]]
71
- ; X86-NEXT: [[TMP7:%.*]] = or i64 [[TMP4]], [[TMP6]]
63
+ ; X86-NEXT: [[TMP7:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 [[TMP3]])
72
64
; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_allones32_size_m1 to i64)
73
65
; X86-NEXT: ret i1 [[TMP8]]
74
66
;
75
67
; ARM-LABEL: define i1 @allones32(
76
68
; ARM-SAME: ptr [[P:%.*]]) {
77
69
; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
78
70
; ARM-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_allones32_global_addr to i64)
79
- ; ARM-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 2
80
- ; ARM-NEXT: [[TMP4:%.*]] = shl i64 [[TMP2]], 62
81
- ; ARM-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP4]]
71
+ ; ARM-NEXT: [[TMP5:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 2)
82
72
; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 12345
83
73
; ARM-NEXT: ret i1 [[TMP6]]
84
74
;
@@ -92,38 +82,33 @@ define i1 @bytearray7(ptr %p) {
92
82
; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
93
83
; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_bytearray7_global_addr to i64)
94
84
; X86-NEXT: [[TMP3:%.*]] = zext i8 ptrtoint (ptr @__typeid_bytearray7_align to i8) to i64
95
- ; X86-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP2]], [[TMP3]]
96
- ; X86-NEXT: [[TMP5:%.*]] = zext i8 sub (i8 64, i8 ptrtoint (ptr @__typeid_bytearray7_align to i8)) to i64
97
- ; X86-NEXT: [[TMP6:%.*]] = shl i64 [[TMP2]], [[TMP5]]
98
- ; X86-NEXT: [[TMP7:%.*]] = or i64 [[TMP4]], [[TMP6]]
85
+ ; X86-NEXT: [[TMP7:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 [[TMP3]])
99
86
; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_bytearray7_size_m1 to i64)
100
87
; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP14:%.*]]
101
- ; X86: 9 :
88
+ ; X86: 6 :
102
89
; X86-NEXT: [[TMP10:%.*]] = getelementptr i8, ptr @__typeid_bytearray7_byte_array, i64 [[TMP7]]
103
90
; X86-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
104
91
; X86-NEXT: [[TMP12:%.*]] = and i8 [[TMP11]], ptrtoint (ptr @__typeid_bytearray7_bit_mask to i8)
105
92
; X86-NEXT: [[TMP13:%.*]] = icmp ne i8 [[TMP12]], 0
106
93
; X86-NEXT: br label [[TMP14]]
107
- ; X86: 14 :
94
+ ; X86: 11 :
108
95
; X86-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP13]], [[TMP9]] ]
109
96
; X86-NEXT: ret i1 [[TMP15]]
110
97
;
111
98
; ARM-LABEL: define i1 @bytearray7(
112
99
; ARM-SAME: ptr [[P:%.*]]) {
113
100
; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
114
101
; ARM-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_bytearray7_global_addr to i64)
115
- ; ARM-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 3
116
- ; ARM-NEXT: [[TMP4:%.*]] = shl i64 [[TMP2]], 61
117
- ; ARM-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP4]]
102
+ ; ARM-NEXT: [[TMP5:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 3)
118
103
; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 43
119
104
; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP12:%.*]]
120
- ; ARM: 7 :
105
+ ; ARM: 5 :
121
106
; ARM-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr @__typeid_bytearray7_byte_array, i64 [[TMP5]]
122
107
; ARM-NEXT: [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1
123
108
; ARM-NEXT: [[TMP10:%.*]] = and i8 [[TMP9]], ptrtoint (ptr inttoptr (i64 64 to ptr) to i8)
124
109
; ARM-NEXT: [[TMP11:%.*]] = icmp ne i8 [[TMP10]], 0
125
110
; ARM-NEXT: br label [[TMP12]]
126
- ; ARM: 12 :
111
+ ; ARM: 10 :
127
112
; ARM-NEXT: [[TMP13:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP11]], [[TMP7]] ]
128
113
; ARM-NEXT: ret i1 [[TMP13]]
129
114
;
@@ -137,38 +122,33 @@ define i1 @bytearray32(ptr %p) {
137
122
; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
138
123
; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_bytearray32_global_addr to i64)
139
124
; X86-NEXT: [[TMP3:%.*]] = zext i8 ptrtoint (ptr @__typeid_bytearray32_align to i8) to i64
140
- ; X86-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP2]], [[TMP3]]
141
- ; X86-NEXT: [[TMP5:%.*]] = zext i8 sub (i8 64, i8 ptrtoint (ptr @__typeid_bytearray32_align to i8)) to i64
142
- ; X86-NEXT: [[TMP6:%.*]] = shl i64 [[TMP2]], [[TMP5]]
143
- ; X86-NEXT: [[TMP7:%.*]] = or i64 [[TMP4]], [[TMP6]]
125
+ ; X86-NEXT: [[TMP7:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 [[TMP3]])
144
126
; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_bytearray32_size_m1 to i64)
145
127
; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP14:%.*]]
146
- ; X86: 9 :
128
+ ; X86: 6 :
147
129
; X86-NEXT: [[TMP10:%.*]] = getelementptr i8, ptr @__typeid_bytearray32_byte_array, i64 [[TMP7]]
148
130
; X86-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
149
131
; X86-NEXT: [[TMP12:%.*]] = and i8 [[TMP11]], ptrtoint (ptr @__typeid_bytearray32_bit_mask to i8)
150
132
; X86-NEXT: [[TMP13:%.*]] = icmp ne i8 [[TMP12]], 0
151
133
; X86-NEXT: br label [[TMP14]]
152
- ; X86: 14 :
134
+ ; X86: 11 :
153
135
; X86-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP13]], [[TMP9]] ]
154
136
; X86-NEXT: ret i1 [[TMP15]]
155
137
;
156
138
; ARM-LABEL: define i1 @bytearray32(
157
139
; ARM-SAME: ptr [[P:%.*]]) {
158
140
; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
159
141
; ARM-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_bytearray32_global_addr to i64)
160
- ; ARM-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 4
161
- ; ARM-NEXT: [[TMP4:%.*]] = shl i64 [[TMP2]], 60
162
- ; ARM-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP4]]
142
+ ; ARM-NEXT: [[TMP5:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 4)
163
143
; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 12346
164
144
; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP12:%.*]]
165
- ; ARM: 7 :
145
+ ; ARM: 5 :
166
146
; ARM-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr @__typeid_bytearray32_byte_array, i64 [[TMP5]]
167
147
; ARM-NEXT: [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1
168
148
; ARM-NEXT: [[TMP10:%.*]] = and i8 [[TMP9]], ptrtoint (ptr inttoptr (i64 128 to ptr) to i8)
169
149
; ARM-NEXT: [[TMP11:%.*]] = icmp ne i8 [[TMP10]], 0
170
150
; ARM-NEXT: br label [[TMP12]]
171
- ; ARM: 12 :
151
+ ; ARM: 10 :
172
152
; ARM-NEXT: [[TMP13:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP11]], [[TMP7]] ]
173
153
; ARM-NEXT: ret i1 [[TMP13]]
174
154
;
@@ -182,40 +162,35 @@ define i1 @inline5(ptr %p) {
182
162
; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
183
163
; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_inline5_global_addr to i64)
184
164
; X86-NEXT: [[TMP3:%.*]] = zext i8 ptrtoint (ptr @__typeid_inline5_align to i8) to i64
185
- ; X86-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP2]], [[TMP3]]
186
- ; X86-NEXT: [[TMP5:%.*]] = zext i8 sub (i8 64, i8 ptrtoint (ptr @__typeid_inline5_align to i8)) to i64
187
- ; X86-NEXT: [[TMP6:%.*]] = shl i64 [[TMP2]], [[TMP5]]
188
- ; X86-NEXT: [[TMP7:%.*]] = or i64 [[TMP4]], [[TMP6]]
165
+ ; X86-NEXT: [[TMP7:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 [[TMP3]])
189
166
; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_inline5_size_m1 to i64)
190
167
; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP15:%.*]]
191
- ; X86: 9 :
168
+ ; X86: 6 :
192
169
; X86-NEXT: [[TMP10:%.*]] = trunc i64 [[TMP7]] to i32
193
170
; X86-NEXT: [[TMP11:%.*]] = and i32 [[TMP10]], 31
194
171
; X86-NEXT: [[TMP12:%.*]] = shl i32 1, [[TMP11]]
195
172
; X86-NEXT: [[TMP13:%.*]] = and i32 ptrtoint (ptr @__typeid_inline5_inline_bits to i32), [[TMP12]]
196
173
; X86-NEXT: [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 0
197
174
; X86-NEXT: br label [[TMP15]]
198
- ; X86: 15 :
175
+ ; X86: 12 :
199
176
; X86-NEXT: [[TMP16:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP14]], [[TMP9]] ]
200
177
; X86-NEXT: ret i1 [[TMP16]]
201
178
;
202
179
; ARM-LABEL: define i1 @inline5(
203
180
; ARM-SAME: ptr [[P:%.*]]) {
204
181
; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
205
182
; ARM-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_inline5_global_addr to i64)
206
- ; ARM-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 5
207
- ; ARM-NEXT: [[TMP4:%.*]] = shl i64 [[TMP2]], 59
208
- ; ARM-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP4]]
183
+ ; ARM-NEXT: [[TMP5:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 5)
209
184
; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 31
210
185
; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP13:%.*]]
211
- ; ARM: 7 :
186
+ ; ARM: 5 :
212
187
; ARM-NEXT: [[TMP8:%.*]] = trunc i64 [[TMP5]] to i32
213
188
; ARM-NEXT: [[TMP9:%.*]] = and i32 [[TMP8]], 31
214
189
; ARM-NEXT: [[TMP10:%.*]] = shl i32 1, [[TMP9]]
215
190
; ARM-NEXT: [[TMP11:%.*]] = and i32 123, [[TMP10]]
216
191
; ARM-NEXT: [[TMP12:%.*]] = icmp ne i32 [[TMP11]], 0
217
192
; ARM-NEXT: br label [[TMP13]]
218
- ; ARM: 13 :
193
+ ; ARM: 11 :
219
194
; ARM-NEXT: [[TMP14:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP12]], [[TMP7]] ]
220
195
; ARM-NEXT: ret i1 [[TMP14]]
221
196
;
@@ -229,38 +204,33 @@ define i1 @inline6(ptr %p) {
229
204
; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
230
205
; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_inline6_global_addr to i64)
231
206
; X86-NEXT: [[TMP3:%.*]] = zext i8 ptrtoint (ptr @__typeid_inline6_align to i8) to i64
232
- ; X86-NEXT: [[TMP4:%.*]] = lshr i64 [[TMP2]], [[TMP3]]
233
- ; X86-NEXT: [[TMP5:%.*]] = zext i8 sub (i8 64, i8 ptrtoint (ptr @__typeid_inline6_align to i8)) to i64
234
- ; X86-NEXT: [[TMP6:%.*]] = shl i64 [[TMP2]], [[TMP5]]
235
- ; X86-NEXT: [[TMP7:%.*]] = or i64 [[TMP4]], [[TMP6]]
207
+ ; X86-NEXT: [[TMP7:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 [[TMP3]])
236
208
; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_inline6_size_m1 to i64)
237
209
; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP14:%.*]]
238
- ; X86: 9 :
210
+ ; X86: 6 :
239
211
; X86-NEXT: [[TMP10:%.*]] = and i64 [[TMP7]], 63
240
212
; X86-NEXT: [[TMP11:%.*]] = shl i64 1, [[TMP10]]
241
213
; X86-NEXT: [[TMP12:%.*]] = and i64 ptrtoint (ptr @__typeid_inline6_inline_bits to i64), [[TMP11]]
242
214
; X86-NEXT: [[TMP13:%.*]] = icmp ne i64 [[TMP12]], 0
243
215
; X86-NEXT: br label [[TMP14]]
244
- ; X86: 14 :
216
+ ; X86: 11 :
245
217
; X86-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP13]], [[TMP9]] ]
246
218
; X86-NEXT: ret i1 [[TMP15]]
247
219
;
248
220
; ARM-LABEL: define i1 @inline6(
249
221
; ARM-SAME: ptr [[P:%.*]]) {
250
222
; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
251
223
; ARM-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_inline6_global_addr to i64)
252
- ; ARM-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 6
253
- ; ARM-NEXT: [[TMP4:%.*]] = shl i64 [[TMP2]], 58
254
- ; ARM-NEXT: [[TMP5:%.*]] = or i64 [[TMP3]], [[TMP4]]
224
+ ; ARM-NEXT: [[TMP5:%.*]] = call i64 @llvm.fshr.i64(i64 [[TMP2]], i64 [[TMP2]], i64 6)
255
225
; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 63
256
226
; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP12:%.*]]
257
- ; ARM: 7 :
227
+ ; ARM: 5 :
258
228
; ARM-NEXT: [[TMP8:%.*]] = and i64 [[TMP5]], 63
259
229
; ARM-NEXT: [[TMP9:%.*]] = shl i64 1, [[TMP8]]
260
230
; ARM-NEXT: [[TMP10:%.*]] = and i64 1000000000000, [[TMP9]]
261
231
; ARM-NEXT: [[TMP11:%.*]] = icmp ne i64 [[TMP10]], 0
262
232
; ARM-NEXT: br label [[TMP12]]
263
- ; ARM: 12 :
233
+ ; ARM: 10 :
264
234
; ARM-NEXT: [[TMP13:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP11]], [[TMP7]] ]
265
235
; ARM-NEXT: ret i1 [[TMP13]]
266
236
;
0 commit comments