aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/mul-constant-i32.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/X86/mul-constant-i32.ll')
-rw-r--r--test/CodeGen/X86/mul-constant-i32.ll1589
1 files changed, 173 insertions, 1416 deletions
diff --git a/test/CodeGen/X86/mul-constant-i32.ll b/test/CodeGen/X86/mul-constant-i32.ll
index b1e9a929b7f2..76e46e1f1b09 100644
--- a/test/CodeGen/X86/mul-constant-i32.ll
+++ b/test/CodeGen/X86/mul-constant-i32.ll
@@ -1,12 +1,6 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86
-; RUN: llc < %s -mtriple=x86_64-unknown -print-schedule=true -mcpu=haswell| FileCheck %s --check-prefix=X64-HSW
-; RUN: llc < %s -mtriple=x86_64-unknown -print-schedule=true -mcpu=btver2| FileCheck %s --check-prefix=X64-JAG
-; RUN: llc < %s -mtriple=i686-unknown -mul-constant-optimization=false | FileCheck %s --check-prefix=X86-NOOPT
-; RUN: llc < %s -mtriple=x86_64-unknown -mul-constant-optimization=false -print-schedule=true -mcpu=haswell| FileCheck %s --check-prefix=HSW-NOOPT
-; RUN: llc < %s -mtriple=x86_64-unknown -mul-constant-optimization=false -print-schedule=true -mcpu=btver2| FileCheck %s --check-prefix=JAG-NOOPT
-; RUN: llc < %s -mtriple=x86_64-unknown -print-schedule=true -mcpu=slm| FileCheck %s --check-prefix=X64-SLM
-; RUN: llc < %s -mtriple=x86_64-unknown -mul-constant-optimization=false -print-schedule=true -mcpu=slm| FileCheck %s --check-prefix=SLM-NOOPT
+; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
define i32 @test_mul_by_1(i32 %x) {
; X86-LABEL: test_mul_by_1:
@@ -14,40 +8,10 @@ define i32 @test_mul_by_1(i32 %x) {
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_1:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_1:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_1:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_1:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.25]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_1:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.17]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_1:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_1:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.50]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_1:
+; X64: # BB#0:
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 1
ret i32 %mul
}
@@ -59,47 +23,11 @@ define i32 @test_mul_by_2(i32 %x) {
; X86-NEXT: addl %eax, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_2:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_2:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_2:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: addl %eax, %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_2:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (%rdi,%rdi), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_2:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal (%rdi,%rdi), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_2:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_2:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal (%rdi,%rdi), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_2:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 2
ret i32 %mul
}
@@ -110,46 +38,11 @@ define i32 @test_mul_by_3(i32 %x) {
; X86-NEXT: imull $3, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_3:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_3:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_3:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $3, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_3:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_3:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_3:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_3:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_3:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi,2), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 3
ret i32 %mul
}
@@ -161,47 +54,11 @@ define i32 @test_mul_by_4(i32 %x) {
; X86-NEXT: shll $2, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_4:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_4:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_4:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: shll $2, %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_4:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (,%rdi,4), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_4:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal (,%rdi,4), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_4:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_4:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal (,%rdi,4), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_4:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (,%rdi,4), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 4
ret i32 %mul
}
@@ -212,46 +69,11 @@ define i32 @test_mul_by_5(i32 %x) {
; X86-NEXT: imull $5, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_5:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_5:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_5:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $5, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_5:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_5:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_5:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_5:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_5:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi,4), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 5
ret i32 %mul
}
@@ -264,46 +86,12 @@ define i32 @test_mul_by_6(i32 %x) {
; X86-NEXT: leal (%eax,%eax,2), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_6:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: addl %edi, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_6:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: addl %edi, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_6:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $6, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_6:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $6, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_6:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $6, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_6:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: addl %edi, %edi # sched: [1:0.50]
-; X64-SLM-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_6:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $6, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_6:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: addl %edi, %edi
+; X64-NEXT: leal (%rdi,%rdi,2), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 6
ret i32 %mul
}
@@ -316,46 +104,12 @@ define i32 @test_mul_by_7(i32 %x) {
; X86-NEXT: subl %ecx, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_7:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: subl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_7:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: subl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_7:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $7, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_7:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $7, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_7:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $7, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_7:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (,%rdi,8), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: subl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_7:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $7, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_7:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (,%rdi,8), %eax
+; X64-NEXT: subl %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 7
ret i32 %mul
}
@@ -367,47 +121,11 @@ define i32 @test_mul_by_8(i32 %x) {
; X86-NEXT: shll $3, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_8:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_8:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_8:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: shll $3, %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_8:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_8:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal (,%rdi,8), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_8:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (,%rdi,8), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_8:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal (,%rdi,8), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_8:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (,%rdi,8), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 8
ret i32 %mul
}
@@ -418,46 +136,11 @@ define i32 @test_mul_by_9(i32 %x) {
; X86-NEXT: imull $9, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_9:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_9:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_9:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $9, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_9:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_9:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_9:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_9:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_9:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi,8), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 9
ret i32 %mul
}
@@ -470,46 +153,12 @@ define i32 @test_mul_by_10(i32 %x) {
; X86-NEXT: leal (%eax,%eax,4), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_10:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: addl %edi, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_10:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: addl %edi, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_10:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $10, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_10:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $10, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_10:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $10, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_10:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: addl %edi, %edi # sched: [1:0.50]
-; X64-SLM-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_10:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $10, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_10:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: addl %edi, %edi
+; X64-NEXT: leal (%rdi,%rdi,4), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 10
ret i32 %mul
}
@@ -517,49 +166,13 @@ define i32 @test_mul_by_10(i32 %x) {
define i32 @test_mul_by_11(i32 %x) {
; X86-LABEL: test_mul_by_11:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal (%eax,%eax,4), %ecx
-; X86-NEXT: leal (%eax,%ecx,2), %eax
+; X86-NEXT: imull $11, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_11:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rax,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_11:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rax,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_11:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $11, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_11:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $11, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_11:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $11, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_11:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $11, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_11:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $11, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_11:
+; X64: # BB#0:
+; X64-NEXT: imull $11, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 11
ret i32 %mul
}
@@ -572,46 +185,12 @@ define i32 @test_mul_by_12(i32 %x) {
; X86-NEXT: leal (%eax,%eax,2), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_12:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: shll $2, %edi # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_12:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: shll $2, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_12:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $12, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_12:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $12, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_12:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $12, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_12:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: shll $2, %edi # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_12:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $12, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_12:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: shll $2, %edi
+; X64-NEXT: leal (%rdi,%rdi,2), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 12
ret i32 %mul
}
@@ -619,49 +198,13 @@ define i32 @test_mul_by_12(i32 %x) {
define i32 @test_mul_by_13(i32 %x) {
; X86-LABEL: test_mul_by_13:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal (%eax,%eax,2), %ecx
-; X86-NEXT: leal (%eax,%ecx,4), %eax
+; X86-NEXT: imull $13, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_13:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_13:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_13:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $13, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_13:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $13, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_13:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $13, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_13:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $13, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_13:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $13, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_13:
+; X64: # BB#0:
+; X64-NEXT: imull $13, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 13
ret i32 %mul
}
@@ -669,52 +212,13 @@ define i32 @test_mul_by_13(i32 %x) {
define i32 @test_mul_by_14(i32 %x) {
; X86-LABEL: test_mul_by_14:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT: leal (%ecx,%ecx,2), %eax
-; X86-NEXT: leal (%ecx,%eax,4), %eax
-; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: imull $14, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_14:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: addl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_14:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_14:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $14, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_14:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $14, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_14:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $14, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_14:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $14, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_14:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $14, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_14:
+; X64: # BB#0:
+; X64-NEXT: imull $14, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 14
ret i32 %mul
}
@@ -727,46 +231,12 @@ define i32 @test_mul_by_15(i32 %x) {
; X86-NEXT: leal (%eax,%eax,2), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_15:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_15:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_15:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $15, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_15:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $15, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_15:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $15, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_15:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rax,%rax,2), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_15:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $15, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_15:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi,4), %eax
+; X64-NEXT: leal (%rax,%rax,2), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 15
ret i32 %mul
}
@@ -778,47 +248,11 @@ define i32 @test_mul_by_16(i32 %x) {
; X86-NEXT: shll $4, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_16:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: shll $4, %edi # sched: [1:0.50]
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_16:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: shll $4, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_16:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: shll $4, %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_16:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: shll $4, %edi # sched: [1:0.50]
-; HSW-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.25]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_16:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: shll $4, %edi # sched: [1:0.50]
-; JAG-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.17]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_16:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: shll $4, %edi # sched: [1:1.00]
-; X64-SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_16:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: shll $4, %edi # sched: [1:1.00]
-; SLM-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.50]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_16:
+; X64: # BB#0:
+; X64-NEXT: shll $4, %edi
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 16
ret i32 %mul
}
@@ -832,49 +266,13 @@ define i32 @test_mul_by_17(i32 %x) {
; X86-NEXT: addl %ecx, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_17:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: shll $4, %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rdi), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_17:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: shll $4, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rdi), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_17:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $17, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_17:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $17, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_17:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $17, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_17:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: shll $4, %eax # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rax,%rdi), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_17:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $17, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_17:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shll $4, %eax
+; X64-NEXT: leal (%rax,%rdi), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 17
ret i32 %mul
}
@@ -887,46 +285,12 @@ define i32 @test_mul_by_18(i32 %x) {
; X86-NEXT: leal (%eax,%eax,8), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_18:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: addl %edi, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_18:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: addl %edi, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_18:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $18, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_18:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $18, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_18:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $18, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_18:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: addl %edi, %edi # sched: [1:0.50]
-; X64-SLM-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_18:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $18, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_18:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: addl %edi, %edi
+; X64-NEXT: leal (%rdi,%rdi,8), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 18
ret i32 %mul
}
@@ -934,54 +298,13 @@ define i32 @test_mul_by_18(i32 %x) {
define i32 @test_mul_by_19(i32 %x) {
; X86-LABEL: test_mul_by_19:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal (%eax,%eax,4), %ecx
-; X86-NEXT: shll $2, %ecx
-; X86-NEXT: subl %ecx, %eax
+; X86-NEXT: imull $19, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_19:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: shll $2, %eax # sched: [1:0.50]
-; X64-HSW-NEXT: subl %eax, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_19:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: shll $2, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: subl %eax, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_19:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $19, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_19:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $19, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_19:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $19, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_19:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $19, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_19:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $19, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_19:
+; X64: # BB#0:
+; X64-NEXT: imull $19, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 19
ret i32 %mul
}
@@ -994,46 +317,12 @@ define i32 @test_mul_by_20(i32 %x) {
; X86-NEXT: leal (%eax,%eax,4), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_20:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: shll $2, %edi # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_20:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: shll $2, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_20:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $20, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_20:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $20, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_20:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $20, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_20:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: shll $2, %edi # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_20:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $20, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_20:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: shll $2, %edi
+; X64-NEXT: leal (%rdi,%rdi,4), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 20
ret i32 %mul
}
@@ -1041,49 +330,13 @@ define i32 @test_mul_by_20(i32 %x) {
define i32 @test_mul_by_21(i32 %x) {
; X86-LABEL: test_mul_by_21:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal (%eax,%eax,4), %ecx
-; X86-NEXT: leal (%eax,%ecx,4), %eax
+; X86-NEXT: imull $21, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_21:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_21:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_21:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $21, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_21:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $21, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_21:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $21, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_21:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $21, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_21:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $21, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_21:
+; X64: # BB#0:
+; X64-NEXT: imull $21, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 21
ret i32 %mul
}
@@ -1091,52 +344,13 @@ define i32 @test_mul_by_21(i32 %x) {
define i32 @test_mul_by_22(i32 %x) {
; X86-LABEL: test_mul_by_22:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT: leal (%ecx,%ecx,4), %eax
-; X86-NEXT: leal (%ecx,%eax,4), %eax
-; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: imull $22, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_22:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: addl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_22:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rax,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_22:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $22, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_22:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $22, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_22:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $22, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_22:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $22, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_22:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $22, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_22:
+; X64: # BB#0:
+; X64-NEXT: imull $22, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 22
ret i32 %mul
}
@@ -1144,54 +358,13 @@ define i32 @test_mul_by_22(i32 %x) {
define i32 @test_mul_by_23(i32 %x) {
; X86-LABEL: test_mul_by_23:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal (%eax,%eax,2), %ecx
-; X86-NEXT: shll $3, %ecx
-; X86-NEXT: subl %ecx, %eax
+; X86-NEXT: imull $23, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_23:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: shll $3, %eax # sched: [1:0.50]
-; X64-HSW-NEXT: subl %eax, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_23:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: shll $3, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: subl %eax, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_23:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $23, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_23:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $23, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_23:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $23, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_23:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $23, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_23:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $23, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_23:
+; X64: # BB#0:
+; X64-NEXT: imull $23, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 23
ret i32 %mul
}
@@ -1204,46 +377,12 @@ define i32 @test_mul_by_24(i32 %x) {
; X86-NEXT: leal (%eax,%eax,2), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_24:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: shll $3, %edi # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_24:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: shll $3, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_24:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $24, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_24:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $24, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_24:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $24, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_24:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: shll $3, %edi # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rdi,%rdi,2), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_24:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $24, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_24:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: shll $3, %edi
+; X64-NEXT: leal (%rdi,%rdi,2), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 24
ret i32 %mul
}
@@ -1256,46 +395,12 @@ define i32 @test_mul_by_25(i32 %x) {
; X86-NEXT: leal (%eax,%eax,4), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_25:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rax,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_25:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rax,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_25:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $25, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_25:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $25, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_25:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $25, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_25:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rax,%rax,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_25:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $25, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_25:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi,4), %eax
+; X64-NEXT: leal (%rax,%rax,4), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 25
ret i32 %mul
}
@@ -1303,54 +408,13 @@ define i32 @test_mul_by_25(i32 %x) {
define i32 @test_mul_by_26(i32 %x) {
; X86-LABEL: test_mul_by_26:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal (%eax,%eax,8), %ecx
-; X86-NEXT: leal (%ecx,%ecx,2), %ecx
-; X86-NEXT: subl %ecx, %eax
+; X86-NEXT: imull $26, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_26:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: subl %eax, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_26:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: subl %eax, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_26:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $26, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_26:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $26, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_26:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $26, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_26:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $26, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_26:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $26, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_26:
+; X64: # BB#0:
+; X64-NEXT: imull $26, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 26
ret i32 %mul
}
@@ -1363,46 +427,12 @@ define i32 @test_mul_by_27(i32 %x) {
; X86-NEXT: leal (%eax,%eax,2), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_27:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_27:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_27:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $27, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_27:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $27, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_27:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $27, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_27:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: leal (%rax,%rax,2), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_27:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $27, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_27:
+; X64: # BB#0:
+; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
+; X64-NEXT: leal (%rdi,%rdi,8), %eax
+; X64-NEXT: leal (%rax,%rax,2), %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 27
ret i32 %mul
}
@@ -1410,52 +440,13 @@ define i32 @test_mul_by_27(i32 %x) {
define i32 @test_mul_by_28(i32 %x) {
; X86-LABEL: test_mul_by_28:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT: leal (%ecx,%ecx,8), %eax
-; X86-NEXT: leal (%eax,%eax,2), %eax
-; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: imull $28, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_28:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: addl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_28:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_28:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $28, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_28:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $28, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_28:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $28, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_28:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $28, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_28:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $28, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_28:
+; X64: # BB#0:
+; X64-NEXT: imull $28, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 28
ret i32 %mul
}
@@ -1463,55 +454,13 @@ define i32 @test_mul_by_28(i32 %x) {
define i32 @test_mul_by_29(i32 %x) {
; X86-LABEL: test_mul_by_29:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT: leal (%ecx,%ecx,8), %eax
-; X86-NEXT: leal (%eax,%eax,2), %eax
-; X86-NEXT: addl %ecx, %eax
-; X86-NEXT: addl %ecx, %eax
+; X86-NEXT: imull $29, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_29:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: addl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: addl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_29:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal (%rdi,%rdi,8), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: leal (%rax,%rax,2), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: addl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_29:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $29, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_29:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $29, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_29:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $29, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_29:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $29, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_29:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $29, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_29:
+; X64: # BB#0:
+; X64-NEXT: imull $29, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 29
ret i32 %mul
}
@@ -1519,58 +468,13 @@ define i32 @test_mul_by_29(i32 %x) {
define i32 @test_mul_by_30(i32 %x) {
; X86-LABEL: test_mul_by_30:
; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: movl %eax, %ecx
-; X86-NEXT: shll $5, %ecx
-; X86-NEXT: movl %eax, %edx
-; X86-NEXT: subl %ecx, %edx
-; X86-NEXT: subl %edx, %eax
+; X86-NEXT: imull $30, {{[0-9]+}}(%esp), %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_30:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: shll $5, %eax # sched: [1:0.50]
-; X64-HSW-NEXT: movl %edi, %ecx # sched: [1:0.25]
-; X64-HSW-NEXT: subl %eax, %ecx # sched: [1:0.25]
-; X64-HSW-NEXT: subl %ecx, %edi # sched: [1:0.25]
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_30:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: movl %edi, %ecx # sched: [1:0.17]
-; X64-JAG-NEXT: shll $5, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: subl %eax, %ecx # sched: [1:0.50]
-; X64-JAG-NEXT: subl %ecx, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_30:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $30, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_30:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $30, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_30:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $30, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_30:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: imull $30, %edi, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_30:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $30, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_30:
+; X64: # BB#0:
+; X64-NEXT: imull $30, %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 30
ret i32 %mul
}
@@ -1584,46 +488,12 @@ define i32 @test_mul_by_31(i32 %x) {
; X86-NEXT: subl %ecx, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_31:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: shll $5, %eax # sched: [1:0.50]
-; X64-HSW-NEXT: subl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_31:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: shll $5, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: subl %edi, %eax # sched: [1:0.50]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_31:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: imull $31, {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_31:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: imull $31, %edi, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_31:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: imull $31, %edi, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_31:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: shll $5, %eax # sched: [1:1.00]
-; X64-SLM-NEXT: subl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_31:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: imull $31, %edi, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_31:
+; X64: # BB#0:
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: shll $5, %eax
+; X64-NEXT: subl %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 31
ret i32 %mul
}
@@ -1635,124 +505,11 @@ define i32 @test_mul_by_32(i32 %x) {
; X86-NEXT: shll $5, %eax
; X86-NEXT: retl
;
-; X64-HSW-LABEL: test_mul_by_32:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: shll $5, %edi # sched: [1:0.50]
-; X64-HSW-NEXT: movl %edi, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_by_32:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: shll $5, %edi # sched: [1:0.50]
-; X64-JAG-NEXT: movl %edi, %eax # sched: [1:0.17]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_by_32:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: shll $5, %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_by_32:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: shll $5, %edi # sched: [1:0.50]
-; HSW-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.25]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_by_32:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: shll $5, %edi # sched: [1:0.50]
-; JAG-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.17]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_by_32:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: shll $5, %edi # sched: [1:1.00]
-; X64-SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_by_32:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: shll $5, %edi # sched: [1:1.00]
-; SLM-NOOPT-NEXT: movl %edi, %eax # sched: [1:0.50]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
+; X64-LABEL: test_mul_by_32:
+; X64: # BB#0:
+; X64-NEXT: shll $5, %edi
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
%mul = mul nsw i32 %x, 32
ret i32 %mul
}
-
-; (x*9+42)*(x*5+2)
-define i32 @test_mul_spec(i32 %x) nounwind {
-; X86-LABEL: test_mul_spec:
-; X86: # BB#0:
-; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NEXT: leal 42(%eax,%eax,8), %ecx
-; X86-NEXT: leal 2(%eax,%eax,4), %eax
-; X86-NEXT: imull %ecx, %eax
-; X86-NEXT: retl
-;
-; X64-HSW-LABEL: test_mul_spec:
-; X64-HSW: # BB#0:
-; X64-HSW-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-HSW-NEXT: leal (%rdi,%rdi,8), %ecx # sched: [1:0.50]
-; X64-HSW-NEXT: addl $42, %ecx # sched: [1:0.25]
-; X64-HSW-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-HSW-NEXT: addl $2, %eax # sched: [1:0.25]
-; X64-HSW-NEXT: imull %ecx, %eax # sched: [4:1.00]
-; X64-HSW-NEXT: retq # sched: [1:1.00]
-;
-; X64-JAG-LABEL: test_mul_spec:
-; X64-JAG: # BB#0:
-; X64-JAG-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-JAG-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [1:0.50]
-; X64-JAG-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [1:0.50]
-; X64-JAG-NEXT: imull %ecx, %eax # sched: [3:1.00]
-; X64-JAG-NEXT: retq # sched: [4:1.00]
-;
-; X86-NOOPT-LABEL: test_mul_spec:
-; X86-NOOPT: # BB#0:
-; X86-NOOPT-NEXT: movl {{[0-9]+}}(%esp), %eax
-; X86-NOOPT-NEXT: leal 42(%eax,%eax,8), %ecx
-; X86-NOOPT-NEXT: leal 2(%eax,%eax,4), %eax
-; X86-NOOPT-NEXT: imull %ecx, %eax
-; X86-NOOPT-NEXT: retl
-;
-; HSW-NOOPT-LABEL: test_mul_spec:
-; HSW-NOOPT: # BB#0:
-; HSW-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; HSW-NOOPT-NEXT: leal (%rdi,%rdi,8), %ecx # sched: [1:0.50]
-; HSW-NOOPT-NEXT: addl $42, %ecx # sched: [1:0.25]
-; HSW-NOOPT-NEXT: leal (%rdi,%rdi,4), %eax # sched: [1:0.50]
-; HSW-NOOPT-NEXT: addl $2, %eax # sched: [1:0.25]
-; HSW-NOOPT-NEXT: imull %ecx, %eax # sched: [4:1.00]
-; HSW-NOOPT-NEXT: retq # sched: [1:1.00]
-;
-; JAG-NOOPT-LABEL: test_mul_spec:
-; JAG-NOOPT: # BB#0:
-; JAG-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; JAG-NOOPT-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [1:0.50]
-; JAG-NOOPT-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [1:0.50]
-; JAG-NOOPT-NEXT: imull %ecx, %eax # sched: [3:1.00]
-; JAG-NOOPT-NEXT: retq # sched: [4:1.00]
-;
-; X64-SLM-LABEL: test_mul_spec:
-; X64-SLM: # BB#0:
-; X64-SLM-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; X64-SLM-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [1:1.00]
-; X64-SLM-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [1:1.00]
-; X64-SLM-NEXT: imull %ecx, %eax # sched: [3:1.00]
-; X64-SLM-NEXT: retq # sched: [4:1.00]
-;
-; SLM-NOOPT-LABEL: test_mul_spec:
-; SLM-NOOPT: # BB#0:
-; SLM-NOOPT-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def>
-; SLM-NOOPT-NEXT: leal 42(%rdi,%rdi,8), %ecx # sched: [1:1.00]
-; SLM-NOOPT-NEXT: leal 2(%rdi,%rdi,4), %eax # sched: [1:1.00]
-; SLM-NOOPT-NEXT: imull %ecx, %eax # sched: [3:1.00]
-; SLM-NOOPT-NEXT: retq # sched: [4:1.00]
- %mul = mul nsw i32 %x, 9
- %add = add nsw i32 %mul, 42
- %mul2 = mul nsw i32 %x, 5
- %add2 = add nsw i32 %mul2, 2
- %mul3 = mul nsw i32 %add, %add2
- ret i32 %mul3
-}