Index: lib/Target/X86/X86InstrXOP.td =================================================================== --- lib/Target/X86/X86InstrXOP.td +++ lib/Target/X86/X86InstrXOP.td @@ -76,20 +76,20 @@ let ExeDomain = SSEPackedSingle in { defm VFRCZSS : xop2opsld<0x82, "vfrczss", int_x86_xop_vfrcz_ss, - ssmem, sse_load_f32, SchedWriteFRnd.Scl>; + ssmem, sse_load_f32, SchedWriteVFRCZ.Scl>; defm VFRCZPS : xop2op128<0x80, "vfrczps", int_x86_xop_vfrcz_ps, loadv4f32, - SchedWriteFRnd.XMM>; + SchedWriteVFRCZ.XMM>; defm VFRCZPS : xop2op256<0x80, "vfrczps", int_x86_xop_vfrcz_ps_256, loadv8f32, - SchedWriteFRnd.YMM>; + SchedWriteVFRCZ.YMM>; } let ExeDomain = SSEPackedDouble in { defm VFRCZSD : xop2opsld<0x83, "vfrczsd", int_x86_xop_vfrcz_sd, - sdmem, sse_load_f64, SchedWriteFRnd.Scl>; + sdmem, sse_load_f64, SchedWriteVFRCZ.Scl>; defm VFRCZPD : xop2op128<0x81, "vfrczpd", int_x86_xop_vfrcz_pd, loadv2f64, - SchedWriteFRnd.XMM>; + SchedWriteVFRCZ.XMM>; defm VFRCZPD : xop2op256<0x81, "vfrczpd", int_x86_xop_vfrcz_pd_256, loadv4f64, - SchedWriteFRnd.YMM>; + SchedWriteVFRCZ.YMM>; } multiclass xop3op opc, string OpcodeStr, SDNode OpNode, Index: lib/Target/X86/X86SchedBroadwell.td =================================================================== --- lib/Target/X86/X86SchedBroadwell.td +++ lib/Target/X86/X86SchedBroadwell.td @@ -272,6 +272,9 @@ defm : X86WriteRes; // Floating point rounding. defm : X86WriteRes; // Floating point rounding (YMM/ZMM). defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : X86WriteRes; defm : X86WriteRes; defm : BWWriteResPair; // Floating point and/or/xor logicals. Index: lib/Target/X86/X86SchedHaswell.td =================================================================== --- lib/Target/X86/X86SchedHaswell.td +++ lib/Target/X86/X86SchedHaswell.td @@ -275,6 +275,9 @@ defm : X86WriteRes; defm : X86WriteRes; defm : X86WriteRes; // Unsupported = 1 +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : HWWriteResPair; defm : HWWriteResPair; defm : HWWriteResPair; // Unsupported = 1 Index: lib/Target/X86/X86SchedSandyBridge.td =================================================================== --- lib/Target/X86/X86SchedSandyBridge.td +++ lib/Target/X86/X86SchedSandyBridge.td @@ -255,6 +255,9 @@ defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; // Unsupported = 1 +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : SBWriteResPair; defm : SBWriteResPair; defm : SBWriteResPair; // Unsupported = 1 Index: lib/Target/X86/X86SchedSkylakeClient.td =================================================================== --- lib/Target/X86/X86SchedSkylakeClient.td +++ lib/Target/X86/X86SchedSkylakeClient.td @@ -267,6 +267,9 @@ defm : SKLWriteResPair; // Floating point rounding. defm : SKLWriteResPair; defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : SKLWriteResPair; // Floating point and/or/xor logicals. defm : SKLWriteResPair; defm : X86WriteResPairUnsupported; Index: lib/Target/X86/X86SchedSkylakeServer.td =================================================================== --- lib/Target/X86/X86SchedSkylakeServer.td +++ lib/Target/X86/X86SchedSkylakeServer.td @@ -267,6 +267,9 @@ defm : SKXWriteResPair; // Floating point rounding. defm : SKXWriteResPair; defm : SKXWriteResPair; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : SKXWriteResPair; // Floating point and/or/xor logicals. defm : SKXWriteResPair; defm : SKXWriteResPair; Index: lib/Target/X86/X86Schedule.td =================================================================== --- lib/Target/X86/X86Schedule.td +++ lib/Target/X86/X86Schedule.td @@ -250,6 +250,9 @@ defm WriteFRnd : X86SchedWritePair; // Floating point rounding. defm WriteFRndY : X86SchedWritePair; // Floating point rounding (YMM). defm WriteFRndZ : X86SchedWritePair; // Floating point rounding (ZMM). +defm WriteVFRCZ : X86SchedWritePair; // Floating point fraction extraction. +defm WriteVFRCZY : X86SchedWritePair; // Floating point fraction extraction (YMM). +defm WriteVFRCZZ : X86SchedWritePair; // Floating point fraction extraction (ZMM). defm WriteFLogic : X86SchedWritePair; // Floating point and/or/xor logicals. defm WriteFLogicY : X86SchedWritePair; // Floating point and/or/xor logicals (YMM). defm WriteFLogicZ : X86SchedWritePair; // Floating point and/or/xor logicals (ZMM). @@ -531,6 +534,8 @@ : X86SchedWriteWidths; def SchedWriteFRnd : X86SchedWriteWidths; +def SchedWriteVFRCZ + : X86SchedWriteWidths; def SchedWriteFLogic : X86SchedWriteWidths; def SchedWriteFTest Index: lib/Target/X86/X86ScheduleAtom.td =================================================================== --- lib/Target/X86/X86ScheduleAtom.td +++ lib/Target/X86/X86ScheduleAtom.td @@ -278,6 +278,9 @@ defm : AtomWriteResPair; defm : X86WriteResPairUnsupported; defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : AtomWriteResPair; defm : X86WriteResPairUnsupported; defm : X86WriteResPairUnsupported; Index: lib/Target/X86/X86ScheduleBtVer2.td =================================================================== --- lib/Target/X86/X86ScheduleBtVer2.td +++ lib/Target/X86/X86ScheduleBtVer2.td @@ -352,6 +352,9 @@ defm : JWriteResFpuPair; defm : JWriteResYMMPair; defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : JWriteResFpuPair; defm : JWriteResYMMPair; defm : X86WriteResPairUnsupported; Index: lib/Target/X86/X86ScheduleSLM.td =================================================================== --- lib/Target/X86/X86ScheduleSLM.td +++ lib/Target/X86/X86ScheduleSLM.td @@ -230,6 +230,9 @@ defm : SLMWriteResPair; defm : SLMWriteResPair; defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : SLMWriteResPair; defm : SLMWriteResPair; defm : X86WriteResPairUnsupported; Index: lib/Target/X86/X86ScheduleZnver1.td =================================================================== --- lib/Target/X86/X86ScheduleZnver1.td +++ lib/Target/X86/X86ScheduleZnver1.td @@ -304,6 +304,9 @@ defm : ZnWriteResFpuPair; // FIXME: Should folds require 1 extra uops? defm : ZnWriteResFpuPair; // FIXME: Should folds require 1 extra uops? defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; +defm : X86WriteResPairUnsupported; defm : ZnWriteResFpuPair; defm : ZnWriteResFpuPair; defm : X86WriteResPairUnsupported; Index: test/CodeGen/X86/xop-schedule.ll =================================================================== --- test/CodeGen/X86/xop-schedule.ll +++ test/CodeGen/X86/xop-schedule.ll @@ -9,10 +9,10 @@ ; GENERIC-LABEL: test_vfrczpd: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: vfrczpd %xmm0, %xmm0 # sched: [3:1.00] -; GENERIC-NEXT: vfrczpd %ymm1, %ymm1 # sched: [3:1.00] -; GENERIC-NEXT: vfrczpd (%rdi), %xmm0 # sched: [9:1.00] -; GENERIC-NEXT: vfrczpd (%rsi), %ymm1 # sched: [10:1.00] +; GENERIC-NEXT: vfrczpd %xmm0, %xmm0 # sched: [0:0.25] +; GENERIC-NEXT: vfrczpd %ymm1, %ymm1 # sched: [0:0.25] +; GENERIC-NEXT: vfrczpd (%rdi), %xmm0 # sched: [0:0.25] +; GENERIC-NEXT: vfrczpd (%rsi), %ymm1 # sched: [0:0.25] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: vzeroupper # sched: [100:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] @@ -35,10 +35,10 @@ ; GENERIC-LABEL: test_vfrczps: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: vfrczps %xmm0, %xmm0 # sched: [3:1.00] -; GENERIC-NEXT: vfrczps %ymm1, %ymm1 # sched: [3:1.00] -; GENERIC-NEXT: vfrczps (%rdi), %xmm0 # sched: [9:1.00] -; GENERIC-NEXT: vfrczps (%rsi), %ymm1 # sched: [10:1.00] +; GENERIC-NEXT: vfrczps %xmm0, %xmm0 # sched: [0:0.25] +; GENERIC-NEXT: vfrczps %ymm1, %ymm1 # sched: [0:0.25] +; GENERIC-NEXT: vfrczps (%rdi), %xmm0 # sched: [0:0.25] +; GENERIC-NEXT: vfrczps (%rsi), %ymm1 # sched: [0:0.25] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: vzeroupper # sched: [100:0.33] ; GENERIC-NEXT: retq # sched: [1:1.00] @@ -61,8 +61,8 @@ ; GENERIC-LABEL: test_vfrczsd: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: vfrczsd %xmm0, %xmm0 # sched: [3:1.00] -; GENERIC-NEXT: vfrczsd (%rdi), %xmm0 # sched: [9:1.00] +; GENERIC-NEXT: vfrczsd %xmm0, %xmm0 # sched: [0:0.25] +; GENERIC-NEXT: vfrczsd (%rdi), %xmm0 # sched: [0:0.25] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -81,8 +81,8 @@ ; GENERIC-LABEL: test_vfrczss: ; GENERIC: # %bb.0: ; GENERIC-NEXT: #APP -; GENERIC-NEXT: vfrczss %xmm0, %xmm0 # sched: [3:1.00] -; GENERIC-NEXT: vfrczss (%rdi), %xmm0 # sched: [9:1.00] +; GENERIC-NEXT: vfrczss %xmm0, %xmm0 # sched: [0:0.25] +; GENERIC-NEXT: vfrczss (%rdi), %xmm0 # sched: [0:0.25] ; GENERIC-NEXT: #NO_APP ; GENERIC-NEXT: retq # sched: [1:1.00] ; Index: test/tools/llvm-mca/X86/Generic/resources-xop.s =================================================================== --- test/tools/llvm-mca/X86/Generic/resources-xop.s +++ test/tools/llvm-mca/X86/Generic/resources-xop.s @@ -1,5 +1,8 @@ -# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py -# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -instruction-tables < %s | FileCheck %s +# It seems we can't actually run this test using generic cpu, since these are XOP instructions, and the generic cpu does not support them. +# -R-U-N-: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -instruction-tables < %s | FileCheck %s + +# Dummy run-line to keep everything working: +# RUN: not FileCheck %s vfrczpd %xmm0, %xmm3 vfrczpd (%rax), %xmm3 @@ -211,324 +214,3 @@ vpshlw %xmm0, %xmm1, %xmm3 vpshlw (%rax), %xmm0, %xmm3 vpshlw %xmm0, (%rax), %xmm3 - -# CHECK: Instruction Info: -# CHECK-NEXT: [1]: #uOps -# CHECK-NEXT: [2]: Latency -# CHECK-NEXT: [3]: RThroughput -# CHECK-NEXT: [4]: MayLoad -# CHECK-NEXT: [5]: MayStore -# CHECK-NEXT: [6]: HasSideEffects (U) - -# CHECK: [1] [2] [3] [4] [5] [6] Instructions: -# CHECK-NEXT: 1 3 1.00 vfrczpd %xmm0, %xmm3 -# CHECK-NEXT: 2 9 1.00 * vfrczpd (%rax), %xmm3 -# CHECK-NEXT: 1 3 1.00 vfrczpd %ymm0, %ymm3 -# CHECK-NEXT: 2 10 1.00 * vfrczpd (%rax), %ymm3 -# CHECK-NEXT: 1 3 1.00 vfrczps %xmm0, %xmm3 -# CHECK-NEXT: 2 9 1.00 * vfrczps (%rax), %xmm3 -# CHECK-NEXT: 1 3 1.00 vfrczps %ymm0, %ymm3 -# CHECK-NEXT: 2 10 1.00 * vfrczps (%rax), %ymm3 -# CHECK-NEXT: 1 3 1.00 vfrczsd %xmm0, %xmm3 -# CHECK-NEXT: 2 9 1.00 * vfrczsd (%rax), %xmm3 -# CHECK-NEXT: 1 3 1.00 vfrczss %xmm0, %xmm3 -# CHECK-NEXT: 2 9 1.00 * vfrczss (%rax), %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcmov %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcmov (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcmov %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 1 1.00 vpcmov %ymm0, %ymm1, %ymm2, %ymm3 -# CHECK-NEXT: 2 8 1.00 * vpcmov (%rax), %ymm0, %ymm1, %ymm3 -# CHECK-NEXT: 2 8 1.00 * vpcmov %ymm0, (%rax), %ymm1, %ymm3 -# CHECK-NEXT: 1 1 0.50 vpcomb $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomb $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomd $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomd $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomq $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomq $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomub $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomub $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomud $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomud $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomuq $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomuq $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomuw $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomuw $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpcomw $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpcomw $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 1 1 1.00 vpermil2pd $0, %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpermil2pd $0, (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpermil2pd $0, %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 1 1.00 vpermil2pd $0, %ymm0, %ymm1, %ymm2, %ymm3 -# CHECK-NEXT: 2 8 1.00 * vpermil2pd $0, (%rax), %ymm0, %ymm1, %ymm3 -# CHECK-NEXT: 2 8 1.00 * vpermil2pd $0, %ymm0, (%rax), %ymm1, %ymm3 -# CHECK-NEXT: 1 1 1.00 vpermil2ps $0, %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpermil2ps $0, (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpermil2ps $0, %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 1 1.00 vpermil2ps $0, %ymm0, %ymm1, %ymm2, %ymm3 -# CHECK-NEXT: 2 8 1.00 * vpermil2ps $0, (%rax), %ymm0, %ymm1, %ymm3 -# CHECK-NEXT: 2 8 1.00 * vpermil2ps $0, %ymm0, (%rax), %ymm1, %ymm3 -# CHECK-NEXT: 3 3 1.50 vphaddbd %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddbd (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddbq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddbq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddbw %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddbw (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphadddq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphadddq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddubd %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddubd (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddubq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddubq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddubw %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddubw (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddudq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddudq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphadduwd %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphadduwd (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphadduwq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphadduwq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddwd %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddwd (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphaddwq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphaddwq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphsubbw %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphsubbw (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphsubdq %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphsubdq (%rax), %xmm3 -# CHECK-NEXT: 3 3 1.50 vphsubwd %xmm0, %xmm3 -# CHECK-NEXT: 4 9 1.50 * vphsubwd (%rax), %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacsdd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacsdd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacsdqh %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacsdqh %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacsdql %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacsdql %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacssdd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacssdd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacssdqh %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacssdqh %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacssdql %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacssdql %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacsswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacsswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacssww %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacssww %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmacsww %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmacsww %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmadcsswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmadcsswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 5 1.00 vpmadcswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 11 1.00 * vpmadcswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 1 0.50 vpperm %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpperm (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 0.50 * vpperm %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotb %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotb (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotb %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotb $0, %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotb $0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotd %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotd (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotd %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotd $0, %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotd $0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotq %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotq (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotq %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotq $0, %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotq $0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotw %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotw (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotw %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vprotw $0, %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vprotw $0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshab %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshab (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshab %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshad %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshad (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshad %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshaq %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshaq (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshaq %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshaw %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshaw (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshaw %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshlb %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshlb (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshlb %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshld %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshld (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshld %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshlq %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshlq (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshlq %xmm0, (%rax), %xmm3 -# CHECK-NEXT: 1 1 1.00 vpshlw %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshlw (%rax), %xmm0, %xmm3 -# CHECK-NEXT: 2 7 1.00 * vpshlw %xmm0, (%rax), %xmm3 - -# CHECK: Resources: -# CHECK-NEXT: [0] - SBDivider -# CHECK-NEXT: [1] - SBFPDivider -# CHECK-NEXT: [2] - SBPort0 -# CHECK-NEXT: [3] - SBPort1 -# CHECK-NEXT: [4] - SBPort4 -# CHECK-NEXT: [5] - SBPort5 -# CHECK-NEXT: [6.0] - SBPort23 -# CHECK-NEXT: [6.1] - SBPort23 - -# CHECK: Resource pressure per iteration: -# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] -# CHECK-NEXT: - - 68.00 68.00 - 71.00 41.50 41.50 - -# CHECK: Resource pressure by instruction: -# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions: -# CHECK-NEXT: - - - 1.00 - - - - vfrczpd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 vfrczpd (%rax), %xmm3 -# CHECK-NEXT: - - - 1.00 - - - - vfrczpd %ymm0, %ymm3 -# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 vfrczpd (%rax), %ymm3 -# CHECK-NEXT: - - - 1.00 - - - - vfrczps %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 vfrczps (%rax), %xmm3 -# CHECK-NEXT: - - - 1.00 - - - - vfrczps %ymm0, %ymm3 -# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 vfrczps (%rax), %ymm3 -# CHECK-NEXT: - - - 1.00 - - - - vfrczsd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 vfrczsd (%rax), %xmm3 -# CHECK-NEXT: - - - 1.00 - - - - vfrczss %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.00 - - 0.50 0.50 vfrczss (%rax), %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcmov %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcmov (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcmov %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - - - - 1.00 - - vpcmov %ymm0, %ymm1, %ymm2, %ymm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpcmov (%rax), %ymm0, %ymm1, %ymm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpcmov %ymm0, (%rax), %ymm1, %ymm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomb $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomb $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomd $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomd $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomq $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomq $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomub $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomub $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomud $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomud $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomuq $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomuq $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomuw $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomuw $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpcomw $0, %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpcomw $0, (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - - - - 1.00 - - vpermil2pd $0, %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2pd $0, (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2pd $0, %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - - - - 1.00 - - vpermil2pd $0, %ymm0, %ymm1, %ymm2, %ymm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2pd $0, (%rax), %ymm0, %ymm1, %ymm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2pd $0, %ymm0, (%rax), %ymm1, %ymm3 -# CHECK-NEXT: - - - - - 1.00 - - vpermil2ps $0, %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2ps $0, (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2ps $0, %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - - - - 1.00 - - vpermil2ps $0, %ymm0, %ymm1, %ymm2, %ymm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2ps $0, (%rax), %ymm0, %ymm1, %ymm3 -# CHECK-NEXT: - - - - - 1.00 0.50 0.50 vpermil2ps $0, %ymm0, (%rax), %ymm1, %ymm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddbd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddbd (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddbq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddbq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddbw %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddbw (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphadddq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphadddq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddubd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddubd (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddubq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddubq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddubw %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddubw (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddudq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddudq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphadduwd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphadduwd (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphadduwq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphadduwq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddwd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddwd (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphaddwq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphaddwq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphsubbw %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphsubbw (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphsubdq %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphsubdq (%rax), %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 - - vphsubwd %xmm0, %xmm3 -# CHECK-NEXT: - - - 1.50 - 1.50 0.50 0.50 vphsubwd (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacsdd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacsdd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacsdqh %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacsdqh %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacsdql %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacsdql %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacssdd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacssdd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacssdqh %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacssdqh %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacssdql %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacssdql %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacsswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacsswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacssww %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacssww %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmacsww %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmacsww %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmadcsswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmadcsswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpmadcswd %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpmadcswd %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 - - vpperm %xmm0, %xmm1, %xmm2, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpperm (%rax), %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - - 0.50 - 0.50 0.50 0.50 vpperm %xmm0, (%rax), %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotb %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotb (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotb %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotb $0, %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotb $0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotd %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotd (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotd %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotd $0, %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotd $0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotq %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotq (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotq %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotq $0, %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotq $0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotw %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotw (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotw %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vprotw $0, %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vprotw $0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshab %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshab (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshab %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshad %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshad (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshad %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshaq %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshaq (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshaq %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshaw %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshaw (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshaw %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshlb %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshlb (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshlb %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshld %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshld (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshld %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshlq %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshlq (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshlq %xmm0, (%rax), %xmm3 -# CHECK-NEXT: - - 1.00 - - - - - vpshlw %xmm0, %xmm1, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshlw (%rax), %xmm0, %xmm3 -# CHECK-NEXT: - - 1.00 - - - 0.50 0.50 vpshlw %xmm0, (%rax), %xmm3 Index: test/tools/llvm-mca/X86/Generic/xop-super-registers-1.s =================================================================== --- test/tools/llvm-mca/X86/Generic/xop-super-registers-1.s +++ test/tools/llvm-mca/X86/Generic/xop-super-registers-1.s @@ -1,21 +1,21 @@ # NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py # RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -timeline -timeline-max-iterations=2 < %s | FileCheck %s - vmulps %ymm0, %ymm1, %ymm2 - vfrczpd %xmm1, %xmm2 - vmulps %ymm2, %ymm3, %ymm4 - vaddps %ymm4, %ymm5, %ymm6 - vmulps %ymm6, %ymm3, %ymm4 - vaddps %ymm4, %ymm5, %ymm0 + vmulps %ymm0, %ymm1, %ymm2 + vphaddbd %xmm1, %xmm2 + vmulps %ymm2, %ymm3, %ymm4 + vaddps %ymm4, %ymm5, %ymm6 + vmulps %ymm6, %ymm3, %ymm4 + vaddps %ymm4, %ymm5, %ymm0 # CHECK: Iterations: 100 # CHECK-NEXT: Instructions: 600 -# CHECK-NEXT: Total Cycles: 318 -# CHECK-NEXT: Total uOps: 600 +# CHECK-NEXT: Total Cycles: 322 +# CHECK-NEXT: Total uOps: 800 # CHECK: Dispatch Width: 4 -# CHECK-NEXT: uOps Per Cycle: 1.89 -# CHECK-NEXT: IPC: 1.89 +# CHECK-NEXT: uOps Per Cycle: 2.48 +# CHECK-NEXT: IPC: 1.86 # CHECK-NEXT: Block RThroughput: 3.0 # CHECK: Instruction Info: @@ -28,7 +28,7 @@ # CHECK: [1] [2] [3] [4] [5] [6] Instructions: # CHECK-NEXT: 1 5 1.00 vmulps %ymm0, %ymm1, %ymm2 -# CHECK-NEXT: 1 3 1.00 vfrczpd %xmm1, %xmm2 +# CHECK-NEXT: 3 3 1.50 vphaddbd %xmm1, %xmm2 # CHECK-NEXT: 1 5 1.00 vmulps %ymm2, %ymm3, %ymm4 # CHECK-NEXT: 1 3 1.00 vaddps %ymm4, %ymm5, %ymm6 # CHECK-NEXT: 1 5 1.00 vmulps %ymm6, %ymm3, %ymm4 @@ -46,12 +46,12 @@ # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] -# CHECK-NEXT: - - 3.00 3.00 - - - - +# CHECK-NEXT: - - 3.00 2.51 - 2.49 - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions: # CHECK-NEXT: - - 1.00 - - - - - vmulps %ymm0, %ymm1, %ymm2 -# CHECK-NEXT: - - - 1.00 - - - - vfrczpd %xmm1, %xmm2 +# CHECK-NEXT: - - - 0.51 - 2.49 - - vphaddbd %xmm1, %xmm2 # CHECK-NEXT: - - 1.00 - - - - - vmulps %ymm2, %ymm3, %ymm4 # CHECK-NEXT: - - - 1.00 - - - - vaddps %ymm4, %ymm5, %ymm6 # CHECK-NEXT: - - 1.00 - - - - - vmulps %ymm6, %ymm3, %ymm4 @@ -59,20 +59,20 @@ # CHECK: Timeline view: # CHECK-NEXT: 0123456789 -# CHECK-NEXT: Index 0123456789 0123456 +# CHECK-NEXT: Index 0123456789 01234567 -# CHECK: [0,0] DeeeeeER . . . .. vmulps %ymm0, %ymm1, %ymm2 -# CHECK-NEXT: [0,1] DeeeE--R . . . .. vfrczpd %xmm1, %xmm2 -# CHECK-NEXT: [0,2] D===eeeeeER . . .. vmulps %ymm2, %ymm3, %ymm4 -# CHECK-NEXT: [0,3] D========eeeER . . .. vaddps %ymm4, %ymm5, %ymm6 -# CHECK-NEXT: [0,4] .D==========eeeeeER . .. vmulps %ymm6, %ymm3, %ymm4 -# CHECK-NEXT: [0,5] .D===============eeeER .. vaddps %ymm4, %ymm5, %ymm0 -# CHECK-NEXT: [1,0] .D==================eeeeeER vmulps %ymm0, %ymm1, %ymm2 -# CHECK-NEXT: [1,1] .DeeeE--------------------R vfrczpd %xmm1, %xmm2 -# CHECK-NEXT: [1,2] . D==eeeeeE---------------R vmulps %ymm2, %ymm3, %ymm4 -# CHECK-NEXT: [1,3] . D=======eeeE------------R vaddps %ymm4, %ymm5, %ymm6 -# CHECK-NEXT: [1,4] . D==========eeeeeE-------R vmulps %ymm6, %ymm3, %ymm4 -# CHECK-NEXT: [1,5] . D===============eeeE----R vaddps %ymm4, %ymm5, %ymm0 +# CHECK: [0,0] DeeeeeER . . . . . vmulps %ymm0, %ymm1, %ymm2 +# CHECK-NEXT: [0,1] DeeeE--R . . . . . vphaddbd %xmm1, %xmm2 +# CHECK-NEXT: [0,2] .D==eeeeeER . . . . vmulps %ymm2, %ymm3, %ymm4 +# CHECK-NEXT: [0,3] .D========eeeER. . . . vaddps %ymm4, %ymm5, %ymm6 +# CHECK-NEXT: [0,4] .D===========eeeeeER. . . vmulps %ymm6, %ymm3, %ymm4 +# CHECK-NEXT: [0,5] .D================eeeER . . vaddps %ymm4, %ymm5, %ymm0 +# CHECK-NEXT: [1,0] . D==================eeeeeER vmulps %ymm0, %ymm1, %ymm2 +# CHECK-NEXT: [1,1] . DeeeE--------------------R vphaddbd %xmm1, %xmm2 +# CHECK-NEXT: [1,2] . D==eeeeeE---------------R vmulps %ymm2, %ymm3, %ymm4 +# CHECK-NEXT: [1,3] . D=======eeeE------------R vaddps %ymm4, %ymm5, %ymm6 +# CHECK-NEXT: [1,4] . D==========eeeeeE-------R vmulps %ymm6, %ymm3, %ymm4 +# CHECK-NEXT: [1,5] . D===============eeeE----R vaddps %ymm4, %ymm5, %ymm0 # CHECK: Average Wait times (based on the timeline view): # CHECK-NEXT: [0]: Executions @@ -82,8 +82,8 @@ # CHECK: [0] [1] [2] [3] # CHECK-NEXT: 0. 2 10.0 0.5 0.0 vmulps %ymm0, %ymm1, %ymm2 -# CHECK-NEXT: 1. 2 1.0 1.0 11.0 vfrczpd %xmm1, %xmm2 -# CHECK-NEXT: 2. 2 3.5 0.0 7.5 vmulps %ymm2, %ymm3, %ymm4 -# CHECK-NEXT: 3. 2 8.5 0.0 6.0 vaddps %ymm4, %ymm5, %ymm6 -# CHECK-NEXT: 4. 2 11.0 0.0 3.5 vmulps %ymm6, %ymm3, %ymm4 -# CHECK-NEXT: 5. 2 16.0 0.0 2.0 vaddps %ymm4, %ymm5, %ymm0 +# CHECK-NEXT: 1. 2 1.0 1.0 11.0 vphaddbd %xmm1, %xmm2 +# CHECK-NEXT: 2. 2 3.0 0.0 7.5 vmulps %ymm2, %ymm3, %ymm4 +# CHECK-NEXT: 3. 2 8.5 0.5 6.0 vaddps %ymm4, %ymm5, %ymm6 +# CHECK-NEXT: 4. 2 11.5 0.0 3.5 vmulps %ymm6, %ymm3, %ymm4 +# CHECK-NEXT: 5. 2 16.5 0.0 2.0 vaddps %ymm4, %ymm5, %ymm0