mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-02 00:42:52 +01:00
96deed5d4d
was incorrectly simplifying "x == (gep x, 1, i)" into false, even though i could be negative. As it turns out, all the code to handle this already existed, we just need to disable the incorrect optimization case and let the general case handle it. llvm-svn: 46739
34 lines
1.6 KiB
LLVM
34 lines
1.6 KiB
LLVM
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {icmp eq i32 %indvar, 0}
|
|
; PR1978
|
|
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
|
|
target triple = "i686-apple-darwin8"
|
|
%struct.x = type <{ i8 }>
|
|
@.str = internal constant [6 x i8] c"Main!\00" ; <[6 x i8]*> [#uses=1]
|
|
@.str1 = internal constant [12 x i8] c"destroy %p\0A\00" ; <[12 x i8]*> [#uses=1]
|
|
|
|
define i32 @main() nounwind {
|
|
entry:
|
|
%orientations = alloca [1 x [1 x %struct.x]] ; <[1 x [1 x %struct.x]]*> [#uses=2]
|
|
%tmp3 = call i32 @puts( i8* getelementptr ([6 x i8]* @.str, i32 0, i32 0) ) nounwind ; <i32> [#uses=0]
|
|
%tmp45 = getelementptr [1 x [1 x %struct.x]]* %orientations, i32 1, i32 0, i32 0 ; <%struct.x*> [#uses=1]
|
|
%orientations62 = getelementptr [1 x [1 x %struct.x]]* %orientations, i32 0, i32 0, i32 0 ; <%struct.x*> [#uses=1]
|
|
br label %bb10
|
|
|
|
bb10: ; preds = %bb10, %entry
|
|
%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb10 ] ; <i32> [#uses=2]
|
|
%tmp.0.reg2mem.0.rec = mul i32 %indvar, -1 ; <i32> [#uses=1]
|
|
%tmp12.rec = add i32 %tmp.0.reg2mem.0.rec, -1 ; <i32> [#uses=1]
|
|
%tmp12 = getelementptr %struct.x* %tmp45, i32 %tmp12.rec ; <%struct.x*> [#uses=2]
|
|
%tmp16 = call i32 (i8*, ...)* @printf( i8* getelementptr ([12 x i8]* @.str1, i32 0, i32 0), %struct.x* %tmp12 ) nounwind ; <i32> [#uses=0]
|
|
%tmp84 = icmp eq %struct.x* %tmp12, %orientations62 ; <i1> [#uses=1]
|
|
%indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1]
|
|
br i1 %tmp84, label %bb17, label %bb10
|
|
|
|
bb17: ; preds = %bb10
|
|
ret i32 0
|
|
}
|
|
|
|
declare i32 @puts(i8*)
|
|
|
|
declare i32 @printf(i8*, ...)
|