; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 ; RUN: opt -passes='loop(loop-rotate),instcombine' -enable-knowledge-retention -S < %s | FileCheck %s %0 = type { ptr } define ptr @f1(ptr %i0) { ; CHECK-LABEL: define ptr @f1( ; CHECK-SAME: ptr [[I0:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: [[I21:%.*]] = icmp eq ptr [[I0]], null ; CHECK-NEXT: br i1 [[I21]], label %[[EXIT:.*]], label %[[LOOP_LATCH_LR_PH:.*]] ; CHECK: [[LOOP_LATCH_LR_PH]]: ; CHECK-NEXT: br label %[[LOOP_LATCH:.*]] ; CHECK: [[LOOP_LATCH]]: ; CHECK-NEXT: [[I3:%.*]] = phi ptr [ [[I0]], %[[LOOP_LATCH_LR_PH]] ], [ [[I5:%.*]], %[[LOOP_LATCH]] ] ; CHECK-NEXT: [[I5]] = load ptr, ptr [[I3]], align 8 ; CHECK-NEXT: [[I2:%.*]] = icmp eq ptr [[I5]], null ; CHECK-NEXT: br i1 [[I2]], label %[[LOOP_EXIT_CRIT_EDGE:.*]], label %[[LOOP_LATCH]] ; CHECK: [[LOOP_EXIT_CRIT_EDGE]]: ; CHECK-NEXT: br label %[[EXIT]] ; CHECK: [[EXIT]]: ; CHECK-NEXT: ret ptr undef ; entry: br label %loop loop: %i = phi ptr [ %i0, %entry ], [ %i5, %loop.latch ] %i2 = icmp eq ptr %i, null br i1 %i2, label %exit, label %loop.latch loop.latch: call void @llvm.assume(i1 true) [ "nonnull"(ptr %i) ] %i5 = load ptr, ptr %i, align 8 br label %loop exit: ret ptr undef } declare void @llvm.assume(i1)