blob: 70c023a4058ea1d59dd479f825c57dbba9e91b53 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes="loop-simplify" -S %s | FileCheck %s
; Make sure Loop::makeLoopInvariant strips the "dereferenceable" attribute.
declare i32 @g()
define ptr @f(ptr %p, i1 %b) {
; CHECK-LABEL: define ptr @f(
; CHECK-SAME: ptr [[P:%.*]], i1 [[B:%.*]]) {
; CHECK-NEXT: [[MASKED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 -2)
; CHECK-NEXT: br label %[[LOOP:.*]]
; CHECK: [[LOOP]]:
; CHECK-NEXT: [[I:%.*]] = call i32 @g()
; CHECK-NEXT: br i1 [[B]], label %[[LOOP_CONT:.*]], label %[[EXIT:.*]]
; CHECK: [[LOOP_CONT]]:
; CHECK-NEXT: [[B2:%.*]] = icmp eq i32 [[I]], 0
; CHECK-NEXT: br i1 [[B2]], label %[[LOOP]], label %[[EXIT]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: [[PP:%.*]] = phi ptr [ [[MASKED]], %[[LOOP_CONT]] ], [ null, %[[LOOP]] ]
; CHECK-NEXT: ret ptr [[PP]]
;
br label %loop
loop:
%i = call i32 @g()
br i1 %b, label %loop.cont, label %exit
loop.cont:
%masked = call ptr @llvm.ptrmask.p0.i64(ptr dereferenceable(12) %p, i64 -2)
%b2 = icmp eq i32 %i, 0
br i1 %b2, label %loop, label %exit
exit:
%pp = phi ptr [%masked, %loop.cont], [null, %loop]
ret ptr %pp
}