Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Analysis/ScalarEvolution/shift-recurrences.ll
Show First 20 Lines • Show All 383 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
; Corner case where phi is not in a loop because it is in unreachable | ; Corner case where phi is not in a loop because it is in unreachable | ||||
; code (which loopinfo ignores, but simple recurrence matching does not). | ; code (which loopinfo ignores, but simple recurrence matching does not). | ||||
define void @unreachable_phi() { | define void @unreachable_phi() { | ||||
; CHECK-LABEL: 'unreachable_phi' | ; CHECK-LABEL: 'unreachable_phi' | ||||
; CHECK-NEXT: Classifying expressions for: @unreachable_phi | ; CHECK-NEXT: Classifying expressions for: @unreachable_phi | ||||
; CHECK-NEXT: %p_58.addr.1 = phi i32 [ undef, %unreachable1 ], [ %sub2629, %unreachable2 ] | ; CHECK-NEXT: %p_58.addr.1 = phi i32 [ undef, %unreachable1 ], [ %sub2629, %unreachable2 ] | ||||
; CHECK-NEXT: --> undef U: full-set S: full-set | ; CHECK-NEXT: --> poison U: full-set S: full-set | ||||
; CHECK-NEXT: %sub2629 = sub i32 %p_58.addr.1, 1 | ; CHECK-NEXT: %sub2629 = sub i32 %p_58.addr.1, 1 | ||||
; CHECK-NEXT: --> undef U: full-set S: full-set | ; CHECK-NEXT: --> poison U: full-set S: full-set | ||||
; CHECK-NEXT: Determining loop execution counts for: @unreachable_phi | ; CHECK-NEXT: Determining loop execution counts for: @unreachable_phi | ||||
; | ; | ||||
entry: | entry: | ||||
ret void | ret void | ||||
unreachable1: | unreachable1: | ||||
br label %unreachable_nonloop | br label %unreachable_nonloop | ||||
unreachable2: | unreachable2: | ||||
br label %unreachable_nonloop | br label %unreachable_nonloop | ||||
unreachable_nonloop: | unreachable_nonloop: | ||||
%p_58.addr.1 = phi i32 [ undef, %unreachable1 ], [ %sub2629, %unreachable2 ] | %p_58.addr.1 = phi i32 [ undef, %unreachable1 ], [ %sub2629, %unreachable2 ] | ||||
%sub2629 = sub i32 %p_58.addr.1, 1 | %sub2629 = sub i32 %p_58.addr.1, 1 | ||||
unreachable | unreachable | ||||
} | } | ||||
; Corner case where phi is not in loop header because binop is in unreachable | ; Corner case where phi is not in loop header because binop is in unreachable | ||||
; code (which loopinfo ignores, but simple recurrence matching does not). | ; code (which loopinfo ignores, but simple recurrence matching does not). | ||||
define void @unreachable_binop() { | define void @unreachable_binop() { | ||||
; CHECK-LABEL: 'unreachable_binop' | ; CHECK-LABEL: 'unreachable_binop' | ||||
; CHECK-NEXT: Classifying expressions for: @unreachable_binop | ; CHECK-NEXT: Classifying expressions for: @unreachable_binop | ||||
; CHECK-NEXT: %p_58.addr.1 = phi i32 [ undef, %header ], [ %sub2629, %unreachable ] | ; CHECK-NEXT: %p_58.addr.1 = phi i32 [ undef, %header ], [ %sub2629, %unreachable ] | ||||
; CHECK-NEXT: --> %p_58.addr.1 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %header: Variant } | ; CHECK-NEXT: --> %p_58.addr.1 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %header: Variant } | ||||
; CHECK-NEXT: %sub2629 = sub i32 %p_58.addr.1, 1 | ; CHECK-NEXT: %sub2629 = sub i32 %p_58.addr.1, 1 | ||||
; CHECK-NEXT: --> undef U: full-set S: full-set | ; CHECK-NEXT: --> poison U: full-set S: full-set | ||||
; CHECK-NEXT: Determining loop execution counts for: @unreachable_binop | ; CHECK-NEXT: Determining loop execution counts for: @unreachable_binop | ||||
; CHECK-NEXT: Loop %header: Unpredictable backedge-taken count. | ; CHECK-NEXT: Loop %header: Unpredictable backedge-taken count. | ||||
; CHECK-NEXT: Loop %header: Unpredictable max backedge-taken count. | ; CHECK-NEXT: Loop %header: Unpredictable max backedge-taken count. | ||||
; CHECK-NEXT: Loop %header: Unpredictable predicated backedge-taken count. | ; CHECK-NEXT: Loop %header: Unpredictable predicated backedge-taken count. | ||||
; | ; | ||||
entry: | entry: | ||||
br label %header | br label %header | ||||
▲ Show 20 Lines • Show All 420 Lines • Show Last 20 Lines |