From: Craig Topper Date: Wed, 4 Apr 2018 17:54:19 +0000 (+0000) Subject: [X86] Separate BSWAP32r and BSWAP64r scheduling data in SandyBridge/Haswell/Broadwell... X-Git-Tag: llvmorg-7.0.0-rc1~8982 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=498875fab0d0912721fb9867a6728225363560af;p=platform%2Fupstream%2Fllvm.git [X86] Separate BSWAP32r and BSWAP64r scheduling data in SandyBridge/Haswell/Broadwell/Skylake scheduler models. The BSWAP64r version is 2 uops and BSWAP32r is only 1 uop. The regular expressions also looked for a non-existant BSWAP16r. llvm-svn: 329211 --- diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td index 8832d5a..d3fb25d 100755 --- a/llvm/lib/Target/X86/X86SchedBroadwell.td +++ b/llvm/lib/Target/X86/X86SchedBroadwell.td @@ -786,7 +786,14 @@ def BWWriteResGroup19 : SchedWriteRes<[BWPort06,BWPort15]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[BWWriteResGroup19], (instregex "BSWAP(16|32|64)r")>; +def: InstRW<[BWWriteResGroup19], (instrs BSWAP64r)>; + +def BWWriteResGroup19_1 : SchedWriteRes<[BWPort15]> { + let Latency = 1; + let NumMicroOps = 1; + let ResourceCycles = [1]; +} +def: InstRW<[BWWriteResGroup19_1], (instrs BSWAP32r)>; def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> { let Latency = 2; diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td index 622a90a..8007f0c 100644 --- a/llvm/lib/Target/X86/X86SchedHaswell.td +++ b/llvm/lib/Target/X86/X86SchedHaswell.td @@ -1611,7 +1611,14 @@ def HWWriteResGroup34 : SchedWriteRes<[HWPort06,HWPort15]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[HWWriteResGroup34], (instregex "BSWAP(16|32|64)r")>; +def: InstRW<[HWWriteResGroup34], (instrs BSWAP64r)>; + +def HWWriteResGroup34_1 : SchedWriteRes<[HWPort15]> { + let Latency = 1; + let NumMicroOps = 1; + let ResourceCycles = [1]; +} +def: InstRW<[HWWriteResGroup34_1], (instrs BSWAP32r)>; def HWWriteResGroup35 : SchedWriteRes<[HWPort06,HWPort0156]> { let Latency = 2; diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td index d9b2a64..1252835 100644 --- a/llvm/lib/Target/X86/X86SchedSandyBridge.td +++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td @@ -621,7 +621,14 @@ def SBWriteResGroup16 : SchedWriteRes<[SBPort1,SBPort05]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SBWriteResGroup16], (instregex "BSWAP(16|32|64)r")>; +def: InstRW<[SBWriteResGroup16], (instrs BSWAP64r)>; + +def SBWriteResGroup16_1 : SchedWriteRes<[SBPort1]> { + let Latency = 1; + let NumMicroOps = 1; + let ResourceCycles = [1]; +} +def: InstRW<[SBWriteResGroup16_1], (instrs BSWAP32r)>; def SBWriteResGroup17 : SchedWriteRes<[SBPort5,SBPort15]> { let Latency = 2; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td index 465afb3..407b1cc 100644 --- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td @@ -808,7 +808,14 @@ def SKLWriteResGroup22 : SchedWriteRes<[SKLPort06,SKLPort15]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKLWriteResGroup22], (instregex "BSWAP(16|32|64)r")>; +def: InstRW<[SKLWriteResGroup22], (instrs BSWAP64r)>; + +def SKLWriteResGroup22_1 : SchedWriteRes<[SKLPort15]> { + let Latency = 1; + let NumMicroOps = 1; + let ResourceCycles = [1]; +} +def: InstRW<[SKLWriteResGroup22_1], (instrs BSWAP32r)>; def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> { let Latency = 2; diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td index ee74a35..aab1b39 100755 --- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td +++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td @@ -1603,7 +1603,14 @@ def SKXWriteResGroup22 : SchedWriteRes<[SKXPort06,SKXPort15]> { let NumMicroOps = 2; let ResourceCycles = [1,1]; } -def: InstRW<[SKXWriteResGroup22], (instregex "BSWAP(16|32|64)r")>; +def: InstRW<[SKXWriteResGroup22], (instrs BSWAP64r)>; + +def SKXWriteResGroup22_1 : SchedWriteRes<[SKXPort15]> { + let Latency = 1; + let NumMicroOps = 1; + let ResourceCycles = [1]; +} +def: InstRW<[SKXWriteResGroup22_1], (instrs BSWAP32r)>; def SKXWriteResGroup23 : SchedWriteRes<[SKXPort06,SKXPort0156]> { let Latency = 2; diff --git a/llvm/test/CodeGen/X86/schedule-x86_64.ll b/llvm/test/CodeGen/X86/schedule-x86_64.ll index f85badd..9e3ce64 100644 --- a/llvm/test/CodeGen/X86/schedule-x86_64.ll +++ b/llvm/test/CodeGen/X86/schedule-x86_64.ll @@ -2541,7 +2541,7 @@ define i64 @test_bsr64(i64 %a0, i64* %a1) optsize { define i32 @test_bswap32(i32 %a0) optsize { ; GENERIC-LABEL: test_bswap32: ; GENERIC: # %bb.0: -; GENERIC-NEXT: bswapl %edi # sched: [2:1.00] +; GENERIC-NEXT: bswapl %edi # sched: [1:1.00] ; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -2559,31 +2559,31 @@ define i32 @test_bswap32(i32 %a0) optsize { ; ; SANDY-LABEL: test_bswap32: ; SANDY: # %bb.0: -; SANDY-NEXT: bswapl %edi # sched: [2:1.00] +; SANDY-NEXT: bswapl %edi # sched: [1:1.00] ; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33] ; SANDY-NEXT: retq # sched: [1:1.00] ; ; HASWELL-LABEL: test_bswap32: ; HASWELL: # %bb.0: -; HASWELL-NEXT: bswapl %edi # sched: [2:0.50] +; HASWELL-NEXT: bswapl %edi # sched: [1:0.50] ; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] ; HASWELL-NEXT: retq # sched: [7:1.00] ; ; BROADWELL-LABEL: test_bswap32: ; BROADWELL: # %bb.0: -; BROADWELL-NEXT: bswapl %edi # sched: [2:0.50] +; BROADWELL-NEXT: bswapl %edi # sched: [1:0.50] ; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25] ; BROADWELL-NEXT: retq # sched: [7:1.00] ; ; SKYLAKE-LABEL: test_bswap32: ; SKYLAKE: # %bb.0: -; SKYLAKE-NEXT: bswapl %edi # sched: [2:0.50] +; SKYLAKE-NEXT: bswapl %edi # sched: [1:0.50] ; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] ; SKYLAKE-NEXT: retq # sched: [7:1.00] ; ; SKX-LABEL: test_bswap32: ; SKX: # %bb.0: -; SKX-NEXT: bswapl %edi # sched: [2:0.50] +; SKX-NEXT: bswapl %edi # sched: [1:0.50] ; SKX-NEXT: movl %edi, %eax # sched: [1:0.25] ; SKX-NEXT: retq # sched: [7:1.00] ;