From db2bf1e6f956889bdb3c1aa7b8978524720a9200 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 17 Jun 2016 13:15:10 +0000 Subject: [PATCH] [PPC] Strength-reduce SmallVectors into arrays. No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272999 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/BranchProbabilityInfo.cpp | 4 +- lib/Target/PowerPC/PPCISelLowering.cpp | 96 ++++++++++---------------- 2 files changed, 39 insertions(+), 61 deletions(-) diff --git a/lib/Analysis/BranchProbabilityInfo.cpp b/lib/Analysis/BranchProbabilityInfo.cpp index 33036b72615..8c12a100428 100644 --- a/lib/Analysis/BranchProbabilityInfo.cpp +++ b/lib/Analysis/BranchProbabilityInfo.cpp @@ -366,7 +366,9 @@ bool BranchProbabilityInfo::calcLoopBranchHeuristics(const BasicBlock *BB, // Collect the sum of probabilities of back-edges/in-edges/exiting-edges, and // normalize them so that they sum up to one. - SmallVector Probs(3, BranchProbability::getZero()); + BranchProbability Probs[] = {BranchProbability::getZero(), + BranchProbability::getZero(), + BranchProbability::getZero()}; unsigned Denom = (BackEdges.empty() ? 0 : LBH_TAKEN_WEIGHT) + (InEdges.empty() ? 0 : LBH_TAKEN_WEIGHT) + (ExitingEdges.empty() ? 0 : LBH_NONTAKEN_WEIGHT); diff --git a/lib/Target/PowerPC/PPCISelLowering.cpp b/lib/Target/PowerPC/PPCISelLowering.cpp index 1fbb616cf72..31197fd8304 100644 --- a/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/lib/Target/PowerPC/PPCISelLowering.cpp @@ -7050,12 +7050,12 @@ SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op, Constant *NegOne = ConstantFP::get(Type::getFloatTy(*DAG.getContext()), -1.0); - SmallVector CV(4, NegOne); + Constant *CV[4]; for (unsigned i = 0; i < 4; ++i) { if (BVN->getOperand(i).isUndef()) CV[i] = UndefValue::get(Type::getFloatTy(*DAG.getContext())); else if (isNullConstant(BVN->getOperand(i))) - continue; + CV[i] = NegOne; else CV[i] = One; } @@ -7064,15 +7064,8 @@ SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op, SDValue CPIdx = DAG.getConstantPool(CP, getPointerTy(DAG.getDataLayout()), 16 /* alignment */); - SmallVector Ops; - Ops.push_back(DAG.getEntryNode()); - Ops.push_back(CPIdx); - - SmallVector ValueVTs; - ValueVTs.push_back(MVT::v4i1); - ValueVTs.push_back(MVT::Other); // chain - SDVTList VTs = DAG.getVTList(ValueVTs); - + SDValue Ops[] = {DAG.getEntryNode(), CPIdx}; + SDVTList VTs = DAG.getVTList({MVT::v4i1, /*chain*/ MVT::Other}); return DAG.getMemIntrinsicNode( PPCISD::QVLFSb, dl, VTs, Ops, MVT::v4f32, MachinePointerInfo::getConstantPool(DAG.getMachineFunction())); @@ -7115,15 +7108,10 @@ SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op, // is typed as v4f64 because the QPX register integer states are not // explicitly represented. - SmallVector Ops; - Ops.push_back(StoreChain); - Ops.push_back(DAG.getConstant(Intrinsic::ppc_qpx_qvlfiwz, dl, MVT::i32)); - Ops.push_back(FIdx); - - SmallVector ValueVTs; - ValueVTs.push_back(MVT::v4f64); - ValueVTs.push_back(MVT::Other); // chain - SDVTList VTs = DAG.getVTList(ValueVTs); + SDValue Ops[] = {StoreChain, + DAG.getConstant(Intrinsic::ppc_qpx_qvlfiwz, dl, MVT::i32), + FIdx}; + SDVTList VTs = DAG.getVTList({MVT::v4f64, /*chain*/ MVT::Other}); SDValue LoadedVect = DAG.getMemIntrinsicNode(ISD::INTRINSIC_W_CHAIN, dl, VTs, Ops, MVT::v4i32, PtrInfo); @@ -7836,15 +7824,10 @@ SDValue PPCTargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op, SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT); SDValue StoreChain = DAG.getEntryNode(); - SmallVector Ops; - Ops.push_back(StoreChain); - Ops.push_back(DAG.getConstant(Intrinsic::ppc_qpx_qvstfiw, dl, MVT::i32)); - Ops.push_back(Value); - Ops.push_back(FIdx); - - SmallVector ValueVTs; - ValueVTs.push_back(MVT::Other); // chain - SDVTList VTs = DAG.getVTList(ValueVTs); + SDValue Ops[] = {StoreChain, + DAG.getConstant(Intrinsic::ppc_qpx_qvstfiw, dl, MVT::i32), + Value, FIdx}; + SDVTList VTs = DAG.getVTList(/*chain*/ MVT::Other); StoreChain = DAG.getMemIntrinsicNode(ISD::INTRINSIC_VOID, dl, VTs, Ops, MVT::v4i32, PtrInfo); @@ -7885,7 +7868,7 @@ SDValue PPCTargetLowering::LowerVectorLoad(SDValue Op, ScalarMemVT = MemVT.getScalarType(); unsigned Stride = ScalarMemVT.getStoreSize(); - SmallVector Vals, LoadChains; + SDValue Vals[4], LoadChains[4]; for (unsigned Idx = 0; Idx < 4; ++Idx) { SDValue Load; if (ScalarVT != ScalarMemVT) @@ -7911,8 +7894,8 @@ SDValue PPCTargetLowering::LowerVectorLoad(SDValue Op, LN->getAddressingMode()); } - Vals.push_back(Load); - LoadChains.push_back(Load.getValue(1)); + Vals[Idx] = Load; + LoadChains[Idx] = Load.getValue(1); BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, DAG.getConstant(Stride, dl, @@ -7937,19 +7920,17 @@ SDValue PPCTargetLowering::LowerVectorLoad(SDValue Op, // To lower v4i1 from a byte array, we load the byte elements of the // vector and then reuse the BUILD_VECTOR logic. - SmallVector VectElmts, VectElmtChains; + SDValue VectElmts[4], VectElmtChains[4]; for (unsigned i = 0; i < 4; ++i) { SDValue Idx = DAG.getConstant(i, dl, BasePtr.getValueType()); Idx = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, Idx); - VectElmts.push_back(DAG.getExtLoad(ISD::EXTLOAD, - dl, MVT::i32, LoadChain, Idx, - LN->getPointerInfo().getWithOffset(i), - MVT::i8 /* memory type */, - LN->isVolatile(), LN->isNonTemporal(), - LN->isInvariant(), - 1 /* alignment */, LN->getAAInfo())); - VectElmtChains.push_back(VectElmts[i].getValue(1)); + VectElmts[i] = DAG.getExtLoad(ISD::EXTLOAD, dl, MVT::i32, LoadChain, Idx, + LN->getPointerInfo().getWithOffset(i), + MVT::i8 /* memory type */, LN->isVolatile(), + LN->isNonTemporal(), LN->isInvariant(), + 1 /* alignment */, LN->getAAInfo()); + VectElmtChains[i] = VectElmts[i].getValue(1); } LoadChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, VectElmtChains); @@ -7981,7 +7962,7 @@ SDValue PPCTargetLowering::LowerVectorStore(SDValue Op, ScalarMemVT = MemVT.getScalarType(); unsigned Stride = ScalarMemVT.getStoreSize(); - SmallVector Stores; + SDValue Stores[4]; for (unsigned Idx = 0; Idx < 4; ++Idx) { SDValue Ex = DAG.getNode( ISD::EXTRACT_VECTOR_ELT, dl, ScalarVT, Value, @@ -8010,7 +7991,7 @@ SDValue PPCTargetLowering::LowerVectorStore(SDValue Op, BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, DAG.getConstant(Stride, dl, BasePtr.getValueType())); - Stores.push_back(Store); + Stores[Idx] = Store; } SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores); @@ -8049,43 +8030,38 @@ SDValue PPCTargetLowering::LowerVectorStore(SDValue Op, EVT PtrVT = getPointerTy(DAG.getDataLayout()); SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT); - SmallVector Ops; - Ops.push_back(StoreChain); - Ops.push_back(DAG.getConstant(Intrinsic::ppc_qpx_qvstfiw, dl, MVT::i32)); - Ops.push_back(Value); - Ops.push_back(FIdx); - - SmallVector ValueVTs; - ValueVTs.push_back(MVT::Other); // chain - SDVTList VTs = DAG.getVTList(ValueVTs); + SDValue Ops[] = {StoreChain, + DAG.getConstant(Intrinsic::ppc_qpx_qvstfiw, dl, MVT::i32), + Value, FIdx}; + SDVTList VTs = DAG.getVTList(/*chain*/ MVT::Other); StoreChain = DAG.getMemIntrinsicNode(ISD::INTRINSIC_VOID, dl, VTs, Ops, MVT::v4i32, PtrInfo); // Move data into the byte array. - SmallVector Loads, LoadChains; + SDValue Loads[4], LoadChains[4]; for (unsigned i = 0; i < 4; ++i) { unsigned Offset = 4*i; SDValue Idx = DAG.getConstant(Offset, dl, FIdx.getValueType()); Idx = DAG.getNode(ISD::ADD, dl, FIdx.getValueType(), FIdx, Idx); - Loads.push_back(DAG.getLoad(MVT::i32, dl, StoreChain, Idx, - PtrInfo.getWithOffset(Offset), - false, false, false, 0)); - LoadChains.push_back(Loads[i].getValue(1)); + Loads[i] = + DAG.getLoad(MVT::i32, dl, StoreChain, Idx, + PtrInfo.getWithOffset(Offset), false, false, false, 0); + LoadChains[i] = Loads[i].getValue(1); } StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains); - SmallVector Stores; + SDValue Stores[4]; for (unsigned i = 0; i < 4; ++i) { SDValue Idx = DAG.getConstant(i, dl, BasePtr.getValueType()); Idx = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, Idx); - Stores.push_back(DAG.getTruncStore( + Stores[i] = DAG.getTruncStore( StoreChain, dl, Loads[i], Idx, SN->getPointerInfo().getWithOffset(i), MVT::i8 /* memory type */, SN->isNonTemporal(), SN->isVolatile(), - 1 /* alignment */, SN->getAAInfo())); + 1 /* alignment */, SN->getAAInfo()); } StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores); -- 2.50.1