forked from OSchip/llvm-project
parent
5c469442e8
commit
ac5abbfdd9
|
@ -26,7 +26,7 @@ define i8 @optimizable1() {
|
|||
entry:
|
||||
%ptr = alloca i8
|
||||
store i8 42, i8* %ptr, !invariant.group !0
|
||||
%ptr2 = call i8* @llvm.invariant.group.barrier(i8* %ptr)
|
||||
%ptr2 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr)
|
||||
%a = load i8, i8* %ptr, !invariant.group !0
|
||||
|
||||
call void @foo(i8* %ptr2); call to use %ptr2
|
||||
|
@ -238,15 +238,16 @@ entry:
|
|||
ret i8 %a
|
||||
}
|
||||
|
||||
; CHECK-LABEL: define i8 @unoptimizable4() {
|
||||
define i8 @unoptimizable4() {
|
||||
; CHECK-LABEL: define i8 @optimizable4() {
|
||||
define i8 @optimizable4() {
|
||||
entry:
|
||||
%ptr = alloca i8
|
||||
store i8 42, i8* %ptr, !invariant.group !0
|
||||
%ptr2 = call i8* @llvm.invariant.group.barrier(i8* %ptr)
|
||||
%ptr2 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr)
|
||||
; CHECK-NOT: load
|
||||
%a = load i8, i8* %ptr2, !invariant.group !0
|
||||
|
||||
; CHECK: ret i8 %a
|
||||
; CHECK: ret i8 42
|
||||
ret i8 %a
|
||||
}
|
||||
|
||||
|
@ -314,9 +315,10 @@ entry:
|
|||
; CHECK: store i8 %unknownValue, i8* %ptr, !invariant.group !0
|
||||
store i8 %unknownValue, i8* %ptr, !invariant.group !0
|
||||
|
||||
%newPtr2 = call i8* @llvm.invariant.group.barrier(i8* %ptr)
|
||||
%d = load i8, i8* %newPtr2, !invariant.group !0 ; Can't step through invariant.group.barrier to get value of %ptr
|
||||
; CHECK: ret i8 %d
|
||||
%newPtr2 = call i8* @llvm.invariant.group.barrier.p0i8(i8* %ptr)
|
||||
; CHECK-NOT: load
|
||||
%d = load i8, i8* %newPtr2, !invariant.group !0
|
||||
; CHECK: ret i8 %unknownValue
|
||||
ret i8 %d
|
||||
}
|
||||
|
||||
|
@ -383,12 +385,12 @@ define void @testNotGlobal() {
|
|||
|
||||
%b0 = bitcast i8* %a to i1*
|
||||
call void @fooBit(i1* %b0, i1 1)
|
||||
; CHECK: %trunc = trunc i8 %b to i1
|
||||
; CHECK: %1 = trunc i8 %b to i1
|
||||
%2 = load i1, i1* %b0, !invariant.group !0
|
||||
; CHECK-NEXT: call void @fooBit(i1* %b0, i1 %trunc)
|
||||
; CHECK-NEXT: call void @fooBit(i1* %b0, i1 %1)
|
||||
call void @fooBit(i1* %b0, i1 %2)
|
||||
%3 = load i1, i1* %b0, !invariant.group !0
|
||||
; CHECK-NEXT: call void @fooBit(i1* %b0, i1 %trunc)
|
||||
; CHECK-NEXT: call void @fooBit(i1* %b0, i1 %1)
|
||||
call void @fooBit(i1* %b0, i1 %3)
|
||||
ret void
|
||||
}
|
||||
|
@ -416,10 +418,9 @@ define void @handling_loops() {
|
|||
%8 = phi i8 [ %10, %._crit_edge ], [ 1, %._crit_edge.preheader ]
|
||||
%.pre = load void (%struct.A*)**, void (%struct.A*)*** %5, align 8, !invariant.group !0
|
||||
%9 = load void (%struct.A*)*, void (%struct.A*)** %.pre, align 8
|
||||
; CHECK: call void @_ZN1A3fooEv(%struct.A* nonnull %a)
|
||||
; CHECK: call void @_ZN1A3fooEv(%struct.A* nonnull %a)
|
||||
call void %9(%struct.A* nonnull %a) #3
|
||||
|
||||
; CHECK-NOT: call void %
|
||||
; CHECK-NOT: call void %
|
||||
%10 = add nuw nsw i8 %8, 1
|
||||
%11 = load i8, i8* @unknownPtr, align 4
|
||||
%12 = icmp slt i8 %10, %11
|
||||
|
@ -441,7 +442,7 @@ declare void @_ZN1A3fooEv(%struct.A*)
|
|||
declare void @_ZN1AC1Ev(%struct.A*)
|
||||
declare void @fooBit(i1*, i1)
|
||||
|
||||
declare i8* @llvm.invariant.group.barrier(i8*)
|
||||
declare i8* @llvm.invariant.group.barrier.p0i8(i8*)
|
||||
|
||||
; Function Attrs: nounwind
|
||||
declare void @llvm.assume(i1 %cmp.vtables) #0
|
||||
|
|
Loading…
Reference in New Issue