summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2019-04-02 17:13:03 +0000
committerCraig Topper <craig.topper@intel.com>2019-04-02 17:13:03 +0000
commit0d3a533270fef3528814ad71a9fca43b9c55819a (patch)
tree948d9bc8beeb3db52cceceaea7c1345667bb9c93
parent41a7950cfb153953096cb37c5bb7a16b8d1072b1 (diff)
downloadbcm5719-llvm-0d3a533270fef3528814ad71a9fca43b9c55819a.tar.gz
bcm5719-llvm-0d3a533270fef3528814ad71a9fca43b9c55819a.zip
[X86] Allow FixupLEAs to form INC/DEC under OptSize not just MinSize
This matches our usual INC/DEC heuristic used during isel. llvm-svn: 357497
-rw-r--r--llvm/lib/Target/X86/X86FixupLEAs.cpp2
-rw-r--r--llvm/test/CodeGen/X86/fixup-lea.ll74
2 files changed, 25 insertions, 51 deletions
diff --git a/llvm/lib/Target/X86/X86FixupLEAs.cpp b/llvm/lib/Target/X86/X86FixupLEAs.cpp
index 0e797378d5e..0d8f4a4f641 100644
--- a/llvm/lib/Target/X86/X86FixupLEAs.cpp
+++ b/llvm/lib/Target/X86/X86FixupLEAs.cpp
@@ -194,7 +194,7 @@ bool FixupLEAPass::runOnMachineFunction(MachineFunction &Func) {
bool IsSlowLEA = ST.slowLEA();
bool IsSlow3OpsLEA = ST.slow3OpsLEA();
- OptIncDec = !ST.slowIncDec() || Func.getFunction().optForMinSize();
+ OptIncDec = !ST.slowIncDec() || Func.getFunction().optForSize();
OptLEA = ST.LEAusesAG() || IsSlowLEA || IsSlow3OpsLEA;
if (!OptLEA && !OptIncDec)
diff --git a/llvm/test/CodeGen/X86/fixup-lea.ll b/llvm/test/CodeGen/X86/fixup-lea.ll
index 22e0d709265..da9a1613fef 100644
--- a/llvm/test/CodeGen/X86/fixup-lea.ll
+++ b/llvm/test/CodeGen/X86/fixup-lea.ll
@@ -56,31 +56,18 @@ for.end:
}
define void @foo_optsize(i32 inreg %dns) optsize {
-; SLOW-LABEL: foo_optsize:
-; SLOW: # %bb.0: # %entry
-; SLOW-NEXT: xorl %ecx, %ecx
-; SLOW-NEXT: decl %ecx
-; SLOW-NEXT: .LBB2_1: # %for.body
-; SLOW-NEXT: # =>This Inner Loop Header: Depth=1
-; SLOW-NEXT: movzwl %cx, %edx
-; SLOW-NEXT: decl %ecx
-; SLOW-NEXT: cmpl %eax, %edx
-; SLOW-NEXT: jl .LBB2_1
-; SLOW-NEXT: # %bb.2: # %for.end
-; SLOW-NEXT: retl
-;
-; FAST-LABEL: foo_optsize:
-; FAST: # %bb.0: # %entry
-; FAST-NEXT: xorl %ecx, %ecx
-; FAST-NEXT: decl %ecx
-; FAST-NEXT: .LBB2_1: # %for.body
-; FAST-NEXT: # =>This Inner Loop Header: Depth=1
-; FAST-NEXT: movzwl %cx, %edx
-; FAST-NEXT: leal -1(%ecx), %ecx
-; FAST-NEXT: cmpl %eax, %edx
-; FAST-NEXT: jl .LBB2_1
-; FAST-NEXT: # %bb.2: # %for.end
-; FAST-NEXT: retl
+; CHECK-LABEL: foo_optsize:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: xorl %ecx, %ecx
+; CHECK-NEXT: decl %ecx
+; CHECK-NEXT: .LBB2_1: # %for.body
+; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT: movzwl %cx, %edx
+; CHECK-NEXT: decl %ecx
+; CHECK-NEXT: cmpl %eax, %edx
+; CHECK-NEXT: jl .LBB2_1
+; CHECK-NEXT: # %bb.2: # %for.end
+; CHECK-NEXT: retl
entry:
br label %for.body
@@ -96,31 +83,18 @@ for.end:
}
define void @bar_optsize(i32 inreg %dns) optsize {
-; SLOW-LABEL: bar_optsize:
-; SLOW: # %bb.0: # %entry
-; SLOW-NEXT: xorl %ecx, %ecx
-; SLOW-NEXT: incl %ecx
-; SLOW-NEXT: .LBB3_1: # %for.body
-; SLOW-NEXT: # =>This Inner Loop Header: Depth=1
-; SLOW-NEXT: movzwl %cx, %edx
-; SLOW-NEXT: incl %ecx
-; SLOW-NEXT: cmpl %eax, %edx
-; SLOW-NEXT: jl .LBB3_1
-; SLOW-NEXT: # %bb.2: # %for.end
-; SLOW-NEXT: retl
-;
-; FAST-LABEL: bar_optsize:
-; FAST: # %bb.0: # %entry
-; FAST-NEXT: xorl %ecx, %ecx
-; FAST-NEXT: incl %ecx
-; FAST-NEXT: .LBB3_1: # %for.body
-; FAST-NEXT: # =>This Inner Loop Header: Depth=1
-; FAST-NEXT: movzwl %cx, %edx
-; FAST-NEXT: leal 1(%ecx), %ecx
-; FAST-NEXT: cmpl %eax, %edx
-; FAST-NEXT: jl .LBB3_1
-; FAST-NEXT: # %bb.2: # %for.end
-; FAST-NEXT: retl
+; CHECK-LABEL: bar_optsize:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: xorl %ecx, %ecx
+; CHECK-NEXT: incl %ecx
+; CHECK-NEXT: .LBB3_1: # %for.body
+; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT: movzwl %cx, %edx
+; CHECK-NEXT: incl %ecx
+; CHECK-NEXT: cmpl %eax, %edx
+; CHECK-NEXT: jl .LBB3_1
+; CHECK-NEXT: # %bb.2: # %for.end
+; CHECK-NEXT: retl
entry:
br label %for.body
OpenPOWER on IntegriCloud