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.