Skip to content

Commit

Permalink
[X86] Remove FeatureSlowIncDec from Sandy Bridge and later Intel Core…
Browse files Browse the repository at this point in the history
… CPUs

Summary:
Inc and Dec were at one point slow on Intel CPUs due to their tendency to cause partial flag stalls on P6 derived CPU cores. This is because these instructions are defined to preserve the carry flag. This partial flag stall issue persisted until Sandy Bridge when flag merging was changed to be handled as a data dependency instead of as a stall until retirement. Sandy Bridge and later CPUs rename the C flag separately from OSPAZ so there is no flag merge needed on INC/DEC to preserve the C flag.

Given these improvements I don't know why INC/DEC was ever considered slow on Sandy Bridge. If anything they should have been disabled on the earlier CPUs instead.

Note after this patch, INC/DEC are still considered slow on Silvermont, Goldmont, Knights Landing and our generic "x86-64" CPU.

Reviewers: spatel, RKSimon, chandlerc

Reviewed By: chandlerc

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D58412

llvm-svn: 354436
  • Loading branch information
topperc committed Feb 20, 2019
1 parent a07f1b9 commit e4025c5
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 4 deletions.
1 change: 0 additions & 1 deletion llvm/lib/Target/X86/X86.td
Original file line number Diff line number Diff line change
Expand Up @@ -733,7 +733,6 @@ def SNBFeatures : ProcessorFeatures<[], [
FeatureSlow3OpsLEA,
FeatureFastScalarFSQRT,
FeatureFastSHLDRotate,
FeatureSlowIncDec,
FeatureMergeToThreeWayBranch,
FeatureMacroFusion
]>;
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/mul-constant-result.ll
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ define i32 @mult(i32, i32) local_unnamed_addr #0 {
; X64-HSW-NEXT: cmovgl %ecx, %eax
; X64-HSW-NEXT: testl %esi, %esi
; X64-HSW-NEXT: cmovel %ecx, %eax
; X64-HSW-NEXT: addl $-1, %edi
; X64-HSW-NEXT: decl %edi
; X64-HSW-NEXT: cmpl $31, %edi
; X64-HSW-NEXT: ja .LBB0_36
; X64-HSW-NEXT: # %bb.1:
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/X86/rdrand.ll
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ define void @loop(i32* %p, i32 %n) nounwind {
; X86-NEXT: # =>This Inner Loop Header: Depth=1
; X86-NEXT: rdrandl %esi
; X86-NEXT: movl %esi, (%ecx,%edx,4)
; X86-NEXT: addl $1, %edx
; X86-NEXT: incl %edx
; X86-NEXT: cmpl %edx, %eax
; X86-NEXT: jne .LBB3_2
; X86-NEXT: .LBB3_3: # %while.end
Expand All @@ -113,7 +113,7 @@ define void @loop(i32* %p, i32 %n) nounwind {
; X64-NEXT: # =>This Inner Loop Header: Depth=1
; X64-NEXT: rdrandl %edx
; X64-NEXT: movl %edx, (%rdi,%rcx,4)
; X64-NEXT: addq $1, %rcx
; X64-NEXT: incq %rcx
; X64-NEXT: cmpl %ecx, %eax
; X64-NEXT: jne .LBB3_2
; X64-NEXT: .LBB3_3: # %while.end
Expand Down

0 comments on commit e4025c5

Please sign in to comment.