Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/FunctionAttrs/nocapture.ll
Show First 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | l: | ||||
%tmp = bitcast i32* %x to i32* ; <i32*> [#uses=2] | %tmp = bitcast i32* %x to i32* ; <i32*> [#uses=2] | ||||
%tmp2 = select i1 %b, i32* %tmp, i32* %y | %tmp2 = select i1 %b, i32* %tmp, i32* %y | ||||
%val = load i32, i32* %tmp2 ; <i32> [#uses=1] | %val = load i32, i32* %tmp2 ; <i32> [#uses=1] | ||||
store i32 0, i32* %tmp | store i32 0, i32* %tmp | ||||
store i32* %y, i32** @g | store i32* %y, i32** @g | ||||
ret i32 %val | ret i32 %val | ||||
} | } | ||||
; FNATTR: define i32 @nc1a(i32* %q, i32* nocapture %p, i1 %b) | |||||
define i32 @nc1a(i32* %q, i32* %p, i1 %b) { | |||||
e: | |||||
%pa = call i32* @llvm.noalias.p0i32.p0i8.p0p0i32.i32(i32* %p, i8* null, i32** null, i32 0, metadata !1) | |||||
br label %l | |||||
l: | |||||
%x = phi i32* [ %pa, %e ] | |||||
%y = phi i32* [ %q, %e ] | |||||
%tmp = bitcast i32* %x to i32* ; <i32*> [#uses=2] | |||||
%tmp2 = select i1 %b, i32* %tmp, i32* %y | |||||
%val = load i32, i32* %tmp2 ; <i32> [#uses=1] | |||||
store i32 0, i32* %tmp | |||||
store i32* %y, i32** @g | |||||
ret i32 %val | |||||
} | |||||
; FNATTR: define i32 @nc1b(i32* %q, i32* nocapture %p, i1 %b) | |||||
define i32 @nc1b(i32* %q, i32* %p, i1 %b) { | |||||
e: | |||||
%prov.p = call i32* @llvm.provenance.noalias.p0i32.p0i8.p0p0i32.p0p0i32.i32(i32* %p, i8* null, i32** null, i32** null, i32 0, metadata !1) | |||||
br label %l | |||||
l: | |||||
%x = phi i32* [ %p, %e ] | |||||
%prov.x = phi i32* [ %prov.p, %e ] | |||||
%y = phi i32* [ %q, %e ] | |||||
%tmp = bitcast i32* %x to i32* ; <i32*> [#uses=2] | |||||
%tmp2 = select i1 %b, i32* %tmp, i32* %y | |||||
%prov.tmp2 = select i1 %b, i32* %prov.x, i32* %y | |||||
%val = load i32, i32* %tmp2 ; <i32> [#uses=1] | |||||
store i32 0, i32* %tmp, ptr_provenance i32* %prov.tmp2 | |||||
store i32* %y, i32** @g | |||||
ret i32 %val | |||||
} | |||||
; FNATTR: define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* nocapture %p, i1 %b) | ; FNATTR: define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* nocapture %p, i1 %b) | ||||
define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* %p, i1 %b) { | define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* %p, i1 %b) { | ||||
e: | e: | ||||
br label %l | br label %l | ||||
l: | l: | ||||
%x = phi i32 addrspace(1)* [ %p, %e ] | %x = phi i32 addrspace(1)* [ %p, %e ] | ||||
%y = phi i32* [ %q, %e ] | %y = phi i32* [ %q, %e ] | ||||
%tmp = addrspacecast i32 addrspace(1)* %x to i32* ; <i32*> [#uses=2] | %tmp = addrspacecast i32 addrspace(1)* %x to i32* ; <i32*> [#uses=2] | ||||
▲ Show 20 Lines • Show All 197 Lines • ▼ Show 20 Lines | |||||
define i1 @captureDereferenceableOrNullICmp(i32* dereferenceable_or_null(4) %x) null_pointer_is_valid { | define i1 @captureDereferenceableOrNullICmp(i32* dereferenceable_or_null(4) %x) null_pointer_is_valid { | ||||
%1 = bitcast i32* %x to i8* | %1 = bitcast i32* %x to i8* | ||||
%2 = icmp eq i8* %1, null | %2 = icmp eq i8* %1, null | ||||
ret i1 %2 | ret i1 %2 | ||||
} | } | ||||
declare i8* @llvm.launder.invariant.group.p0i8(i8*) | declare i8* @llvm.launder.invariant.group.p0i8(i8*) | ||||
declare i8* @llvm.strip.invariant.group.p0i8(i8*) | declare i8* @llvm.strip.invariant.group.p0i8(i8*) | ||||
declare i32* @llvm.noalias.p0i32.p0i8.p0p0i32.i32(i32*, i8*, i32**, i32, metadata ) nounwind | |||||
declare i32* @llvm.provenance.noalias.p0i32.p0i8.p0p0i32.p0p0i32.i32(i32*, i8*, i32**, i32**, i32, metadata ) nounwind | |||||
!0 = !{!0, !"some domain"} | |||||
!1 = !{!1, !0, !"some scope"} |