Skip to content

dominator optimizer/gvn fails to recognize identical tests #4293

@echristo

Description

@echristo
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
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions