1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-01 08:23:21 +01:00
llvm-mirror/test/Transforms/CodeGenPrepare/basic.ll
Chris Lattner 14a3e26146 first step to fixing PR8642: don't fold away empty basic blocks
which have trapping constant exprs in them due to PHI nodes.
Eliminating them can cause the constant expr to be evalutated
on new paths if the input edges are critical.

llvm-svn: 122164
2010-12-19 03:02:34 +00:00

32 lines
1.1 KiB
LLVM

; RUN: opt -codegenprepare %s -S | FileCheck %s
; PR8642
%0 = type <{ %1, %1 }>
%1 = type { i8, i8, i8, i8 }
@g_2 = global %0 <{ %1 { i8 1, i8 0, i8 0, i8 undef }, %1 { i8 2, i8 0, i8 0, i8 undef } }>, align 4
@g_4 = global %1 { i8 3, i8 0, i8 0, i8 undef }, align 4
; CGP shouldn't fold away the empty cond.false.i block, because the constant
; expr that will get dropped into it could trap.
define i16 @test1(i8** %argv, i1 %c) nounwind ssp {
entry:
br i1 %c, label %cond.end.i, label %cond.false.i
cond.false.i: ; preds = %entry
br label %foo.exit
cond.end.i: ; preds = %entry
store i8* null, i8** %argv
br label %foo.exit
foo.exit: ; preds = %cond.end.i, %cond.false.i
%call1 = phi i16 [ trunc (i32 srem (i32 1, i32 zext (i1 icmp eq (%1* bitcast (i8* getelementptr inbounds (%0* @g_2, i64 0, i32 1, i32 0) to %1*), %1* @g_4) to i32)) to i16), %cond.false.i ], [ 1, %cond.end.i ]
ret i16 %call1
; CHECK: @test1
; CHECK: cond.false.i:
; CHECK-NEXT: br label %foo.exit
}