Get the type of a shift from the shift, not from its shift

count operand.  These should be the same but apparently are
not always, and this is cleaner anyway.  This improves the
code in an existing test.

llvm-svn: 122354
This commit is contained in:
Dale Johannesen 2010-12-21 20:06:19 +00:00
parent d64931df77
commit fa5dc82fda
2 changed files with 4 additions and 4 deletions

View File

@ -3178,7 +3178,7 @@ SDValue DAGCombiner::visitSRL(SDNode *N) {
uint64_t c1 =
cast<ConstantSDNode>(N0.getOperand(0)->getOperand(1))->getZExtValue();
uint64_t c2 = N1C->getZExtValue();
EVT InnerShiftVT = N0.getOperand(0)->getOperand(1).getValueType();
EVT InnerShiftVT = N0.getOperand(0).getValueType();
uint64_t InnerShiftSize = InnerShiftVT.getScalarType().getSizeInBits();
// This is only valid if the OpSizeInBits + c1 = size of inner shift.
if (c1 + OpSizeInBits == InnerShiftSize) {

View File

@ -29,9 +29,9 @@ entry:
ret i8 %div
; CHECK: test3:
; CHECK: imull $171, %eax, %eax
; CHECK-NEXT: shrb %ah
; CHECK-NEXT: movzbl %ah, %eax
; CHECK: movzbl 8(%esp), %eax
; CHECK-NEXT: imull $171, %eax, %eax
; CHECK-NEXT: shrl $9, %eax
; CHECK-NEXT: ret
}