From: Craig Topper Date: Tue, 2 Apr 2019 17:13:03 +0000 (+0000) Subject: [X86] Allow FixupLEAs to form INC/DEC under OptSize not just MinSize X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb181675d0e674f57f9cc6f173f2dbfea4ae731f;p=llvm [X86] Allow FixupLEAs to form INC/DEC under OptSize not just MinSize This matches our usual INC/DEC heuristic used during isel. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357497 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86FixupLEAs.cpp b/lib/Target/X86/X86FixupLEAs.cpp index 0e797378d5e..0d8f4a4f641 100644 --- a/lib/Target/X86/X86FixupLEAs.cpp +++ b/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/test/CodeGen/X86/fixup-lea.ll b/test/CodeGen/X86/fixup-lea.ll index 22e0d709265..da9a1613fef 100644 --- a/test/CodeGen/X86/fixup-lea.ll +++ b/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