Index: lib/Target/X86/X86InstrFPStack.td =================================================================== --- lib/Target/X86/X86InstrFPStack.td +++ lib/Target/X86/X86InstrFPStack.td @@ -564,10 +564,13 @@ [(set RFP80:$dst, fpimm1)]>; } -let SchedRW = [WriteZero] in { +let SchedRW = [WriteF80Constant0] in { def LD_F0 : FPI<0xD9, MRM_EE, (outs), (ins), "fldz">; +} // SchedRW + +let SchedRW = [WriteF80Constant1] in { def LD_F1 : FPI<0xD9, MRM_E8, (outs), (ins), "fld1">; -} +} // SchedRW // Floating point compares. let SchedRW = [WriteFCom] in { Index: lib/Target/X86/X86SchedBroadwell.td =================================================================== --- lib/Target/X86/X86SchedBroadwell.td +++ lib/Target/X86/X86SchedBroadwell.td @@ -166,6 +166,8 @@ defm : BWWriteResPair; // Floating point. This covers both scalar and vector operations. +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; Index: lib/Target/X86/X86SchedHaswell.td =================================================================== --- lib/Target/X86/X86SchedHaswell.td +++ lib/Target/X86/X86SchedHaswell.td @@ -156,6 +156,8 @@ defm : HWWriteResPair; // Scalar and vector floating point. +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; @@ -657,9 +659,6 @@ // r. def : InstRW<[HWWriteP01], (instregex "ST_(F|FP)rr")>; -// FLDZ. -def : InstRW<[HWWriteP01], (instregex "LD_F0")>; - // FLDPI FLDL2E etc. def : InstRW<[HWWrite2P01], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>; Index: lib/Target/X86/X86SchedSandyBridge.td =================================================================== --- lib/Target/X86/X86SchedSandyBridge.td +++ lib/Target/X86/X86SchedSandyBridge.td @@ -148,6 +148,8 @@ defm : SBWriteResPair; // Scalar and vector floating point. +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; Index: lib/Target/X86/X86SchedSkylakeClient.td =================================================================== --- lib/Target/X86/X86SchedSkylakeClient.td +++ lib/Target/X86/X86SchedSkylakeClient.td @@ -161,6 +161,8 @@ defm : SKLWriteResPair; // Floating point. This covers both scalar and vector operations. +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; Index: lib/Target/X86/X86SchedSkylakeServer.td =================================================================== --- lib/Target/X86/X86SchedSkylakeServer.td +++ lib/Target/X86/X86SchedSkylakeServer.td @@ -161,6 +161,8 @@ defm : SKXWriteResPair; // Floating point. This covers both scalar and vector operations. +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; Index: lib/Target/X86/X86Schedule.td =================================================================== --- lib/Target/X86/X86Schedule.td +++ lib/Target/X86/X86Schedule.td @@ -142,6 +142,8 @@ // Floating point. This covers both scalar and vector operations. def WriteFLoad : SchedWrite; +def WriteF80Constant0 : SchedWrite; +def WriteF80Constant1 : SchedWrite; def WriteFLoadX : SchedWrite; def WriteFLoadY : SchedWrite; def WriteFMaskedLoad : SchedWrite; Index: lib/Target/X86/X86ScheduleAtom.td =================================================================== --- lib/Target/X86/X86ScheduleAtom.td +++ lib/Target/X86/X86ScheduleAtom.td @@ -184,26 +184,28 @@ // Floating point. This covers both scalar and vector operations. //////////////////////////////////////////////////////////////////////////////// -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; - -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; - -def : WriteRes; -def : WriteRes; -def : WriteRes; - -defm : X86WriteRes; +defm : X86WriteRes; +defm : X86WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; + +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; + +def : WriteRes; +def : WriteRes; +def : WriteRes; + +defm : X86WriteRes; defm : AtomWriteResPair; defm : AtomWriteResPair; @@ -492,7 +494,7 @@ let Latency = 1; let ResourceCycles = [1]; } -def : InstRW<[AtomWrite01_1], (instrs FDECSTP, FFREE, FFREEP, FINCSTP, LD_F0, WAIT, +def : InstRW<[AtomWrite01_1], (instrs FDECSTP, FFREE, FFREEP, FINCSTP, WAIT, LFENCE, STOSB, STOSL, STOSQ, STOSW, MOVSSrr, MOVSSrr_REV, @@ -560,7 +562,7 @@ let Latency = 6; let ResourceCycles = [6]; } -def : InstRW<[AtomWrite01_6], (instrs LD_F1, CMPXCHG8rm, INTO, XLAT, +def : InstRW<[AtomWrite01_6], (instrs CMPXCHG8rm, INTO, XLAT, SHLD16rrCL, SHRD16rrCL, SHLD16rri8, SHRD16rri8, SHLD16mrCL, SHRD16mrCL, Index: lib/Target/X86/X86ScheduleBtVer2.td =================================================================== --- lib/Target/X86/X86ScheduleBtVer2.td +++ lib/Target/X86/X86ScheduleBtVer2.td @@ -271,6 +271,8 @@ // Floating point. This covers both scalar and vector operations. //////////////////////////////////////////////////////////////////////////////// +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; Index: lib/Target/X86/X86ScheduleSLM.td =================================================================== --- lib/Target/X86/X86ScheduleSLM.td +++ lib/Target/X86/X86ScheduleSLM.td @@ -136,23 +136,25 @@ defm : SLMWriteResPair; // Scalar and vector floating point. -def : WriteRes { let Latency = 3; } -def : WriteRes { let Latency = 3; } -def : WriteRes { let Latency = 3; } -def : WriteRes { let Latency = 3; } -def : WriteRes { let Latency = 3; } -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -def : WriteRes; -defm : X86WriteRes; +defm : X86WriteRes; +defm : X86WriteRes; +def : WriteRes { let Latency = 3; } +def : WriteRes { let Latency = 3; } +def : WriteRes { let Latency = 3; } +def : WriteRes { let Latency = 3; } +def : WriteRes { let Latency = 3; } +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +def : WriteRes; +defm : X86WriteRes; defm : SLMWriteResPair; defm : SLMWriteResPair; Index: lib/Target/X86/X86ScheduleZnver1.td =================================================================== --- lib/Target/X86/X86ScheduleZnver1.td +++ lib/Target/X86/X86ScheduleZnver1.td @@ -192,6 +192,8 @@ } // Floating point operations +defm : X86WriteRes; +defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; @@ -814,12 +816,6 @@ let Latency = 11; } -// FLDZ. -def : InstRW<[ZnWriteFPU13], (instregex "LD_F0")>; - -// FLD1. -def : InstRW<[ZnWriteFPU3], (instregex "LD_F1")>; - // FLDPI FLDL2E etc. def : InstRW<[ZnWriteFPU3], (instregex "FLDPI", "FLDL2(T|E)", "FLDL(G|N)2")>; Index: test/CodeGen/X86/x87-schedule.ll =================================================================== --- test/CodeGen/X86/x87-schedule.ll +++ test/CodeGen/X86/x87-schedule.ll @@ -2849,33 +2849,33 @@ ; SLM-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; SLM: # %bb.0: ; SLM-NEXT: #APP -; SLM-NEXT: fld1 # sched: [1:?] +; SLM-NEXT: fld1 # sched: [1:0.50] ; SLM-NEXT: fldl2e # sched: [100:1.00] ; SLM-NEXT: fldl2t # sched: [100:1.00] ; SLM-NEXT: fldlg2 # sched: [100:1.00] ; SLM-NEXT: fldln2 # sched: [100:1.00] ; SLM-NEXT: fldpi # sched: [100:1.00] -; SLM-NEXT: fldz # sched: [1:?] +; SLM-NEXT: fldz # sched: [1:0.50] ; SLM-NEXT: #NO_APP ; SLM-NEXT: retl # sched: [4:1.00] ; ; SANDY-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; SANDY: # %bb.0: ; SANDY-NEXT: #APP -; SANDY-NEXT: fld1 # sched: [1:?] +; SANDY-NEXT: fld1 # sched: [1:1.00] ; SANDY-NEXT: fldl2e # sched: [100:0.33] ; SANDY-NEXT: fldl2t # sched: [100:0.33] ; SANDY-NEXT: fldlg2 # sched: [100:0.33] ; SANDY-NEXT: fldln2 # sched: [100:0.33] ; SANDY-NEXT: fldpi # sched: [100:0.33] -; SANDY-NEXT: fldz # sched: [1:?] +; SANDY-NEXT: fldz # sched: [1:1.00] ; SANDY-NEXT: #NO_APP ; SANDY-NEXT: retl # sched: [6:1.00] ; ; HASWELL-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; HASWELL: # %bb.0: ; HASWELL-NEXT: #APP -; HASWELL-NEXT: fld1 # sched: [1:?] +; HASWELL-NEXT: fld1 # sched: [1:1.00] ; HASWELL-NEXT: fldl2e # sched: [1:0.50] ; HASWELL-NEXT: fldl2t # sched: [1:0.50] ; HASWELL-NEXT: fldlg2 # sched: [1:0.50] @@ -2888,52 +2888,52 @@ ; BROADWELL-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; BROADWELL: # %bb.0: ; BROADWELL-NEXT: #APP -; BROADWELL-NEXT: fld1 # sched: [1:?] +; BROADWELL-NEXT: fld1 # sched: [1:1.00] ; BROADWELL-NEXT: fldl2e # sched: [100:0.25] ; BROADWELL-NEXT: fldl2t # sched: [100:0.25] ; BROADWELL-NEXT: fldlg2 # sched: [100:0.25] ; BROADWELL-NEXT: fldln2 # sched: [100:0.25] ; BROADWELL-NEXT: fldpi # sched: [100:0.25] -; BROADWELL-NEXT: fldz # sched: [1:?] +; BROADWELL-NEXT: fldz # sched: [1:0.50] ; BROADWELL-NEXT: #NO_APP ; BROADWELL-NEXT: retl # sched: [6:0.50] ; ; SKYLAKE-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; SKYLAKE: # %bb.0: ; SKYLAKE-NEXT: #APP -; SKYLAKE-NEXT: fld1 # sched: [1:?] +; SKYLAKE-NEXT: fld1 # sched: [1:1.00] ; SKYLAKE-NEXT: fldl2e # sched: [100:0.25] ; SKYLAKE-NEXT: fldl2t # sched: [100:0.25] ; SKYLAKE-NEXT: fldlg2 # sched: [100:0.25] ; SKYLAKE-NEXT: fldln2 # sched: [100:0.25] ; SKYLAKE-NEXT: fldpi # sched: [100:0.25] -; SKYLAKE-NEXT: fldz # sched: [1:?] +; SKYLAKE-NEXT: fldz # sched: [1:0.50] ; SKYLAKE-NEXT: #NO_APP ; SKYLAKE-NEXT: retl # sched: [6:0.50] ; ; SKX-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; SKX: # %bb.0: ; SKX-NEXT: #APP -; SKX-NEXT: fld1 # sched: [1:?] +; SKX-NEXT: fld1 # sched: [1:1.00] ; SKX-NEXT: fldl2e # sched: [100:0.25] ; SKX-NEXT: fldl2t # sched: [100:0.25] ; SKX-NEXT: fldlg2 # sched: [100:0.25] ; SKX-NEXT: fldln2 # sched: [100:0.25] ; SKX-NEXT: fldpi # sched: [100:0.25] -; SKX-NEXT: fldz # sched: [1:?] +; SKX-NEXT: fldz # sched: [1:0.50] ; SKX-NEXT: #NO_APP ; SKX-NEXT: retl # sched: [6:0.50] ; ; BTVER2-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: ; BTVER2: # %bb.0: ; BTVER2-NEXT: #APP -; BTVER2-NEXT: fld1 # sched: [1:?] +; BTVER2-NEXT: fld1 # sched: [1:1.00] ; BTVER2-NEXT: fldl2e # sched: [100:0.50] ; BTVER2-NEXT: fldl2t # sched: [100:0.50] ; BTVER2-NEXT: fldlg2 # sched: [100:0.50] ; BTVER2-NEXT: fldln2 # sched: [100:0.50] ; BTVER2-NEXT: fldpi # sched: [100:0.50] -; BTVER2-NEXT: fldz # sched: [1:?] +; BTVER2-NEXT: fldz # sched: [1:1.00] ; BTVER2-NEXT: #NO_APP ; BTVER2-NEXT: retl # sched: [4:1.00] ; Index: test/tools/llvm-mca/X86/Broadwell/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/Broadwell/resources-x87.s +++ test/tools/llvm-mca/X86/Broadwell/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 1 6 0.50 * * fldt (%eax) # CHECK-NEXT: 3 7 1.00 * * fldcw (%eax) # CHECK-NEXT: 64 60 14.00 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 2 1 1.00 * fld1 # CHECK-NEXT: 1 100 0.25 * fldl2e # CHECK-NEXT: 1 100 0.25 * fldl2t # CHECK-NEXT: 1 100 0.25 * fldlg2 # CHECK-NEXT: 1 100 0.25 * fldln2 # CHECK-NEXT: 1 100 0.25 * fldpi -# CHECK-NEXT: 1 1 - * fldz +# CHECK-NEXT: 1 1 0.50 * fldz # CHECK-NEXT: 1 5 1.00 * fmul %st(0), %st(1) # CHECK-NEXT: 1 5 1.00 * fmul %st(2) # CHECK-NEXT: 2 11 1.00 * * fmuls (%ecx) @@ -369,7 +369,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] -# CHECK-NEXT: - 9.00 111.67 140.67 49.00 49.00 27.00 60.67 71.00 9.00 +# CHECK-NEXT: - 9.00 113.17 142.17 49.00 49.00 27.00 60.67 71.00 9.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions: @@ -448,13 +448,13 @@ # CHECK-NEXT: - - - - 0.50 0.50 - - - - fldt (%eax) # CHECK-NEXT: - - 1.50 0.50 0.50 0.50 - - - - fldcw (%eax) # CHECK-NEXT: - - 18.92 11.42 4.00 4.00 - 10.92 14.75 - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - - - fld1 +# CHECK-NEXT: - - 1.00 1.00 - - - - - - fld1 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldl2e # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldl2t # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldlg2 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldln2 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldpi -# CHECK-NEXT: - - - - - - - - - - fldz +# CHECK-NEXT: - - 0.50 0.50 - - - - - - fldz # CHECK-NEXT: - - 1.00 - - - - - - - fmul %st(0), %st(1) # CHECK-NEXT: - - 1.00 - - - - - - - fmul %st(2) # CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - fmuls (%ecx) Index: test/tools/llvm-mca/X86/BtVer2/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/BtVer2/resources-x87.s +++ test/tools/llvm-mca/X86/BtVer2/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 1 5 1.00 * * fldt (%eax) # CHECK-NEXT: 1 5 1.00 * * fldcw (%eax) # CHECK-NEXT: 1 100 0.50 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 1 1 1.00 * fld1 # CHECK-NEXT: 1 100 0.50 * fldl2e # CHECK-NEXT: 1 100 0.50 * fldl2t # CHECK-NEXT: 1 100 0.50 * fldlg2 # CHECK-NEXT: 1 100 0.50 * fldln2 # CHECK-NEXT: 1 100 0.50 * fldpi -# CHECK-NEXT: 1 1 - * fldz +# CHECK-NEXT: 1 1 1.00 * fldz # CHECK-NEXT: 1 2 1.00 * fmul %st(0), %st(1) # CHECK-NEXT: 1 2 1.00 * fmul %st(2) # CHECK-NEXT: 1 7 1.00 * * fmuls (%ecx) @@ -373,7 +373,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] -# CHECK-NEXT: 44.50 22.50 - 54.00 349.00 54.00 27.00 39.00 - 13.00 - - - - +# CHECK-NEXT: 44.50 22.50 - 54.00 349.00 54.00 29.00 39.00 - 13.00 - - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] Instructions: @@ -452,13 +452,13 @@ # CHECK-NEXT: - - - - - - - 1.00 - - - - - - fldt (%eax) # CHECK-NEXT: - - - - - - - 1.00 - - - - - - fldcw (%eax) # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - - - - - - - fld1 +# CHECK-NEXT: - - - - - - 1.00 - - - - - - - fld1 # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - fldl2e # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - fldl2t # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - fldlg2 # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - fldln2 # CHECK-NEXT: 0.50 0.50 - - - - - - - - - - - - fldpi -# CHECK-NEXT: - - - - - - - - - - - - - - fldz +# CHECK-NEXT: - - - - - - 1.00 - - - - - - - fldz # CHECK-NEXT: - - - - 1.00 - 1.00 - - - - - - - fmul %st(0), %st(1) # CHECK-NEXT: - - - - 1.00 - 1.00 - - - - - - - fmul %st(2) # CHECK-NEXT: - - - - 1.00 - 1.00 1.00 - - - - - - fmuls (%ecx) Index: test/tools/llvm-mca/X86/Haswell/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/Haswell/resources-x87.s +++ test/tools/llvm-mca/X86/Haswell/resources-x87.s @@ -281,7 +281,7 @@ # CHECK-NEXT: 1 7 0.50 * * fldt (%eax) # CHECK-NEXT: 3 7 1.00 * * fldcw (%eax) # CHECK-NEXT: 64 61 14.00 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 2 1 1.00 * fld1 # CHECK-NEXT: 2 1 0.50 * fldl2e # CHECK-NEXT: 2 1 0.50 * fldl2t # CHECK-NEXT: 2 1 0.50 * fldlg2 @@ -369,7 +369,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] -# CHECK-NEXT: - 17.00 117.92 141.92 49.00 49.00 27.00 56.92 65.25 9.00 +# CHECK-NEXT: - 17.00 118.92 142.92 49.00 49.00 27.00 56.92 65.25 9.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions: @@ -448,7 +448,7 @@ # CHECK-NEXT: - - - - 0.50 0.50 - - - - fldt (%eax) # CHECK-NEXT: - - 1.50 0.50 0.50 0.50 - - - - fldcw (%eax) # CHECK-NEXT: - - 18.92 11.42 4.00 4.00 - 10.92 14.75 - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - - - fld1 +# CHECK-NEXT: - - 1.00 1.00 - - - - - - fld1 # CHECK-NEXT: - - 0.50 0.50 - - - - - - fldl2e # CHECK-NEXT: - - 0.50 0.50 - - - - - - fldl2t # CHECK-NEXT: - - 0.50 0.50 - - - - - - fldlg2 Index: test/tools/llvm-mca/X86/SLM/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/SLM/resources-x87.s +++ test/tools/llvm-mca/X86/SLM/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 1 3 1.00 * * fldt (%eax) # CHECK-NEXT: 1 3 1.00 * * fldcw (%eax) # CHECK-NEXT: 1 100 1.00 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 1 1 0.50 * fld1 # CHECK-NEXT: 1 100 1.00 * fldl2e # CHECK-NEXT: 1 100 1.00 * fldl2t # CHECK-NEXT: 1 100 1.00 * fldlg2 # CHECK-NEXT: 1 100 1.00 * fldln2 # CHECK-NEXT: 1 100 1.00 * fldpi -# CHECK-NEXT: 1 1 - * fldz +# CHECK-NEXT: 1 1 0.50 * fldz # CHECK-NEXT: 1 5 2.00 * fmul %st(0), %st(1) # CHECK-NEXT: 1 5 2.00 * fmul %st(2) # CHECK-NEXT: 1 8 2.00 * * fmuls (%ecx) @@ -367,7 +367,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] -# CHECK-NEXT: - 312.00 16.00 64.00 55.00 9.50 9.50 52.00 +# CHECK-NEXT: - 312.00 16.00 65.00 56.00 9.50 9.50 52.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions: @@ -446,13 +446,13 @@ # CHECK-NEXT: - - - - - - - 1.00 fldt (%eax) # CHECK-NEXT: - - - - - - - 1.00 fldcw (%eax) # CHECK-NEXT: - - - 1.00 - - - - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - fld1 +# CHECK-NEXT: - - - 0.50 0.50 - - - fld1 # CHECK-NEXT: - - - 1.00 - - - - fldl2e # CHECK-NEXT: - - - 1.00 - - - - fldl2t # CHECK-NEXT: - - - 1.00 - - - - fldlg2 # CHECK-NEXT: - - - 1.00 - - - - fldln2 # CHECK-NEXT: - - - 1.00 - - - - fldpi -# CHECK-NEXT: - - - - - - - - fldz +# CHECK-NEXT: - - - 0.50 0.50 - - - fldz # CHECK-NEXT: - - 2.00 1.00 - - - - fmul %st(0), %st(1) # CHECK-NEXT: - - 2.00 1.00 - - - - fmul %st(2) # CHECK-NEXT: - - 2.00 1.00 - - - 1.00 fmuls (%ecx) Index: test/tools/llvm-mca/X86/SandyBridge/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/SandyBridge/resources-x87.s +++ test/tools/llvm-mca/X86/SandyBridge/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 3 9 1.00 * * fldt (%eax) # CHECK-NEXT: 5 8 2.00 * * fldcw (%eax) # CHECK-NEXT: 1 100 0.33 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 2 1 1.00 * fld1 # CHECK-NEXT: 1 100 0.33 * fldl2e # CHECK-NEXT: 1 100 0.33 * fldl2t # CHECK-NEXT: 1 100 0.33 * fldlg2 # CHECK-NEXT: 1 100 0.33 * fldln2 # CHECK-NEXT: 1 100 0.33 * fldpi -# CHECK-NEXT: 1 1 - * fldz +# CHECK-NEXT: 1 1 1.00 * fldz # CHECK-NEXT: 1 5 1.00 * fmul %st(0), %st(1) # CHECK-NEXT: 1 5 1.00 * fmul %st(2) # CHECK-NEXT: 2 12 1.00 * * fmuls (%ecx) @@ -367,7 +367,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] -# CHECK-NEXT: - 136.00 48.33 87.33 17.00 54.33 34.00 34.00 +# CHECK-NEXT: - 136.00 49.33 87.33 17.00 56.33 34.00 34.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions: @@ -446,13 +446,13 @@ # CHECK-NEXT: - - 0.50 0.50 - 1.00 0.50 0.50 fldt (%eax) # CHECK-NEXT: - - - - 1.00 2.00 1.00 1.00 fldcw (%eax) # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - fld1 +# CHECK-NEXT: - - 1.00 - - 1.00 - - fld1 # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - fldl2e # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - fldl2t # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - fldlg2 # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - fldln2 # CHECK-NEXT: - - 0.33 0.33 - 0.33 - - fldpi -# CHECK-NEXT: - - - - - - - - fldz +# CHECK-NEXT: - - - - - 1.00 - - fldz # CHECK-NEXT: - - 1.00 - - - - - fmul %st(0), %st(1) # CHECK-NEXT: - - 1.00 - - - - - fmul %st(2) # CHECK-NEXT: - - 1.00 - - - 0.50 0.50 fmuls (%ecx) Index: test/tools/llvm-mca/X86/SkylakeClient/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/SkylakeClient/resources-x87.s +++ test/tools/llvm-mca/X86/SkylakeClient/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 1 7 0.50 * * fldt (%eax) # CHECK-NEXT: 3 7 1.00 * * fldcw (%eax) # CHECK-NEXT: 64 62 14.00 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 2 1 1.00 * fld1 # CHECK-NEXT: 1 100 0.25 * fldl2e # CHECK-NEXT: 1 100 0.25 * fldl2t # CHECK-NEXT: 1 100 0.25 * fldlg2 # CHECK-NEXT: 1 100 0.25 * fldln2 # CHECK-NEXT: 1 100 0.25 * fldpi -# CHECK-NEXT: 1 1 - * fldz +# CHECK-NEXT: 1 1 0.50 * fldz # CHECK-NEXT: 1 4 1.00 * fmul %st(0), %st(1) # CHECK-NEXT: 1 4 1.00 * fmul %st(2) # CHECK-NEXT: 2 11 1.00 * * fmuls (%ecx) @@ -369,7 +369,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] -# CHECK-NEXT: - 7.00 121.50 53.50 49.00 49.00 27.00 144.50 70.50 9.00 +# CHECK-NEXT: - 7.00 123.00 53.50 49.00 49.00 27.00 146.00 70.50 9.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions: @@ -448,13 +448,13 @@ # CHECK-NEXT: - - - - 0.50 0.50 - - - - fldt (%eax) # CHECK-NEXT: - - 1.50 - 0.50 0.50 - 0.50 - - fldcw (%eax) # CHECK-NEXT: - - 19.25 9.75 4.00 4.00 - 12.25 14.75 - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - - - fld1 +# CHECK-NEXT: - - 1.00 - - - - 1.00 - - fld1 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldl2e # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldl2t # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldlg2 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldln2 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldpi -# CHECK-NEXT: - - - - - - - - - - fldz +# CHECK-NEXT: - - 0.50 - - - - 0.50 - - fldz # CHECK-NEXT: - - 1.00 - - - - - - - fmul %st(0), %st(1) # CHECK-NEXT: - - 1.00 - - - - - - - fmul %st(2) # CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - fmuls (%ecx) Index: test/tools/llvm-mca/X86/SkylakeServer/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/SkylakeServer/resources-x87.s +++ test/tools/llvm-mca/X86/SkylakeServer/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 1 7 0.50 * * fldt (%eax) # CHECK-NEXT: 3 7 1.00 * * fldcw (%eax) # CHECK-NEXT: 64 62 14.00 * fldenv (%eax) -# CHECK-NEXT: 1 1 - * fld1 +# CHECK-NEXT: 2 1 1.00 * fld1 # CHECK-NEXT: 1 100 0.25 * fldl2e # CHECK-NEXT: 1 100 0.25 * fldl2t # CHECK-NEXT: 1 100 0.25 * fldlg2 # CHECK-NEXT: 1 100 0.25 * fldln2 # CHECK-NEXT: 1 100 0.25 * fldpi -# CHECK-NEXT: 1 1 - * fldz +# CHECK-NEXT: 1 1 0.50 * fldz # CHECK-NEXT: 1 4 1.00 * fmul %st(0), %st(1) # CHECK-NEXT: 1 4 1.00 * fmul %st(2) # CHECK-NEXT: 2 11 1.00 * * fmuls (%ecx) @@ -369,7 +369,7 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] -# CHECK-NEXT: - 7.00 121.50 53.50 49.00 49.00 27.00 144.50 70.50 9.00 +# CHECK-NEXT: - 7.00 123.00 53.50 49.00 49.00 27.00 146.00 70.50 9.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions: @@ -448,13 +448,13 @@ # CHECK-NEXT: - - - - 0.50 0.50 - - - - fldt (%eax) # CHECK-NEXT: - - 1.50 - 0.50 0.50 - 0.50 - - fldcw (%eax) # CHECK-NEXT: - - 19.25 9.75 4.00 4.00 - 12.25 14.75 - fldenv (%eax) -# CHECK-NEXT: - - - - - - - - - - fld1 +# CHECK-NEXT: - - 1.00 - - - - 1.00 - - fld1 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldl2e # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldl2t # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldlg2 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldln2 # CHECK-NEXT: - - 0.25 0.25 - - - 0.25 0.25 - fldpi -# CHECK-NEXT: - - - - - - - - - - fldz +# CHECK-NEXT: - - 0.50 - - - - 0.50 - - fldz # CHECK-NEXT: - - 1.00 - - - - - - - fmul %st(0), %st(1) # CHECK-NEXT: - - 1.00 - - - - - - - fmul %st(2) # CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - fmuls (%ecx) Index: test/tools/llvm-mca/X86/Znver1/resources-x87.s =================================================================== --- test/tools/llvm-mca/X86/Znver1/resources-x87.s +++ test/tools/llvm-mca/X86/Znver1/resources-x87.s @@ -281,13 +281,13 @@ # CHECK-NEXT: 2 1 0.50 * * fldt (%eax) # CHECK-NEXT: 1 100 - * * fldcw (%eax) # CHECK-NEXT: 1 100 - * fldenv (%eax) -# CHECK-NEXT: 1 11 1.00 * fld1 +# CHECK-NEXT: 2 11 1.00 * fld1 # CHECK-NEXT: 1 11 1.00 * fldl2e # CHECK-NEXT: 1 11 1.00 * fldl2t # CHECK-NEXT: 1 11 1.00 * fldlg2 # CHECK-NEXT: 1 11 1.00 * fldln2 # CHECK-NEXT: 1 11 1.00 * fldpi -# CHECK-NEXT: 1 8 0.50 * fldz +# CHECK-NEXT: 2 8 0.50 * fldz # CHECK-NEXT: 1 3 0.50 * fmul %st(0), %st(1) # CHECK-NEXT: 1 3 0.50 * fmul %st(2) # CHECK-NEXT: 2 10 0.50 * * fmuls (%ecx)