[llvm] r313925 - Enable the reuse of values computed in a previous loop iteration.

Friedman, Eli via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 21 15:45:58 PDT 2017


Comments inline.

On 9/21/2017 2:48 PM, Pranav Bhandarkar via llvm-commits wrote:
> Author: pranavb
> Date: Thu Sep 21 14:48:23 2017
> New Revision: 313925
>
> URL: http://llvm.org/viewvc/llvm-project?rev=313925&view=rev
> Log:
> Enable the reuse of values computed in a previous loop iteration.
>
> This patch adds a pass that removes the computation of provably redundant
> expressions that have been computed earlier in a previous iteration. It
> relies on the use of PHIs to identify loop carried dependences.
>
> This is scalar replacement for vector types.

I'm not sure it makes sense for this to be its own pass... it's very 
similar to the scalar PRE done by GVN.

> +bool HexagonVectorLoopCarriedReuse::isEquivalentOperation(Instruction *I1,
> +                                                          Instruction *I2) {
> +  if (!I1->isSameOperationAs(I2))
> +    return false;
> +  // This check is in place specifically for intrinsics. isSameOperationAs will
> +  // return two for any two hexagon intrinsics because they are essentially the
> +  // same instruciton (CallInst). We need to scratch the surface to see if they
> +  // are calls to the same function.
> +  if (CallInst *C1 = dyn_cast<CallInst>(I1)) {
> +    if (CallInst *C2 = dyn_cast<CallInst>(I2)) {
> +      if (C1->getCalledFunction() != C2->getCalledFunction())

Given that you never create PHI nodes for constants, I think you need to 
check that every constant operand matches, not just the callee of calls.

-Eli

-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project



More information about the llvm-commits mailing list