Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit 7cc443c

Browse files
committed
[X86] Use a two lea sequence for multiply by 37, 41, and 73.
These fit a pattern used by 11, 21, and 19. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337871 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent a1d740b commit 7cc443c

File tree

5 files changed

+114
-59
lines changed

5 files changed

+114
-59
lines changed

lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33716,13 +33716,22 @@ static SDValue combineMulSpecial(uint64_t MulAmt, SDNode *N, SelectionDAG &DAG,
3371633716
case 21:
3371733717
// mul x, 21 => add ((shl (mul x, 5), 2), x)
3371833718
return combineMulShlAddOrSub(5, 2, /*isAdd*/ true);
33719+
case 41:
33720+
// mul x, 41 => add ((shl (mul x, 5), 3), x)
33721+
return combineMulShlAddOrSub(5, 3, /*isAdd*/ true);
3371933722
case 22:
3372033723
// mul x, 22 => add (add ((shl (mul x, 5), 2), x), x)
3372133724
return DAG.getNode(ISD::ADD, DL, VT, N->getOperand(0),
3372233725
combineMulShlAddOrSub(5, 2, /*isAdd*/ true));
3372333726
case 19:
3372433727
// mul x, 19 => add ((shl (mul x, 9), 1), x)
3372533728
return combineMulShlAddOrSub(9, 1, /*isAdd*/ true);
33729+
case 37:
33730+
// mul x, 37 => add ((shl (mul x, 9), 2), x)
33731+
return combineMulShlAddOrSub(9, 2, /*isAdd*/ true);
33732+
case 73:
33733+
// mul x, 73 => add ((shl (mul x, 9), 3), x)
33734+
return combineMulShlAddOrSub(9, 3, /*isAdd*/ true);
3372633735
case 13:
3372733736
// mul x, 13 => add ((shl (mul x, 3), 2), x)
3372833737
return combineMulShlAddOrSub(3, 2, /*isAdd*/ true);

test/CodeGen/X86/funnel-shift.ll

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -127,31 +127,33 @@ define i37 @fshl_i37(i37 %x, i37 %y, i37 %z) nounwind {
127127
; X64-AVX2-LABEL: fshl_i37:
128128
; X64-AVX2: # %bb.0:
129129
; X64-AVX2-NEXT: pushq %rbx
130-
; X64-AVX2-NEXT: movq %rdx, %r9
131-
; X64-AVX2-NEXT: movabsq $137438953471, %r10 # imm = 0x1FFFFFFFFF
132-
; X64-AVX2-NEXT: andq %r10, %rsi
133-
; X64-AVX2-NEXT: movl $37, %r8d
134-
; X64-AVX2-NEXT: subq %rdx, %r8
135-
; X64-AVX2-NEXT: andq %r10, %r9
130+
; X64-AVX2-NEXT: movq %rdx, %r10
131+
; X64-AVX2-NEXT: movabsq $137438953471, %r8 # imm = 0x1FFFFFFFFF
132+
; X64-AVX2-NEXT: andq %r8, %rsi
133+
; X64-AVX2-NEXT: movl $37, %r9d
134+
; X64-AVX2-NEXT: subq %rdx, %r9
135+
; X64-AVX2-NEXT: andq %r8, %r10
136136
; X64-AVX2-NEXT: movabsq $-2492803253203993461, %r11 # imm = 0xDD67C8A60DD67C8B
137-
; X64-AVX2-NEXT: movq %r9, %rax
137+
; X64-AVX2-NEXT: movq %r10, %rax
138138
; X64-AVX2-NEXT: mulq %r11
139139
; X64-AVX2-NEXT: shrq $5, %rdx
140-
; X64-AVX2-NEXT: imulq $37, %rdx, %rax
141-
; X64-AVX2-NEXT: subq %rax, %r9
140+
; X64-AVX2-NEXT: leaq (%rdx,%rdx,8), %rax
141+
; X64-AVX2-NEXT: leaq (%rdx,%rax,4), %rax
142+
; X64-AVX2-NEXT: subq %rax, %r10
142143
; X64-AVX2-NEXT: movq %rdi, %rbx
143-
; X64-AVX2-NEXT: movl %r9d, %ecx
144+
; X64-AVX2-NEXT: movl %r10d, %ecx
144145
; X64-AVX2-NEXT: shlq %cl, %rbx
146+
; X64-AVX2-NEXT: andq %r9, %r8
145147
; X64-AVX2-NEXT: movq %r8, %rax
146-
; X64-AVX2-NEXT: andq %r10, %rax
147148
; X64-AVX2-NEXT: mulq %r11
148-
; X64-AVX2-NEXT: shrl $5, %edx
149-
; X64-AVX2-NEXT: imull $37, %edx, %eax
150-
; X64-AVX2-NEXT: subl %eax, %r8d
151-
; X64-AVX2-NEXT: movl %r8d, %ecx
149+
; X64-AVX2-NEXT: shrq $5, %rdx
150+
; X64-AVX2-NEXT: leaq (%rdx,%rdx,8), %rax
151+
; X64-AVX2-NEXT: leal (%rdx,%rax,4), %eax
152+
; X64-AVX2-NEXT: subl %eax, %r9d
153+
; X64-AVX2-NEXT: movl %r9d, %ecx
152154
; X64-AVX2-NEXT: shrq %cl, %rsi
153155
; X64-AVX2-NEXT: orq %rbx, %rsi
154-
; X64-AVX2-NEXT: testq %r9, %r9
156+
; X64-AVX2-NEXT: testq %r10, %r10
155157
; X64-AVX2-NEXT: cmoveq %rdi, %rsi
156158
; X64-AVX2-NEXT: movq %rsi, %rax
157159
; X64-AVX2-NEXT: popq %rbx
@@ -359,31 +361,33 @@ define i37 @fshr_i37(i37 %x, i37 %y, i37 %z) nounwind {
359361
; X64-AVX2-LABEL: fshr_i37:
360362
; X64-AVX2: # %bb.0:
361363
; X64-AVX2-NEXT: pushq %rbx
362-
; X64-AVX2-NEXT: movq %rdx, %r9
363-
; X64-AVX2-NEXT: movabsq $137438953471, %r11 # imm = 0x1FFFFFFFFF
364-
; X64-AVX2-NEXT: movq %rsi, %r10
365-
; X64-AVX2-NEXT: andq %r11, %r10
366-
; X64-AVX2-NEXT: movl $37, %r8d
367-
; X64-AVX2-NEXT: subq %rdx, %r8
368-
; X64-AVX2-NEXT: andq %r11, %r9
364+
; X64-AVX2-NEXT: movq %rdx, %r10
365+
; X64-AVX2-NEXT: movabsq $137438953471, %r8 # imm = 0x1FFFFFFFFF
366+
; X64-AVX2-NEXT: movq %rsi, %r11
367+
; X64-AVX2-NEXT: andq %r8, %r11
368+
; X64-AVX2-NEXT: movl $37, %r9d
369+
; X64-AVX2-NEXT: subq %rdx, %r9
370+
; X64-AVX2-NEXT: andq %r8, %r10
369371
; X64-AVX2-NEXT: movabsq $-2492803253203993461, %rbx # imm = 0xDD67C8A60DD67C8B
370-
; X64-AVX2-NEXT: movq %r9, %rax
372+
; X64-AVX2-NEXT: movq %r10, %rax
371373
; X64-AVX2-NEXT: mulq %rbx
372374
; X64-AVX2-NEXT: shrq $5, %rdx
373-
; X64-AVX2-NEXT: imulq $37, %rdx, %rax
374-
; X64-AVX2-NEXT: subq %rax, %r9
375-
; X64-AVX2-NEXT: movl %r9d, %ecx
376-
; X64-AVX2-NEXT: shrq %cl, %r10
375+
; X64-AVX2-NEXT: leaq (%rdx,%rdx,8), %rax
376+
; X64-AVX2-NEXT: leaq (%rdx,%rax,4), %rax
377+
; X64-AVX2-NEXT: subq %rax, %r10
378+
; X64-AVX2-NEXT: movl %r10d, %ecx
379+
; X64-AVX2-NEXT: shrq %cl, %r11
380+
; X64-AVX2-NEXT: andq %r9, %r8
377381
; X64-AVX2-NEXT: movq %r8, %rax
378-
; X64-AVX2-NEXT: andq %r11, %rax
379382
; X64-AVX2-NEXT: mulq %rbx
380-
; X64-AVX2-NEXT: shrl $5, %edx
381-
; X64-AVX2-NEXT: imull $37, %edx, %eax
382-
; X64-AVX2-NEXT: subl %eax, %r8d
383-
; X64-AVX2-NEXT: movl %r8d, %ecx
383+
; X64-AVX2-NEXT: shrq $5, %rdx
384+
; X64-AVX2-NEXT: leaq (%rdx,%rdx,8), %rax
385+
; X64-AVX2-NEXT: leal (%rdx,%rax,4), %eax
386+
; X64-AVX2-NEXT: subl %eax, %r9d
387+
; X64-AVX2-NEXT: movl %r9d, %ecx
384388
; X64-AVX2-NEXT: shlq %cl, %rdi
385-
; X64-AVX2-NEXT: orq %r10, %rdi
386-
; X64-AVX2-NEXT: testq %r9, %r9
389+
; X64-AVX2-NEXT: orq %r11, %rdi
390+
; X64-AVX2-NEXT: testq %r10, %r10
387391
; X64-AVX2-NEXT: cmoveq %rsi, %rdi
388392
; X64-AVX2-NEXT: movq %rdi, %rax
389393
; X64-AVX2-NEXT: popq %rbx

test/CodeGen/X86/mul-constant-i16.ll

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -642,13 +642,17 @@ define i16 @test_mul_by_32(i16 %x) {
642642
define i16 @test_mul_by_37(i16 %x) {
643643
; X86-LABEL: test_mul_by_37:
644644
; X86: # %bb.0:
645-
; X86-NEXT: imull $37, {{[0-9]+}}(%esp), %eax
645+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
646+
; X86-NEXT: leal (%eax,%eax,8), %ecx
647+
; X86-NEXT: leal (%eax,%ecx,4), %eax
646648
; X86-NEXT: # kill: def $ax killed $ax killed $eax
647649
; X86-NEXT: retl
648650
;
649651
; X64-LABEL: test_mul_by_37:
650652
; X64: # %bb.0:
651-
; X64-NEXT: imull $37, %edi, %eax
653+
; X64-NEXT: # kill: def $edi killed $edi def $rdi
654+
; X64-NEXT: leal (%rdi,%rdi,8), %eax
655+
; X64-NEXT: leal (%rdi,%rax,4), %eax
652656
; X64-NEXT: # kill: def $ax killed $ax killed $eax
653657
; X64-NEXT: retq
654658
%mul = mul nsw i16 %x, 37
@@ -658,13 +662,17 @@ define i16 @test_mul_by_37(i16 %x) {
658662
define i16 @test_mul_by_41(i16 %x) {
659663
; X86-LABEL: test_mul_by_41:
660664
; X86: # %bb.0:
661-
; X86-NEXT: imull $41, {{[0-9]+}}(%esp), %eax
665+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
666+
; X86-NEXT: leal (%eax,%eax,4), %ecx
667+
; X86-NEXT: leal (%eax,%ecx,8), %eax
662668
; X86-NEXT: # kill: def $ax killed $ax killed $eax
663669
; X86-NEXT: retl
664670
;
665671
; X64-LABEL: test_mul_by_41:
666672
; X64: # %bb.0:
667-
; X64-NEXT: imull $41, %edi, %eax
673+
; X64-NEXT: # kill: def $edi killed $edi def $rdi
674+
; X64-NEXT: leal (%rdi,%rdi,4), %eax
675+
; X64-NEXT: leal (%rdi,%rax,8), %eax
668676
; X64-NEXT: # kill: def $ax killed $ax killed $eax
669677
; X64-NEXT: retq
670678
%mul = mul nsw i16 %x, 41
@@ -697,13 +705,17 @@ define i16 @test_mul_by_62(i16 %x) {
697705
define i16 @test_mul_by_73(i16 %x) {
698706
; X86-LABEL: test_mul_by_73:
699707
; X86: # %bb.0:
700-
; X86-NEXT: imull $73, {{[0-9]+}}(%esp), %eax
708+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
709+
; X86-NEXT: leal (%eax,%eax,8), %ecx
710+
; X86-NEXT: leal (%eax,%ecx,8), %eax
701711
; X86-NEXT: # kill: def $ax killed $ax killed $eax
702712
; X86-NEXT: retl
703713
;
704714
; X64-LABEL: test_mul_by_73:
705715
; X64: # %bb.0:
706-
; X64-NEXT: imull $73, %edi, %eax
716+
; X64-NEXT: # kill: def $edi killed $edi def $rdi
717+
; X64-NEXT: leal (%rdi,%rdi,8), %eax
718+
; X64-NEXT: leal (%rdi,%rax,8), %eax
707719
; X64-NEXT: # kill: def $ax killed $ax killed $eax
708720
; X64-NEXT: retq
709721
%mul = mul nsw i16 %x, 73

test/CodeGen/X86/mul-constant-i32.ll

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1679,17 +1679,23 @@ define i32 @test_mul_by_32(i32 %x) {
16791679
define i32 @test_mul_by_37(i32 %x) {
16801680
; X86-LABEL: test_mul_by_37:
16811681
; X86: # %bb.0:
1682-
; X86-NEXT: imull $37, {{[0-9]+}}(%esp), %eax
1682+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1683+
; X86-NEXT: leal (%eax,%eax,8), %ecx
1684+
; X86-NEXT: leal (%eax,%ecx,4), %eax
16831685
; X86-NEXT: retl
16841686
;
16851687
; X64-HSW-LABEL: test_mul_by_37:
16861688
; X64-HSW: # %bb.0:
1687-
; X64-HSW-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1689+
; X64-HSW-NEXT: # kill: def $edi killed $edi def $rdi
1690+
; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
1691+
; X64-HSW-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
16881692
; X64-HSW-NEXT: retq # sched: [7:1.00]
16891693
;
16901694
; X64-JAG-LABEL: test_mul_by_37:
16911695
; X64-JAG: # %bb.0:
1692-
; X64-JAG-NEXT: imull $37, %edi, %eax # sched: [3:1.00]
1696+
; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi
1697+
; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00]
1698+
; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [2:1.00]
16931699
; X64-JAG-NEXT: retq # sched: [4:1.00]
16941700
;
16951701
; X86-NOOPT-LABEL: test_mul_by_37:
@@ -1723,17 +1729,23 @@ define i32 @test_mul_by_37(i32 %x) {
17231729
define i32 @test_mul_by_41(i32 %x) {
17241730
; X86-LABEL: test_mul_by_41:
17251731
; X86: # %bb.0:
1726-
; X86-NEXT: imull $41, {{[0-9]+}}(%esp), %eax
1732+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1733+
; X86-NEXT: leal (%eax,%eax,4), %ecx
1734+
; X86-NEXT: leal (%eax,%ecx,8), %eax
17271735
; X86-NEXT: retl
17281736
;
17291737
; X64-HSW-LABEL: test_mul_by_41:
17301738
; X64-HSW: # %bb.0:
1731-
; X64-HSW-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1739+
; X64-HSW-NEXT: # kill: def $edi killed $edi def $rdi
1740+
; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
1741+
; X64-HSW-NEXT: leal (%rdi,%rax,8), %eax # sched: [1:0.50]
17321742
; X64-HSW-NEXT: retq # sched: [7:1.00]
17331743
;
17341744
; X64-JAG-LABEL: test_mul_by_41:
17351745
; X64-JAG: # %bb.0:
1736-
; X64-JAG-NEXT: imull $41, %edi, %eax # sched: [3:1.00]
1746+
; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi
1747+
; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [2:1.00]
1748+
; X64-JAG-NEXT: leal (%rdi,%rax,8), %eax # sched: [2:1.00]
17371749
; X64-JAG-NEXT: retq # sched: [4:1.00]
17381750
;
17391751
; X86-NOOPT-LABEL: test_mul_by_41:
@@ -1824,17 +1836,23 @@ define i32 @test_mul_by_62(i32 %x) {
18241836
define i32 @test_mul_by_73(i32 %x) {
18251837
; X86-LABEL: test_mul_by_73:
18261838
; X86: # %bb.0:
1827-
; X86-NEXT: imull $73, {{[0-9]+}}(%esp), %eax
1839+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1840+
; X86-NEXT: leal (%eax,%eax,8), %ecx
1841+
; X86-NEXT: leal (%eax,%ecx,8), %eax
18281842
; X86-NEXT: retl
18291843
;
18301844
; X64-HSW-LABEL: test_mul_by_73:
18311845
; X64-HSW: # %bb.0:
1832-
; X64-HSW-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1846+
; X64-HSW-NEXT: # kill: def $edi killed $edi def $rdi
1847+
; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
1848+
; X64-HSW-NEXT: leal (%rdi,%rax,8), %eax # sched: [1:0.50]
18331849
; X64-HSW-NEXT: retq # sched: [7:1.00]
18341850
;
18351851
; X64-JAG-LABEL: test_mul_by_73:
18361852
; X64-JAG: # %bb.0:
1837-
; X64-JAG-NEXT: imull $73, %edi, %eax # sched: [3:1.00]
1853+
; X64-JAG-NEXT: # kill: def $edi killed $edi def $rdi
1854+
; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [2:1.00]
1855+
; X64-JAG-NEXT: leal (%rdi,%rax,8), %eax # sched: [2:1.00]
18381856
; X64-JAG-NEXT: retq # sched: [4:1.00]
18391857
;
18401858
; X86-NOOPT-LABEL: test_mul_by_73:

test/CodeGen/X86/mul-constant-i64.ll

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1764,20 +1764,24 @@ define i64 @test_mul_by_32(i64 %x) {
17641764
define i64 @test_mul_by_37(i64 %x) {
17651765
; X86-LABEL: test_mul_by_37:
17661766
; X86: # %bb.0:
1767+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1768+
; X86-NEXT: leal (%eax,%eax,8), %ecx
1769+
; X86-NEXT: leal (%eax,%ecx,4), %ecx
17671770
; X86-NEXT: movl $37, %eax
17681771
; X86-NEXT: mull {{[0-9]+}}(%esp)
1769-
; X86-NEXT: imull $37, {{[0-9]+}}(%esp), %ecx
17701772
; X86-NEXT: addl %ecx, %edx
17711773
; X86-NEXT: retl
17721774
;
17731775
; X64-HSW-LABEL: test_mul_by_37:
17741776
; X64-HSW: # %bb.0:
1775-
; X64-HSW-NEXT: imulq $37, %rdi, %rax # sched: [3:1.00]
1777+
; X64-HSW-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50]
1778+
; X64-HSW-NEXT: leaq (%rdi,%rax,4), %rax # sched: [1:0.50]
17761779
; X64-HSW-NEXT: retq # sched: [7:1.00]
17771780
;
17781781
; X64-JAG-LABEL: test_mul_by_37:
17791782
; X64-JAG: # %bb.0:
1780-
; X64-JAG-NEXT: imulq $37, %rdi, %rax # sched: [6:4.00]
1783+
; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00]
1784+
; X64-JAG-NEXT: leaq (%rdi,%rax,4), %rax # sched: [2:1.00]
17811785
; X64-JAG-NEXT: retq # sched: [4:1.00]
17821786
;
17831787
; X86-NOOPT-LABEL: test_mul_by_37:
@@ -1814,20 +1818,24 @@ define i64 @test_mul_by_37(i64 %x) {
18141818
define i64 @test_mul_by_41(i64 %x) {
18151819
; X86-LABEL: test_mul_by_41:
18161820
; X86: # %bb.0:
1821+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1822+
; X86-NEXT: leal (%eax,%eax,4), %ecx
1823+
; X86-NEXT: leal (%eax,%ecx,8), %ecx
18171824
; X86-NEXT: movl $41, %eax
18181825
; X86-NEXT: mull {{[0-9]+}}(%esp)
1819-
; X86-NEXT: imull $41, {{[0-9]+}}(%esp), %ecx
18201826
; X86-NEXT: addl %ecx, %edx
18211827
; X86-NEXT: retl
18221828
;
18231829
; X64-HSW-LABEL: test_mul_by_41:
18241830
; X64-HSW: # %bb.0:
1825-
; X64-HSW-NEXT: imulq $41, %rdi, %rax # sched: [3:1.00]
1831+
; X64-HSW-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [1:0.50]
1832+
; X64-HSW-NEXT: leaq (%rdi,%rax,8), %rax # sched: [1:0.50]
18261833
; X64-HSW-NEXT: retq # sched: [7:1.00]
18271834
;
18281835
; X64-JAG-LABEL: test_mul_by_41:
18291836
; X64-JAG: # %bb.0:
1830-
; X64-JAG-NEXT: imulq $41, %rdi, %rax # sched: [6:4.00]
1837+
; X64-JAG-NEXT: leaq (%rdi,%rdi,4), %rax # sched: [2:1.00]
1838+
; X64-JAG-NEXT: leaq (%rdi,%rax,8), %rax # sched: [2:1.00]
18311839
; X64-JAG-NEXT: retq # sched: [4:1.00]
18321840
;
18331841
; X86-NOOPT-LABEL: test_mul_by_41:
@@ -1927,20 +1935,24 @@ define i64 @test_mul_by_62(i64 %x) {
19271935
define i64 @test_mul_by_73(i64 %x) {
19281936
; X86-LABEL: test_mul_by_73:
19291937
; X86: # %bb.0:
1938+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1939+
; X86-NEXT: leal (%eax,%eax,8), %ecx
1940+
; X86-NEXT: leal (%eax,%ecx,8), %ecx
19301941
; X86-NEXT: movl $73, %eax
19311942
; X86-NEXT: mull {{[0-9]+}}(%esp)
1932-
; X86-NEXT: imull $73, {{[0-9]+}}(%esp), %ecx
19331943
; X86-NEXT: addl %ecx, %edx
19341944
; X86-NEXT: retl
19351945
;
19361946
; X64-HSW-LABEL: test_mul_by_73:
19371947
; X64-HSW: # %bb.0:
1938-
; X64-HSW-NEXT: imulq $73, %rdi, %rax # sched: [3:1.00]
1948+
; X64-HSW-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [1:0.50]
1949+
; X64-HSW-NEXT: leaq (%rdi,%rax,8), %rax # sched: [1:0.50]
19391950
; X64-HSW-NEXT: retq # sched: [7:1.00]
19401951
;
19411952
; X64-JAG-LABEL: test_mul_by_73:
19421953
; X64-JAG: # %bb.0:
1943-
; X64-JAG-NEXT: imulq $73, %rdi, %rax # sched: [6:4.00]
1954+
; X64-JAG-NEXT: leaq (%rdi,%rdi,8), %rax # sched: [2:1.00]
1955+
; X64-JAG-NEXT: leaq (%rdi,%rax,8), %rax # sched: [2:1.00]
19441956
; X64-JAG-NEXT: retq # sched: [4:1.00]
19451957
;
19461958
; X86-NOOPT-LABEL: test_mul_by_73:

0 commit comments

Comments
 (0)