[llvm-commits] [llvm] r122090 - in /llvm/trunk: lib/CodeGen/SelectionDAG/DAGCombiner.cpp test/CodeGen/X86/x86_64-mul-by-const.ll
Chris Lattner
clattner at apple.com
Sat Dec 18 13:53:21 PST 2010
On Dec 17, 2010, at 1:45 PM, Dale Johannesen wrote:
> Author: johannes
> Date: Fri Dec 17 15:45:49 2010
> New Revision: 122090
>
> URL: http://llvm.org/viewvc/llvm-project?rev=122090&view=rev
> Log:
> Add a transform to DAG Combiner. This improves the
> code for the case where 32-bit divide by constant is
> turned into 64-bit multiply by constant. 8771012.
Very nice Dale, thanks for fixing this. Some minor comments:
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fri Dec 17 15:45:49 2010
> @@ -3171,6 +3171,26 @@
> DAG.getConstant(c1 + c2, N1.getValueType()));
> }
>
> + // fold (srl (trunc (srl x, c1)), c2) -> 0 or (trunc (srl x, (add c1, c2)))
> + // This is only valid if the OpSizeInBits + c1 = size of inner shift
Please end the comment with a ".". Do we already do this for arithmetic shifts, and shift left (with extension instead of trunc) as well?
> + if (N1C && N0.getOpcode() == ISD::TRUNCATE &&
> + N0.getOperand(0).getOpcode() == ISD::SRL &&
> + N0.getOperand(0)->getOperand(1).getOpcode() == ISD::Constant) {
Please use isa<ConstantSDNode>(N0.getOperand(0)->getOperand(1)) which makes the cast<> more obviously right.
> + uint64_t c1 =
> + cast<ConstantSDNode>(N0.getOperand(0)->getOperand(1))->getZExtValue();
> + uint64_t c2 = N1C->getZExtValue();
This can break if the value is > i64. Instead of doing this on getZExtValue(), I'd suggest doing the math on APInt's.
> + EVT InnerShiftVT = N0.getOperand(0)->getOperand(1).getValueType();
> + uint64_t InnerShiftSize = InnerShiftVT.getScalarType().getSizeInBits();
> + if (c1 + OpSizeInBits == InnerShiftSize) {
> + if (c1 + c2 >= InnerShiftSize)
> + return DAG.getConstant(0, VT);
> + return DAG.getNode(ISD::TRUNCATE, N0->getDebugLoc(), VT,
Please add a short comment explaining what you're doing here. What is the "c1 + OpSizeInBits == InnerShiftSize" check doing?
> +; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
> +; Formerly there were two shifts. 8771012.
Please add a rdar:// prefix so that grep will pick it up, thanks!
-Chris
More information about the llvm-commits
mailing list