Skip to content

Commit

Permalink
[X86] Disable mul -> shl + lea combine when compiling for minsize
Browse files Browse the repository at this point in the history
Differential Revision: http://reviews.llvm.org/D11904

llvm-svn: 244740
  • Loading branch information
Michael Kuperstein committed Aug 12, 2015
1 parent 94f2bb5 commit fe0d9bb
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
4 changes: 4 additions & 0 deletions llvm/lib/Target/X86/X86ISelLowering.cpp
Expand Up @@ -23436,6 +23436,10 @@ static SDValue PerformCMOVCombine(SDNode *N, SelectionDAG &DAG,
/// LEA + SHL, LEA + LEA.
static SDValue PerformMulCombine(SDNode *N, SelectionDAG &DAG,
TargetLowering::DAGCombinerInfo &DCI) {
// An imul is usually smaller than the alternative sequence.
if (DAG.getMachineFunction().getFunction()->optForMinSize())
return SDValue();

if (DCI.isBeforeLegalize() || DCI.isCalledByLegalizer())
return SDValue();

Expand Down
18 changes: 18 additions & 0 deletions llvm/test/CodeGen/X86/imul.ll
Expand Up @@ -108,3 +108,21 @@ define i64 @mul40_64(i64 %A) {
%mul = mul i64 %A, 40
ret i64 %mul
}

define i32 @mul4_32_minsize(i32 %A) minsize {
; X64-LABEL: mul4_32_minsize:
; X64: leal
; X86-LABEL: mul4_32_minsize:
; X86: shll
%mul = mul i32 %A, 4
ret i32 %mul
}

define i32 @mul40_32_minsize(i32 %A) minsize {
; X64-LABEL: mul40_32_minsize:
; X64: imull
; X86-LABEL: mul40_32_minsize:
; X86: imull
%mul = mul i32 %A, 40
ret i32 %mul
}

0 comments on commit fe0d9bb

Please sign in to comment.