mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 03:30:22 +00:00
75ce6bba4e
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
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
|
|
}
|