Skip to content

Commit

Permalink
[X86] Fix VZEROUPPER scheduling info on SNB,HSW,BDW,SXL,SKX.
Browse files Browse the repository at this point in the history
Summary:
Starting from SNB, VZEROUPPER is handled by the renamer and uses no proc resources.
After HSW, it also has zero latency.

This fixes PR35606.

To reproduce:
Uops:
  llvm-exegesis -mode=uops -opcode-name=VZEROUPPER
Latency:
  echo -e '#LLVM-EXEGESIS-DEFREG XMM0 1\n#LLVM-EXEGESIS-DEFREG XMM1 1\nvzeroupper' | /tmp/llvm-exegesis -mode=latency -snippets-file=-
  echo -e '#LLVM-EXEGESIS-DEFREG XMM0 1\n#LLVM-EXEGESIS-DEFREG XMM1 1\nvzeroupper\naddps %xmm0, %xmm1' | /tmp/llvm-exegesis -mode=latency -snippets-file=-

Reviewers: RKSimon, craig.topper, andreadb

Subscribers: gbedwell, llvm-commits

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

llvm-svn: 346482
  • Loading branch information
legrosbuffle committed Nov 9, 2018
1 parent fa9cf89 commit e6b727e
Show file tree
Hide file tree
Showing 19 changed files with 255 additions and 248 deletions.
6 changes: 3 additions & 3 deletions llvm/lib/Target/X86/X86SchedBroadwell.td
Expand Up @@ -878,10 +878,10 @@ def BWWriteResGroup45 : SchedWriteRes<[BWPort0156]> {
}
def: InstRW<[BWWriteResGroup45], (instrs FNCLEX)>;

def BWWriteResGroup46 : SchedWriteRes<[BWPort015,BWPort0156]> {
let Latency = 4;
def BWWriteResGroup46 : SchedWriteRes<[]> {
let Latency = 0;
let NumMicroOps = 4;
let ResourceCycles = [1,3];
let ResourceCycles = [];
}
def: InstRW<[BWWriteResGroup46], (instrs VZEROUPPER)>;

Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/Target/X86/X86SchedHaswell.td
Expand Up @@ -1408,10 +1408,10 @@ def HWWriteResGroup81 : SchedWriteRes<[HWPort0156]> {
}
def: InstRW<[HWWriteResGroup81], (instrs FNCLEX)>;

def HWWriteResGroup82 : SchedWriteRes<[HWPort015,HWPort0156]> {
let Latency = 4;
def HWWriteResGroup82 : SchedWriteRes<[]> {
let Latency = 0;
let NumMicroOps = 4;
let ResourceCycles = [1,3];
let ResourceCycles = [];
}
def: InstRW<[HWWriteResGroup82], (instrs VZEROUPPER)>;

Expand Down
7 changes: 7 additions & 0 deletions llvm/lib/Target/X86/X86SchedSandyBridge.td
Expand Up @@ -1112,6 +1112,13 @@ def SBWriteResGroupVzeroall : SchedWriteRes<[SBPort5]> {
}
def: InstRW<[SBWriteResGroupVzeroall], (instrs VZEROALL)>;

def SBWriteResGroupVzeroupper : SchedWriteRes<[]> {
let Latency = 1;
let NumMicroOps = 4;
let ResourceCycles = [];
}
def: InstRW<[SBWriteResGroupVzeroupper], (instrs VZEROUPPER)>;

def: InstRW<[WriteZero], (instrs CLC)>;

// Intruction variants handled by the renamer. These might not need execution
Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/Target/X86/X86SchedSkylakeClient.td
Expand Up @@ -897,10 +897,10 @@ def SKLWriteResGroup55 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
}
def: InstRW<[SKLWriteResGroup55], (instrs PAUSE)>;

def SKLWriteResGroup56 : SchedWriteRes<[SKLPort015,SKLPort0156]> {
let Latency = 4;
def SKLWriteResGroup56 : SchedWriteRes<[]> {
let Latency = 0;
let NumMicroOps = 4;
let ResourceCycles = [1,3];
let ResourceCycles = [];
}
def: InstRW<[SKLWriteResGroup56], (instrs VZEROUPPER)>;

Expand Down
6 changes: 3 additions & 3 deletions llvm/lib/Target/X86/X86SchedSkylakeServer.td
Expand Up @@ -1009,10 +1009,10 @@ def SKXWriteResGroup55 : SchedWriteRes<[SKXPort0156]> {
}
def: InstRW<[SKXWriteResGroup55], (instrs FNCLEX)>;

def SKXWriteResGroup56 : SchedWriteRes<[SKXPort015,SKXPort0156]> {
let Latency = 4;
def SKXWriteResGroup56 : SchedWriteRes<[]> {
let Latency = 0;
let NumMicroOps = 4;
let ResourceCycles = [1,3];
let ResourceCycles = [];
}
def: InstRW<[SKXWriteResGroup56], (instrs VZEROUPPER)>;

Expand Down

0 comments on commit e6b727e

Please sign in to comment.