mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
5ab6b18ee1
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. llvm-svn: 238702
44 lines
946 B
LLVM
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
|
|
}
|