Changeset View
Changeset View
Standalone View
Standalone View
test/Analysis/BasicAA/phi-aa.ll
Show First 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | bye: | ||||
%.reload = load i32, i32* %jj7, align 4 | %.reload = load i32, i32* %jj7, align 4 | ||||
ret i32 %.reload | ret i32 %.reload | ||||
} | } | ||||
declare i1 @cond(i32*) | declare i1 @cond(i32*) | ||||
declare void @inc(i32*) | declare void @inc(i32*) | ||||
; When we have a chain of phis in nested loops we should recognise if there's | |||||
; actually only one underlying value. | |||||
; CHECK-LABEL: loop_phi_chain | |||||
; CHECK: NoAlias: i32* %val1, i32* @Y | |||||
; CHECK: NoAlias: i32* %val2, i32* @Y | |||||
; CHECK: NoAlias: i32* %val3, i32* @Y | |||||
define void @loop_phi_chain(i32 %a, i32 %b, i32 %c) { | |||||
entry: | |||||
br label %loop1 | |||||
loop1: | |||||
%n1 = phi i32 [ 0, %entry ], [ %add1, %loop2 ] | |||||
%val1 = phi i32* [ @X, %entry ], [ %val2, %loop2 ] | |||||
%add1 = add i32 %n1, 1 | |||||
%cmp1 = icmp ne i32 %n1, 32 | |||||
br i1 %cmp1, label %loop2, label %end | |||||
loop2: | |||||
%n2 = phi i32 [ 0, %loop1 ], [ %add2, %loop3 ] | |||||
%val2 = phi i32* [ %val1, %loop1 ], [ %val3, %loop3 ] | |||||
%add2 = add i32 %n2, 1 | |||||
%cmp2 = icmp ne i32 %n2, 32 | |||||
br i1 %cmp2, label %loop3, label %loop1 | |||||
loop3: | |||||
%n3 = phi i32 [ 0, %loop2 ], [ %add3, %loop3 ] | |||||
%val3 = phi i32* [ %val2, %loop2 ], [ %val3, %loop3 ] | |||||
store i32 0, i32* %val3, align 4 | |||||
store i32 0, i32* @Y, align 4 | |||||
%add3 = add i32 %n3, 1 | |||||
%cmp3 = icmp ne i32 %n3, 32 | |||||
br i1 %cmp3, label %loop3, label %loop2 | |||||
end: | |||||
ret void | |||||
} |