-
Notifications
You must be signed in to change notification settings - Fork 15.5k
Description
| Bugzilla Link | 3921 |
| Resolution | FIXED |
| Resolved on | Apr 03, 2009 19:18 |
| Version | trunk |
| OS | All |
| CC | @lattner |
Extended Description
Here's a simple testcase that shows the problem:
extern int a;
int foo (void)
{
if (a == 4) { return 5; }
if (a == 5) { return 4; }
if (a == 4) { return 5 + a; }
if (a == 5) { return 4 + a; }
return a;
}
and the corresponding llvm code (from llvm-gcc -O2):
define i32 @foo() nounwind readonly ssp {
entry:
%0 = load i32* @a, align 4 ; [#uses=5]
%1 = icmp eq i32 %0, 4 ; [#uses=2]
br i1 %1, label %bb8, label %bb1
bb1: ; preds = %entry
%2 = icmp eq i32 %0, 5 ; [#uses=2]
br i1 %2, label %bb8, label %bb3
bb3: ; preds = %bb1
br i1 %1, label %bb4, label %bb5
bb4: ; preds = %bb3
%3 = add i32 %0, 5 ; [#uses=1]
ret i32 %3
bb5: ; preds = %bb3
br i1 %2, label %bb6, label %bb8
bb6: ; preds = %bb5
%4 = add i32 %0, 4 ; [#uses=1]
ret i32 %4
bb8: ; preds = %bb5, %bb1, %entry
%.0 = phi i32 [ 5, %entry ], [ 4, %bb1 ], [ %0, %bb5 ] ; [#uses=1]
ret i32 %.0
}