[PATCH] Enable SLP-vectorization of intrinsics.

Nadav Rotem nrotem at apple.com
Fri Jan 10 14:55:56 PST 2014


  Hi Raul,

  Thanks for working on this! The code looks okay, but I have a few small comments below.  I was wondering if you ran some performance tests on it.  Does it catch anything in the LLVM test suite?

  Thanks,
  Nadav


  > +
  > +        unsigned i,e;
  > +        for ( i = 1, e = VL.size(); i != e; ++i) {

  I don’t think that it helps to recycle the I and E variables. You can easily place them in the for loop.

  > +          IntrinsicInst *II2 = dyn_cast<IntrinsicInst>(VL[i]);

  What does II2 stand for ?  Intrinsic ?

  > +          if (!II2 || II2->getIntrinsicID() != ID) {
  > +            newTreeEntry(VL, false);
  > +            DEBUG(dbgs() << "SLP: mismatched calls:"
  > +                  << *II << "!=" << *VL[i] << "\n");
  > +            return;

  Extra space below:

  > +          for (unsigned j = 0; j < VL.size(); ++j) {
  > +            IntrinsicInst *II2 = dyn_cast<IntrinsicInst>(VL[j]);
  > +
  > +            Operands.push_back(II2->getArgOperand(i));
  > +          }

  I don’t mind the added scope, but this style is not very common in LLVM.

  > +
  > +      int ScalarCallCost, VectorCallCost;
  > +      {
  > +        // Calculate the cost of the scalar calls.
  > +        SmallVector<Type*, 4> Tys;
  > +        for (unsigned op = 0, opc = II->getNumArgOperands(); op!= opc; ++op)
  > +          Tys.push_back(CI->getArgOperand(op)->getType());
  > +        ScalarCallCost = TTI->getIntrinsicInstrCost(ID, ScalarTy, Tys) *
  > +            VecTy->getNumElements();
  > +      }
  > +
  > +      {
  > +        // Calculate the cost of the vectorized call.
  > +        SmallVector<Type*, 4> Tys;
  > +        for (unsigned op = 0, opc = II->getNumArgOperands(); op!= opc; ++op)
  > +          Tys.push_back(VectorType::get(CI->getArgOperand(op)->getType(),
  > +                                        VecTy->getNumElements()));
  > +        VectorCallCost = TTI->getIntrinsicInstrCost(ID, VecTy, Tys);
  > +      }
  > +
  >

http://llvm-reviews.chandlerc.com/D2535



More information about the llvm-commits mailing list