From: Evan Cheng Date: Tue, 29 Aug 2006 06:44:17 +0000 (+0000) Subject: Avoid making unneeded load/mod/store transformation which can hurt performance. X-Git-Tag: android-x86-6.0-r1~1003^2~41000 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=82a35b34fbf66acc18b9e2d6b46604a3e9a8a2c9;p=android-x86%2Fexternal-llvm.git Avoid making unneeded load/mod/store transformation which can hurt performance. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29952 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 2dfc763850a..0ca063bbae1 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -80,6 +80,9 @@ namespace { Statistic<> NumFPKill("x86-codegen", "Number of FP_REG_KILL instructions added"); + Statistic<> + NumLoadMoved("x86-codegen", "Number of loads moved below TokenFactor"); + //===--------------------------------------------------------------------===// /// ISel - X86 specific code to select X86 machine instructions for /// SelectionDAG operations. @@ -313,8 +316,6 @@ void X86DAGToDAGISel::InstructionSelectPreprocess(SelectionDAG &DAG) { switch (Opcode) { case ISD::ADD: case ISD::MUL: - case ISD::FADD: - case ISD::FMUL: case ISD::AND: case ISD::OR: case ISD::XOR: @@ -329,7 +330,8 @@ void X86DAGToDAGISel::InstructionSelectPreprocess(SelectionDAG &DAG) { std::swap(N10, N11); } RModW = RModW && N10.Val->isOperand(Chain.Val) && N10.hasOneUse() && - N10.getOperand(1) == N2; + (N10.getOperand(1) == N2) && + (N10.Val->getValueType(0) == N1.getValueType()); if (RModW) Load = N10; break; @@ -347,15 +349,18 @@ void X86DAGToDAGISel::InstructionSelectPreprocess(SelectionDAG &DAG) { SDOperand N10 = N1.getOperand(0); if (N10.Val->getOpcode() == ISD::LOAD) RModW = N10.Val->isOperand(Chain.Val) && N10.hasOneUse() && - N10.getOperand(1) == N2; + (N10.getOperand(1) == N2) && + (N10.Val->getValueType(0) == N1.getValueType()); if (RModW) Load = N10; break; } } - if (RModW) + if (RModW) { MoveBelowTokenFactor(DAG, Load, SDOperand(I, 0), Chain); + ++NumLoadMoved; + } } }