llvm-6502/test/Transforms/GVN/unreachable_block_infinite_loop.ll
David Majnemer 75ce6bba4e [PHITransAddr] Don't translate unreachable values
Unreachable values may use themselves in strange ways due to their
dominance property.  Attempting to translate through them can lead to
infinite recursion, crashing LLVM.  Instead, claim that we weren't able
to translate the value.

This fixes PR23096.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238702 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-01 00:15:08 +00:00

44 lines
946 B
LLVM

; RUN: opt -memdep -gvn -disable-output < %s
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-darwin10.0"
define i32 @test2() nounwind ssp {
entry:
ret i32 0
unreachable_block:
%a = add i32 %a, 1
ret i32 %a
}
define i32 @pr23096_test0() {
entry:
br label %bb0
bb1:
%ptr1 = ptrtoint i32* %ptr2 to i64
%ptr2 = inttoptr i64 %ptr1 to i32*
br i1 undef, label %bb0, label %bb1
bb0:
%phi = phi i32* [ undef, %entry ], [ %ptr2, %bb1 ]
%load = load i32, i32* %phi
ret i32 %load
}
define i32 @pr23096_test1() {
entry:
br label %bb0
bb1:
%ptr1 = getelementptr i32, i32* %ptr2, i32 0
%ptr2 = getelementptr i32, i32* %ptr1, i32 0
br i1 undef, label %bb0, label %bb1
bb0:
%phi = phi i32* [ undef, %entry ], [ %ptr2, %bb1 ]
%load = load i32, i32* %phi
ret i32 %load
}