Index: llvm/trunk/lib/Target/X86/X86SchedBroadwell.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedBroadwell.td +++ llvm/trunk/lib/Target/X86/X86SchedBroadwell.td @@ -1682,5 +1682,7 @@ } def: InstRW<[BWWriteResGroup202], (instrs FSTENVm)>; +def: InstRW<[WriteZero], (instrs CLC)>; + } // SchedModel Index: llvm/trunk/lib/Target/X86/X86SchedHaswell.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedHaswell.td +++ llvm/trunk/lib/Target/X86/X86SchedHaswell.td @@ -866,7 +866,7 @@ let ResourceCycles = [1]; } def: InstRW<[HWWriteResGroup10], (instrs CBW, CWDE, CDQE, - CLC, CMC, STC)>; + CMC, STC)>; def: InstRW<[HWWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data def: InstRW<[HWWriteResGroup10], (instregex "NOOP", "SGDT64m", @@ -1958,4 +1958,6 @@ def: InstRW<[HWWriteResGroup192], (instrs VGATHERQPSrm, VGATHERDPSrm)>; +def: InstRW<[WriteZero], (instrs CLC)>; + } // SchedModel Index: llvm/trunk/lib/Target/X86/X86SchedSandyBridge.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedSandyBridge.td +++ llvm/trunk/lib/Target/X86/X86SchedSandyBridge.td @@ -1144,4 +1144,6 @@ } def: InstRW<[SBWriteResGroup131], (instregex "DIV(R?)_FI(16|32)m")>; +def: InstRW<[WriteZero], (instrs CLC)>; + } // SchedModel Index: llvm/trunk/lib/Target/X86/X86SchedSkylakeClient.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedSkylakeClient.td +++ llvm/trunk/lib/Target/X86/X86SchedSkylakeClient.td @@ -584,7 +584,7 @@ let ResourceCycles = [1]; } def: InstRW<[SKLWriteResGroup10], (instrs CBW, CWDE, CDQE, - CLC, CMC, STC)>; + CMC, STC)>; def: InstRW<[SKLWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data def: InstRW<[SKLWriteResGroup10], (instregex "NOOP", "SGDT64m", @@ -1839,4 +1839,6 @@ } def: InstRW<[SKLWriteResGroup223], (instrs FSTENVm)>; +def: InstRW<[WriteZero], (instrs CLC)>; + } // SchedModel Index: llvm/trunk/lib/Target/X86/X86SchedSkylakeServer.td =================================================================== --- llvm/trunk/lib/Target/X86/X86SchedSkylakeServer.td +++ llvm/trunk/lib/Target/X86/X86SchedSkylakeServer.td @@ -606,7 +606,7 @@ let ResourceCycles = [1]; } def: InstRW<[SKXWriteResGroup10], (instrs CBW, CWDE, CDQE, - CLC, CMC, STC)>; + CMC, STC)>; def: InstRW<[SKXWriteResGroup10], (instrs LAHF, SAHF)>; // TODO: This doesn't match Agner's data def: InstRW<[SKXWriteResGroup10], (instregex "NOOP", "SGDT64m", @@ -2550,4 +2550,7 @@ let ResourceCycles = [1,3]; } def: InstRW<[SKXWriteResGroup267], (instrs PAUSE)>; + +def: InstRW<[WriteZero], (instrs CLC)>; + } // SchedModel Index: llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll =================================================================== --- llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll +++ llvm/trunk/test/CodeGen/X86/schedule-x86_64.ll @@ -3465,7 +3465,7 @@ ; GENERIC-LABEL: test_clc_cld_cmc: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: clc # sched: [1:0.33] +; GENERIC-NEXT: clc # sched: [1:?] ; GENERIC-NEXT: cld # sched: [1:0.33] ; GENERIC-NEXT: cmc # sched: [1:0.33] ; GENERIC-NEXT: #NO_APP @@ -3492,7 +3492,7 @@ ; SANDY-LABEL: test_clc_cld_cmc: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: clc # sched: [1:0.33] +; SANDY-NEXT: clc # sched: [1:?] ; SANDY-NEXT: cld # sched: [1:0.33] ; SANDY-NEXT: cmc # sched: [1:0.33] ; SANDY-NEXT: #NO_APP @@ -3501,7 +3501,7 @@ ; HASWELL-LABEL: test_clc_cld_cmc: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: clc # sched: [1:0.25] +; HASWELL-NEXT: clc # sched: [1:?] ; HASWELL-NEXT: cld # sched: [3:1.00] ; HASWELL-NEXT: cmc # sched: [1:0.25] ; HASWELL-NEXT: #NO_APP @@ -3510,7 +3510,7 @@ ; BROADWELL-LABEL: test_clc_cld_cmc: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: clc # sched: [1:0.25] +; BROADWELL-NEXT: clc # sched: [1:?] ; BROADWELL-NEXT: cld # sched: [3:1.00] ; BROADWELL-NEXT: cmc # sched: [1:0.25] ; BROADWELL-NEXT: #NO_APP @@ -3519,7 +3519,7 @@ ; SKYLAKE-LABEL: test_clc_cld_cmc: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: clc # sched: [1:0.25] +; SKYLAKE-NEXT: clc # sched: [1:?] ; SKYLAKE-NEXT: cld # sched: [3:1.00] ; SKYLAKE-NEXT: cmc # sched: [1:0.25] ; SKYLAKE-NEXT: #NO_APP @@ -3528,7 +3528,7 @@ ; SKX-LABEL: test_clc_cld_cmc: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: clc # sched: [1:0.25] +; SKX-NEXT: clc # sched: [1:?] ; SKX-NEXT: cld # sched: [3:1.00] ; SKX-NEXT: cmc # sched: [1:0.25] ; SKX-NEXT: #NO_APP Index: llvm/trunk/test/tools/llvm-mca/X86/Atom/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/Atom/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/Atom/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 1 2 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 1 2 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 1 2 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 0.50 * clc # CHECK-NEXT: 1 1 0.50 decb %dil # CHECK-NEXT: 1 1 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.50 decw %di @@ -1153,7 +1156,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] -# CHECK-NEXT: 1258.00 963.00 +# CHECK-NEXT: 1258.50 963.50 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] Instructions: @@ -1295,6 +1298,7 @@ # CHECK-NEXT: 1.00 1.00 btcq $7, (%rax) # CHECK-NEXT: 1.00 1.00 btrq $7, (%rax) # CHECK-NEXT: 1.00 1.00 btsq $7, (%rax) +# CHECK-NEXT: 0.50 0.50 clc # CHECK-NEXT: 0.50 0.50 decb %dil # CHECK-NEXT: 1.00 - decb (%rax) # CHECK-NEXT: 0.50 0.50 decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/Broadwell/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/Broadwell/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/Broadwell/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 4 6 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 4 6 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 4 6 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 - * clc # CHECK-NEXT: 1 1 0.25 decb %dil # CHECK-NEXT: 3 7 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.25 decw %di @@ -1303,6 +1306,7 @@ # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btcq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btrq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btsq $7, (%rax) +# CHECK-NEXT: - - - - - - - - - - clc # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decb %dil # CHECK-NEXT: - - 0.25 0.25 0.83 0.83 1.00 0.25 0.25 0.33 decb (%rax) # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 2 4 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 2 4 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 2 4 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 0.50 * clc # CHECK-NEXT: 1 1 0.50 decb %dil # CHECK-NEXT: 2 5 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.50 decw %di @@ -1165,7 +1168,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] -# CHECK-NEXT: 436.50 486.50 380.00 - - - - 263.00 64.00 195.00 - - - - +# CHECK-NEXT: 437.00 487.00 380.00 - - - - 263.00 64.00 195.00 - - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions: @@ -1307,6 +1310,7 @@ # CHECK-NEXT: 0.50 0.50 - - - - - 1.00 - 1.00 - - - - btcq $7, (%rax) # CHECK-NEXT: 0.50 0.50 - - - - - 1.00 - 1.00 - - - - btrq $7, (%rax) # CHECK-NEXT: 0.50 0.50 - - - - - 1.00 - 1.00 - - - - btsq $7, (%rax) +# CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - clc # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - decb %dil # CHECK-NEXT: 0.50 0.50 - - - - - 1.00 - 1.00 - - - - decb (%rax) # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/Haswell/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/Haswell/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/Haswell/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 4 7 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 4 7 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 4 7 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 - * clc # CHECK-NEXT: 1 1 0.25 decb %dil # CHECK-NEXT: 3 7 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.25 decw %di @@ -1303,6 +1306,7 @@ # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btcq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btrq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btsq $7, (%rax) +# CHECK-NEXT: - - - - - - - - - - clc # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decb %dil # CHECK-NEXT: - - 0.25 0.25 0.83 0.83 1.00 0.25 0.25 0.33 decb (%rax) # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/SLM/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/SLM/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/SLM/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 2 4 2.00 * * btcq $7, (%rax) # CHECK-NEXT: 2 4 2.00 * * btrq $7, (%rax) # CHECK-NEXT: 2 4 2.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 0.50 * clc # CHECK-NEXT: 1 1 0.50 decb %dil # CHECK-NEXT: 2 5 2.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.50 decw %di @@ -1159,7 +1162,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] -# CHECK-NEXT: 400.00 - - - - 391.50 233.50 470.00 +# CHECK-NEXT: 400.00 - - - - 392.00 234.00 470.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions: @@ -1301,6 +1304,7 @@ # CHECK-NEXT: - - - - - 0.50 0.50 2.00 btcq $7, (%rax) # CHECK-NEXT: - - - - - 0.50 0.50 2.00 btrq $7, (%rax) # CHECK-NEXT: - - - - - 0.50 0.50 2.00 btsq $7, (%rax) +# CHECK-NEXT: - - - - - 0.50 0.50 - clc # CHECK-NEXT: - - - - - 0.50 0.50 - decb %dil # CHECK-NEXT: - - - - - 1.00 1.00 2.00 decb (%rax) # CHECK-NEXT: - - - - - 0.50 0.50 - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/SandyBridge/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/SandyBridge/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/SandyBridge/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 4 7 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 4 7 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 4 7 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 - * clc # CHECK-NEXT: 1 1 0.33 decb %dil # CHECK-NEXT: 3 7 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.33 decw %di @@ -1301,6 +1304,7 @@ # CHECK-NEXT: - - 0.50 - 1.00 0.50 1.00 1.00 btcq $7, (%rax) # CHECK-NEXT: - - 0.50 - 1.00 0.50 1.00 1.00 btrq $7, (%rax) # CHECK-NEXT: - - 0.50 - 1.00 0.50 1.00 1.00 btsq $7, (%rax) +# CHECK-NEXT: - - - - - - - - clc # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - decb %dil # CHECK-NEXT: - - 0.33 0.33 1.00 0.33 1.00 1.00 decb (%rax) # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/SkylakeClient/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/SkylakeClient/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/SkylakeClient/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 4 6 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 4 6 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 4 6 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 - * clc # CHECK-NEXT: 1 1 0.25 decb %dil # CHECK-NEXT: 3 7 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.25 decw %di @@ -1303,6 +1306,7 @@ # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btcq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btrq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btsq $7, (%rax) +# CHECK-NEXT: - - - - - - - - - - clc # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decb %dil # CHECK-NEXT: - - 0.25 0.25 0.83 0.83 1.00 0.25 0.25 0.33 decb (%rax) # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/SkylakeServer/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/SkylakeServer/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/SkylakeServer/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 4 6 1.00 * * btcq $7, (%rax) # CHECK-NEXT: 4 6 1.00 * * btrq $7, (%rax) # CHECK-NEXT: 4 6 1.00 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 - * clc # CHECK-NEXT: 1 1 0.25 decb %dil # CHECK-NEXT: 3 7 1.00 * * decb (%rax) # CHECK-NEXT: 1 1 0.25 decw %di @@ -1303,6 +1306,7 @@ # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btcq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btrq $7, (%rax) # CHECK-NEXT: - - 0.50 - 0.83 0.83 1.00 - 0.50 0.33 btsq $7, (%rax) +# CHECK-NEXT: - - - - - - - - - - clc # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decb %dil # CHECK-NEXT: - - 0.25 0.25 0.83 0.83 1.00 0.25 0.25 0.33 decb (%rax) # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - decw %di Index: llvm/trunk/test/tools/llvm-mca/X86/Znver1/resources-x86_64.s =================================================================== --- llvm/trunk/test/tools/llvm-mca/X86/Znver1/resources-x86_64.s +++ llvm/trunk/test/tools/llvm-mca/X86/Znver1/resources-x86_64.s @@ -154,6 +154,8 @@ btrq $7, (%rax) btsq $7, (%rax) +clc + decb %dil decb (%rax) decw %di @@ -745,6 +747,7 @@ # CHECK-NEXT: 2 6 0.50 * * btcq $7, (%rax) # CHECK-NEXT: 2 6 0.50 * * btrq $7, (%rax) # CHECK-NEXT: 2 6 0.50 * * btsq $7, (%rax) +# CHECK-NEXT: 1 1 0.25 * clc # CHECK-NEXT: 1 1 0.25 decb %dil # CHECK-NEXT: 2 5 0.50 * * decb (%rax) # CHECK-NEXT: 1 1 0.25 decw %di @@ -1163,7 +1166,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] -# CHECK-NEXT: 131.50 131.50 111.50 145.50 127.50 111.50 392.00 - - - - 34.00 +# CHECK-NEXT: 131.50 131.50 111.75 145.75 127.75 111.75 392.00 - - - - 34.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions: @@ -1305,6 +1308,7 @@ # CHECK-NEXT: 0.50 0.50 0.25 0.25 0.25 0.25 - - - - - - btcq $7, (%rax) # CHECK-NEXT: 0.50 0.50 0.25 0.25 0.25 0.25 - - - - - - btrq $7, (%rax) # CHECK-NEXT: 0.50 0.50 0.25 0.25 0.25 0.25 - - - - - - btsq $7, (%rax) +# CHECK-NEXT: - - 0.25 0.25 0.25 0.25 - - - - - - clc # CHECK-NEXT: - - 0.25 0.25 0.25 0.25 - - - - - - decb %dil # CHECK-NEXT: 0.50 0.50 0.25 0.25 0.25 0.25 - - - - - - decb (%rax) # CHECK-NEXT: - - 0.25 0.25 0.25 0.25 - - - - - - decw %di