This is an archive of the discontinued LLVM Phabricator instance.

[JumpThreading] ComputeValueKnownInPredecessors only handles the case when phi is on lhs of a comparison op
ClosedPublic

Authored by wmi on Apr 30 2018, 10:40 AM.

Details

Summary

For the following testcase,
L1:

%t0 = add i32 %m, 7
%t3 = icmp eq i32* %t2, null
br i1 %t3, label %L3, label %L2

L2:

%t4 = load i32, i32* %t2, align 4
br label %L3

L3:

%t5 = phi i32 [ %t0, %L1 ], [ %t4, %L2 ]
%t6 = icmp eq i32 %t0, %t5
br i1 %t6, label %L4, label %L5

We know if we go through the path L1 --> L3, %t6 should always be true. However, currently, if the rhs of the eq comparison is phi, JumpThreading fails to evaluate %t6 to true. And we know that Instcombine cannot guarantee always canonicalizing phi to the left hand side of the comparison operation according to the operand priority comparison mechanism in instcombine.

The patch handles the case when rhs of the comparison op is a phi.

Diff Detail

Repository
rL LLVM

Event Timeline

wmi created this revision.Apr 30 2018, 10:40 AM
This revision is now accepted and ready to land.Apr 30 2018, 11:10 AM
wmi updated this revision to Diff 144648.Apr 30 2018, 4:21 PM

update the patch to fix a bug found in llvm bootstrap.

danielcdh accepted this revision.Apr 30 2018, 6:33 PM
This revision was automatically updated to reflect the committed changes.