Skip to content

Commit f68aa92

Browse files
committed
address comments
1 parent d7eae33 commit f68aa92

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

llvm/test/Transforms/InstCombine/freeze.ll

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ invoke.unwind:
460460
define i32 @freeze_callbr_use_after_phi(i1 %c) {
461461
; CHECK-LABEL: @freeze_callbr_use_after_phi(
462462
; CHECK-NEXT: entry:
463-
; CHECK-NEXT: [[X:%.*]] = callbr i32 asm sideeffect "", "=r"() #[[ATTR1:[0-9]+]]
463+
; CHECK-NEXT: [[X:%.*]] = callbr i32 asm sideeffect "", "=r"() #[[ATTR2:[0-9]+]]
464464
; CHECK-NEXT: to label [[CALLBR_CONT:%.*]] []
465465
; CHECK: callbr.cont:
466466
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[X]], [[ENTRY:%.*]] ], [ 0, [[CALLBR_CONT]] ]
@@ -986,6 +986,40 @@ exit: ; preds = %loop
986986
ret void
987987
}
988988

989+
; 'assume' says GEP ptr can't produce poison, check freeze is pushed to offset.
990+
define void @fold_phi_gep_phi_offset_assume(ptr %init, ptr %end, i64 %n) {
991+
; CHECK-LABEL: @fold_phi_gep_phi_offset_assume(
992+
; CHECK-NEXT: entry:
993+
; CHECK-NEXT: [[N:%.*]] = freeze i64 [[N1:%.*]]
994+
; CHECK-NEXT: br label [[LOOP:%.*]]
995+
; CHECK: loop:
996+
; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[INIT:%.*]], [[ENTRY:%.*]] ], [ [[I_NEXT_FR:%.*]], [[LOOP]] ]
997+
; CHECK-NEXT: [[OFF:%.*]] = phi i64 [ [[N]], [[ENTRY]] ], [ [[OFF_NEXT:%.*]], [[LOOP]] ]
998+
; CHECK-NEXT: [[OFF_NEXT]] = shl i64 [[OFF]], 3
999+
; CHECK-NEXT: call void @llvm.assume(i1 true) [ "noundef"(ptr [[I]]) ]
1000+
; CHECK-NEXT: [[I_NEXT_FR]] = getelementptr i8, ptr [[I]], i64 [[OFF_NEXT]]
1001+
; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[I_NEXT_FR]], [[END:%.*]]
1002+
; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
1003+
; CHECK: exit:
1004+
; CHECK-NEXT: ret void
1005+
;
1006+
entry:
1007+
br label %loop
1008+
1009+
loop: ; preds = %loop, %entry
1010+
%i = phi ptr [ %init, %entry ], [ %i.next.fr, %loop ]
1011+
%off = phi i64 [ %n, %entry ], [ %off.next, %loop ]
1012+
%off.next = shl i64 %off, 3
1013+
call void @llvm.assume(i1 true) [ "noundef"(ptr %i) ]
1014+
%i.next = getelementptr inbounds i8, ptr %i, i64 %off.next
1015+
%i.next.fr = freeze ptr %i.next
1016+
%cond = icmp eq ptr %i.next.fr, %end
1017+
br i1 %cond, label %loop, label %exit
1018+
1019+
exit: ; preds = %loop
1020+
ret void
1021+
}
1022+
9891023
define void @fold_phi_multiple_insts(i32 %init, i32 %n) {
9901024
; CHECK-LABEL: @fold_phi_multiple_insts(
9911025
; CHECK-NEXT: entry:
@@ -1346,7 +1380,8 @@ define ptr @freeze_ptrmask_nonnull(ptr %p, i64 noundef %m) {
13461380
!2 = !{i32 0, i32 100}
13471381
;.
13481382
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
1349-
; CHECK: attributes #[[ATTR1]] = { nounwind }
1383+
; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
1384+
; CHECK: attributes #[[ATTR2]] = { nounwind }
13501385
;.
13511386
; CHECK: [[META0]] = !{}
13521387
; CHECK: [[META1]] = !{i64 4}

0 commit comments

Comments
 (0)