@@ -286,3 +286,29 @@ define <2 x ptr> @test7(<2 x ptr> %p1, i64 %idx, <2 x i1> %cc) {
286286 %select = select <2 x i1 > %cc , <2 x ptr > %p1 , <2 x ptr > %gep
287287 ret <2 x ptr > %select
288288}
289+
290+ define ptr @ptr_eq_replace_freeze1 (ptr %p , ptr %q ) {
291+ ; CHECK-LABEL: @ptr_eq_replace_freeze1(
292+ ; CHECK-NEXT: [[Q_FR:%.*]] = freeze ptr [[Q:%.*]]
293+ ; CHECK-NEXT: ret ptr [[Q_FR]]
294+ ;
295+ %p.fr = freeze ptr %p
296+ %q.fr = freeze ptr %q
297+ %cmp = icmp eq ptr %p.fr , %q.fr
298+ %select = select i1 %cmp , ptr %p.fr , ptr %q.fr
299+ ret ptr %select
300+ }
301+
302+ define ptr @ptr_eq_replace_freeze2 (ptr %p , ptr %q ) {
303+ ; CHECK-LABEL: @ptr_eq_replace_freeze2(
304+ ; CHECK-NEXT: [[P_FR:%.*]] = freeze ptr [[P:%.*]]
305+ ; CHECK-NEXT: [[SELECT:%.*]] = getelementptr i8, ptr [[P_FR]], i64 16
306+ ; CHECK-NEXT: ret ptr [[SELECT]]
307+ ;
308+ %gep1 = getelementptr i32 , ptr %p , i64 4
309+ %gep2 = getelementptr i32 , ptr %q , i64 4
310+ %cmp = icmp eq ptr %p , %q
311+ %cmp.fr = freeze i1 %cmp
312+ %select = select i1 %cmp.fr , ptr %gep1 , ptr %gep2
313+ ret ptr %select
314+ }
0 commit comments