diff options
author | Craig Topper <craig.topper@intel.com> | 2019-04-02 17:13:03 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2019-04-02 17:13:03 +0000 |
commit | 0d3a533270fef3528814ad71a9fca43b9c55819a (patch) | |
tree | 948d9bc8beeb3db52cceceaea7c1345667bb9c93 | |
parent | 41a7950cfb153953096cb37c5bb7a16b8d1072b1 (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/fixup-lea.ll | 74 |
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 |