@@ -38,20 +38,15 @@ define i1 @allones7(ptr %p) {
3838; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
3939; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_allones7_global_addr to i64)
4040; 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]])
4542; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_allones7_size_m1 to i64)
4643; X86-NEXT: ret i1 [[TMP8]]
4744;
4845; ARM-LABEL: define i1 @allones7(
4946; ARM-SAME: ptr [[P:%.*]]) {
5047; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
5148; 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)
5550; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 42
5651; ARM-NEXT: ret i1 [[TMP6]]
5752;
@@ -65,20 +60,15 @@ define i1 @allones32(ptr %p) {
6560; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
6661; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_allones32_global_addr to i64)
6762; 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]])
7264; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_allones32_size_m1 to i64)
7365; X86-NEXT: ret i1 [[TMP8]]
7466;
7567; ARM-LABEL: define i1 @allones32(
7668; ARM-SAME: ptr [[P:%.*]]) {
7769; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
7870; 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)
8272; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 12345
8373; ARM-NEXT: ret i1 [[TMP6]]
8474;
@@ -92,38 +82,33 @@ define i1 @bytearray7(ptr %p) {
9282; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
9383; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_bytearray7_global_addr to i64)
9484; 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]])
9986; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_bytearray7_size_m1 to i64)
10087; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP14:%.*]]
101- ; X86: 9 :
88+ ; X86: 6 :
10289; X86-NEXT: [[TMP10:%.*]] = getelementptr i8, ptr @__typeid_bytearray7_byte_array, i64 [[TMP7]]
10390; X86-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
10491; X86-NEXT: [[TMP12:%.*]] = and i8 [[TMP11]], ptrtoint (ptr @__typeid_bytearray7_bit_mask to i8)
10592; X86-NEXT: [[TMP13:%.*]] = icmp ne i8 [[TMP12]], 0
10693; X86-NEXT: br label [[TMP14]]
107- ; X86: 14 :
94+ ; X86: 11 :
10895; X86-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP13]], [[TMP9]] ]
10996; X86-NEXT: ret i1 [[TMP15]]
11097;
11198; ARM-LABEL: define i1 @bytearray7(
11299; ARM-SAME: ptr [[P:%.*]]) {
113100; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
114101; 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)
118103; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 43
119104; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP12:%.*]]
120- ; ARM: 7 :
105+ ; ARM: 5 :
121106; ARM-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr @__typeid_bytearray7_byte_array, i64 [[TMP5]]
122107; ARM-NEXT: [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1
123108; ARM-NEXT: [[TMP10:%.*]] = and i8 [[TMP9]], ptrtoint (ptr inttoptr (i64 64 to ptr) to i8)
124109; ARM-NEXT: [[TMP11:%.*]] = icmp ne i8 [[TMP10]], 0
125110; ARM-NEXT: br label [[TMP12]]
126- ; ARM: 12 :
111+ ; ARM: 10 :
127112; ARM-NEXT: [[TMP13:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP11]], [[TMP7]] ]
128113; ARM-NEXT: ret i1 [[TMP13]]
129114;
@@ -137,38 +122,33 @@ define i1 @bytearray32(ptr %p) {
137122; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
138123; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_bytearray32_global_addr to i64)
139124; 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]])
144126; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_bytearray32_size_m1 to i64)
145127; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP14:%.*]]
146- ; X86: 9 :
128+ ; X86: 6 :
147129; X86-NEXT: [[TMP10:%.*]] = getelementptr i8, ptr @__typeid_bytearray32_byte_array, i64 [[TMP7]]
148130; X86-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1
149131; X86-NEXT: [[TMP12:%.*]] = and i8 [[TMP11]], ptrtoint (ptr @__typeid_bytearray32_bit_mask to i8)
150132; X86-NEXT: [[TMP13:%.*]] = icmp ne i8 [[TMP12]], 0
151133; X86-NEXT: br label [[TMP14]]
152- ; X86: 14 :
134+ ; X86: 11 :
153135; X86-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP13]], [[TMP9]] ]
154136; X86-NEXT: ret i1 [[TMP15]]
155137;
156138; ARM-LABEL: define i1 @bytearray32(
157139; ARM-SAME: ptr [[P:%.*]]) {
158140; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
159141; 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)
163143; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 12346
164144; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP12:%.*]]
165- ; ARM: 7 :
145+ ; ARM: 5 :
166146; ARM-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr @__typeid_bytearray32_byte_array, i64 [[TMP5]]
167147; ARM-NEXT: [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1
168148; ARM-NEXT: [[TMP10:%.*]] = and i8 [[TMP9]], ptrtoint (ptr inttoptr (i64 128 to ptr) to i8)
169149; ARM-NEXT: [[TMP11:%.*]] = icmp ne i8 [[TMP10]], 0
170150; ARM-NEXT: br label [[TMP12]]
171- ; ARM: 12 :
151+ ; ARM: 10 :
172152; ARM-NEXT: [[TMP13:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP11]], [[TMP7]] ]
173153; ARM-NEXT: ret i1 [[TMP13]]
174154;
@@ -182,40 +162,35 @@ define i1 @inline5(ptr %p) {
182162; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
183163; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_inline5_global_addr to i64)
184164; 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]])
189166; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_inline5_size_m1 to i64)
190167; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP15:%.*]]
191- ; X86: 9 :
168+ ; X86: 6 :
192169; X86-NEXT: [[TMP10:%.*]] = trunc i64 [[TMP7]] to i32
193170; X86-NEXT: [[TMP11:%.*]] = and i32 [[TMP10]], 31
194171; X86-NEXT: [[TMP12:%.*]] = shl i32 1, [[TMP11]]
195172; X86-NEXT: [[TMP13:%.*]] = and i32 ptrtoint (ptr @__typeid_inline5_inline_bits to i32), [[TMP12]]
196173; X86-NEXT: [[TMP14:%.*]] = icmp ne i32 [[TMP13]], 0
197174; X86-NEXT: br label [[TMP15]]
198- ; X86: 15 :
175+ ; X86: 12 :
199176; X86-NEXT: [[TMP16:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP14]], [[TMP9]] ]
200177; X86-NEXT: ret i1 [[TMP16]]
201178;
202179; ARM-LABEL: define i1 @inline5(
203180; ARM-SAME: ptr [[P:%.*]]) {
204181; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
205182; 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)
209184; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 31
210185; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP13:%.*]]
211- ; ARM: 7 :
186+ ; ARM: 5 :
212187; ARM-NEXT: [[TMP8:%.*]] = trunc i64 [[TMP5]] to i32
213188; ARM-NEXT: [[TMP9:%.*]] = and i32 [[TMP8]], 31
214189; ARM-NEXT: [[TMP10:%.*]] = shl i32 1, [[TMP9]]
215190; ARM-NEXT: [[TMP11:%.*]] = and i32 123, [[TMP10]]
216191; ARM-NEXT: [[TMP12:%.*]] = icmp ne i32 [[TMP11]], 0
217192; ARM-NEXT: br label [[TMP13]]
218- ; ARM: 13 :
193+ ; ARM: 11 :
219194; ARM-NEXT: [[TMP14:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP12]], [[TMP7]] ]
220195; ARM-NEXT: ret i1 [[TMP14]]
221196;
@@ -229,38 +204,33 @@ define i1 @inline6(ptr %p) {
229204; X86-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
230205; X86-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], ptrtoint (ptr @__typeid_inline6_global_addr to i64)
231206; 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]])
236208; X86-NEXT: [[TMP8:%.*]] = icmp ule i64 [[TMP7]], ptrtoint (ptr @__typeid_inline6_size_m1 to i64)
237209; X86-NEXT: br i1 [[TMP8]], label [[TMP9:%.*]], label [[TMP14:%.*]]
238- ; X86: 9 :
210+ ; X86: 6 :
239211; X86-NEXT: [[TMP10:%.*]] = and i64 [[TMP7]], 63
240212; X86-NEXT: [[TMP11:%.*]] = shl i64 1, [[TMP10]]
241213; X86-NEXT: [[TMP12:%.*]] = and i64 ptrtoint (ptr @__typeid_inline6_inline_bits to i64), [[TMP11]]
242214; X86-NEXT: [[TMP13:%.*]] = icmp ne i64 [[TMP12]], 0
243215; X86-NEXT: br label [[TMP14]]
244- ; X86: 14 :
216+ ; X86: 11 :
245217; X86-NEXT: [[TMP15:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP13]], [[TMP9]] ]
246218; X86-NEXT: ret i1 [[TMP15]]
247219;
248220; ARM-LABEL: define i1 @inline6(
249221; ARM-SAME: ptr [[P:%.*]]) {
250222; ARM-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P]] to i64
251223; 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)
255225; ARM-NEXT: [[TMP6:%.*]] = icmp ule i64 [[TMP5]], 63
256226; ARM-NEXT: br i1 [[TMP6]], label [[TMP7:%.*]], label [[TMP12:%.*]]
257- ; ARM: 7 :
227+ ; ARM: 5 :
258228; ARM-NEXT: [[TMP8:%.*]] = and i64 [[TMP5]], 63
259229; ARM-NEXT: [[TMP9:%.*]] = shl i64 1, [[TMP8]]
260230; ARM-NEXT: [[TMP10:%.*]] = and i64 1000000000000, [[TMP9]]
261231; ARM-NEXT: [[TMP11:%.*]] = icmp ne i64 [[TMP10]], 0
262232; ARM-NEXT: br label [[TMP12]]
263- ; ARM: 12 :
233+ ; ARM: 10 :
264234; ARM-NEXT: [[TMP13:%.*]] = phi i1 [ false, [[TMP0:%.*]] ], [ [[TMP11]], [[TMP7]] ]
265235; ARM-NEXT: ret i1 [[TMP13]]
266236;
0 commit comments