1# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py 2# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=icelake-server -instruction-tables < %s | FileCheck %s 3 4vpermb %xmm16, %xmm17, %xmm19 5vpermb (%rax), %xmm17, %xmm19 6vpermb %xmm16, %xmm17, %xmm19 {k1} 7vpermb (%rax), %xmm17, %xmm19 {k1} 8vpermb %xmm16, %xmm17, %xmm19 {k1}{z} 9vpermb (%rax), %xmm17, %xmm19 {k1}{z} 10 11vpermb %ymm16, %ymm17, %ymm19 12vpermb (%rax), %ymm17, %ymm19 13vpermb %ymm16, %ymm17, %ymm19 {k1} 14vpermb (%rax), %ymm17, %ymm19 {k1} 15vpermb %ymm16, %ymm17, %ymm19 {k1}{z} 16vpermb (%rax), %ymm17, %ymm19 {k1}{z} 17 18vpermi2b %xmm16, %xmm17, %xmm19 19vpermi2b (%rax), %xmm17, %xmm19 20vpermi2b %xmm16, %xmm17, %xmm19 {k1} 21vpermi2b (%rax), %xmm17, %xmm19 {k1} 22vpermi2b %xmm16, %xmm17, %xmm19 {k1}{z} 23vpermi2b (%rax), %xmm17, %xmm19 {k1}{z} 24 25vpermi2b %ymm16, %ymm17, %ymm19 26vpermi2b (%rax), %ymm17, %ymm19 27vpermi2b %ymm16, %ymm17, %ymm19 {k1} 28vpermi2b (%rax), %ymm17, %ymm19 {k1} 29vpermi2b %ymm16, %ymm17, %ymm19 {k1}{z} 30vpermi2b (%rax), %ymm17, %ymm19 {k1}{z} 31 32vpermt2b %xmm16, %xmm17, %xmm19 33vpermt2b (%rax), %xmm17, %xmm19 34vpermt2b %xmm16, %xmm17, %xmm19 {k1} 35vpermt2b (%rax), %xmm17, %xmm19 {k1} 36vpermt2b %xmm16, %xmm17, %xmm19 {k1}{z} 37vpermt2b (%rax), %xmm17, %xmm19 {k1}{z} 38 39vpermt2b %ymm16, %ymm17, %ymm19 40vpermt2b (%rax), %ymm17, %ymm19 41vpermt2b %ymm16, %ymm17, %ymm19 {k1} 42vpermt2b (%rax), %ymm17, %ymm19 {k1} 43vpermt2b %ymm16, %ymm17, %ymm19 {k1}{z} 44vpermt2b (%rax), %ymm17, %ymm19 {k1}{z} 45 46vpmultishiftqb %xmm16, %xmm17, %xmm19 47vpmultishiftqb (%rax), %xmm17, %xmm19 48vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 49vpmultishiftqb %xmm16, %xmm17, %xmm19 {k1} 50vpmultishiftqb (%rax), %xmm17, %xmm19 {k1} 51vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 {k1} 52vpmultishiftqb %xmm16, %xmm17, %xmm19 {k1}{z} 53vpmultishiftqb (%rax), %xmm17, %xmm19 {k1}{z} 54vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 {k1}{z} 55 56vpmultishiftqb %ymm16, %ymm17, %ymm19 57vpmultishiftqb (%rax), %ymm17, %ymm19 58vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 59vpmultishiftqb %ymm16, %ymm17, %ymm19 {k1} 60vpmultishiftqb (%rax), %ymm17, %ymm19 {k1} 61vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 {k1} 62vpmultishiftqb %ymm16, %ymm17, %ymm19 {k1}{z} 63vpmultishiftqb (%rax), %ymm17, %ymm19 {k1}{z} 64vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 {k1}{z} 65 66# CHECK: Instruction Info: 67# CHECK-NEXT: [1]: #uOps 68# CHECK-NEXT: [2]: Latency 69# CHECK-NEXT: [3]: RThroughput 70# CHECK-NEXT: [4]: MayLoad 71# CHECK-NEXT: [5]: MayStore 72# CHECK-NEXT: [6]: HasSideEffects (U) 73 74# CHECK: [1] [2] [3] [4] [5] [6] Instructions: 75# CHECK-NEXT: 1 3 1.00 vpermb %xmm16, %xmm17, %xmm19 76# CHECK-NEXT: 2 10 1.00 * vpermb (%rax), %xmm17, %xmm19 77# CHECK-NEXT: 1 3 1.00 vpermb %xmm16, %xmm17, %xmm19 {%k1} 78# CHECK-NEXT: 2 10 1.00 * vpermb (%rax), %xmm17, %xmm19 {%k1} 79# CHECK-NEXT: 1 3 1.00 vpermb %xmm16, %xmm17, %xmm19 {%k1} {z} 80# CHECK-NEXT: 2 10 1.00 * vpermb (%rax), %xmm17, %xmm19 {%k1} {z} 81# CHECK-NEXT: 1 3 1.00 vpermb %ymm16, %ymm17, %ymm19 82# CHECK-NEXT: 2 10 1.00 * vpermb (%rax), %ymm17, %ymm19 83# CHECK-NEXT: 1 3 1.00 vpermb %ymm16, %ymm17, %ymm19 {%k1} 84# CHECK-NEXT: 2 10 1.00 * vpermb (%rax), %ymm17, %ymm19 {%k1} 85# CHECK-NEXT: 1 3 1.00 vpermb %ymm16, %ymm17, %ymm19 {%k1} {z} 86# CHECK-NEXT: 2 10 1.00 * vpermb (%rax), %ymm17, %ymm19 {%k1} {z} 87# CHECK-NEXT: 1 3 1.00 vpermi2b %xmm16, %xmm17, %xmm19 88# CHECK-NEXT: 2 10 1.00 * vpermi2b (%rax), %xmm17, %xmm19 89# CHECK-NEXT: 1 3 1.00 vpermi2b %xmm16, %xmm17, %xmm19 {%k1} 90# CHECK-NEXT: 2 10 1.00 * vpermi2b (%rax), %xmm17, %xmm19 {%k1} 91# CHECK-NEXT: 1 3 1.00 vpermi2b %xmm16, %xmm17, %xmm19 {%k1} {z} 92# CHECK-NEXT: 2 10 1.00 * vpermi2b (%rax), %xmm17, %xmm19 {%k1} {z} 93# CHECK-NEXT: 1 3 1.00 vpermi2b %ymm16, %ymm17, %ymm19 94# CHECK-NEXT: 2 10 1.00 * vpermi2b (%rax), %ymm17, %ymm19 95# CHECK-NEXT: 1 3 1.00 vpermi2b %ymm16, %ymm17, %ymm19 {%k1} 96# CHECK-NEXT: 2 10 1.00 * vpermi2b (%rax), %ymm17, %ymm19 {%k1} 97# CHECK-NEXT: 1 3 1.00 vpermi2b %ymm16, %ymm17, %ymm19 {%k1} {z} 98# CHECK-NEXT: 2 10 1.00 * vpermi2b (%rax), %ymm17, %ymm19 {%k1} {z} 99# CHECK-NEXT: 1 3 1.00 vpermt2b %xmm16, %xmm17, %xmm19 100# CHECK-NEXT: 2 10 1.00 * vpermt2b (%rax), %xmm17, %xmm19 101# CHECK-NEXT: 1 3 1.00 vpermt2b %xmm16, %xmm17, %xmm19 {%k1} 102# CHECK-NEXT: 2 10 1.00 * vpermt2b (%rax), %xmm17, %xmm19 {%k1} 103# CHECK-NEXT: 1 3 1.00 vpermt2b %xmm16, %xmm17, %xmm19 {%k1} {z} 104# CHECK-NEXT: 2 10 1.00 * vpermt2b (%rax), %xmm17, %xmm19 {%k1} {z} 105# CHECK-NEXT: 1 3 1.00 vpermt2b %ymm16, %ymm17, %ymm19 106# CHECK-NEXT: 2 10 1.00 * vpermt2b (%rax), %ymm17, %ymm19 107# CHECK-NEXT: 1 3 1.00 vpermt2b %ymm16, %ymm17, %ymm19 {%k1} 108# CHECK-NEXT: 2 10 1.00 * vpermt2b (%rax), %ymm17, %ymm19 {%k1} 109# CHECK-NEXT: 1 3 1.00 vpermt2b %ymm16, %ymm17, %ymm19 {%k1} {z} 110# CHECK-NEXT: 2 10 1.00 * vpermt2b (%rax), %ymm17, %ymm19 {%k1} {z} 111# CHECK-NEXT: 1 1 0.50 vpmultishiftqb %xmm16, %xmm17, %xmm19 112# CHECK-NEXT: 2 7 0.50 * vpmultishiftqb (%rax), %xmm17, %xmm19 113# CHECK-NEXT: 2 7 0.50 * vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 114# CHECK-NEXT: 1 1 0.50 vpmultishiftqb %xmm16, %xmm17, %xmm19 {%k1} 115# CHECK-NEXT: 2 7 0.50 * vpmultishiftqb (%rax), %xmm17, %xmm19 {%k1} 116# CHECK-NEXT: 2 7 0.50 * vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 {%k1} 117# CHECK-NEXT: 1 1 0.50 vpmultishiftqb %xmm16, %xmm17, %xmm19 {%k1} {z} 118# CHECK-NEXT: 2 7 0.50 * vpmultishiftqb (%rax), %xmm17, %xmm19 {%k1} {z} 119# CHECK-NEXT: 2 7 0.50 * vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 {%k1} {z} 120# CHECK-NEXT: 1 1 0.50 vpmultishiftqb %ymm16, %ymm17, %ymm19 121# CHECK-NEXT: 2 8 0.50 * vpmultishiftqb (%rax), %ymm17, %ymm19 122# CHECK-NEXT: 2 8 0.50 * vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 123# CHECK-NEXT: 1 1 0.50 vpmultishiftqb %ymm16, %ymm17, %ymm19 {%k1} 124# CHECK-NEXT: 2 8 0.50 * vpmultishiftqb (%rax), %ymm17, %ymm19 {%k1} 125# CHECK-NEXT: 2 8 0.50 * vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 {%k1} 126# CHECK-NEXT: 1 1 0.50 vpmultishiftqb %ymm16, %ymm17, %ymm19 {%k1} {z} 127# CHECK-NEXT: 2 8 0.50 * vpmultishiftqb (%rax), %ymm17, %ymm19 {%k1} {z} 128# CHECK-NEXT: 2 8 0.50 * vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 {%k1} {z} 129 130# CHECK: Resources: 131# CHECK-NEXT: [0] - ICXDivider 132# CHECK-NEXT: [1] - ICXFPDivider 133# CHECK-NEXT: [2] - ICXPort0 134# CHECK-NEXT: [3] - ICXPort1 135# CHECK-NEXT: [4] - ICXPort2 136# CHECK-NEXT: [5] - ICXPort3 137# CHECK-NEXT: [6] - ICXPort4 138# CHECK-NEXT: [7] - ICXPort5 139# CHECK-NEXT: [8] - ICXPort6 140# CHECK-NEXT: [9] - ICXPort7 141# CHECK-NEXT: [10] - ICXPort8 142# CHECK-NEXT: [11] - ICXPort9 143 144# CHECK: Resource pressure per iteration: 145# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 146# CHECK-NEXT: - - 9.00 9.00 15.00 15.00 - 36.00 - - - - 147 148# CHECK: Resource pressure by instruction: 149# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions: 150# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermb %xmm16, %xmm17, %xmm19 151# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermb (%rax), %xmm17, %xmm19 152# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermb %xmm16, %xmm17, %xmm19 {%k1} 153# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermb (%rax), %xmm17, %xmm19 {%k1} 154# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermb %xmm16, %xmm17, %xmm19 {%k1} {z} 155# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermb (%rax), %xmm17, %xmm19 {%k1} {z} 156# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermb %ymm16, %ymm17, %ymm19 157# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermb (%rax), %ymm17, %ymm19 158# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermb %ymm16, %ymm17, %ymm19 {%k1} 159# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermb (%rax), %ymm17, %ymm19 {%k1} 160# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermb %ymm16, %ymm17, %ymm19 {%k1} {z} 161# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermb (%rax), %ymm17, %ymm19 {%k1} {z} 162# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermi2b %xmm16, %xmm17, %xmm19 163# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermi2b (%rax), %xmm17, %xmm19 164# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermi2b %xmm16, %xmm17, %xmm19 {%k1} 165# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermi2b (%rax), %xmm17, %xmm19 {%k1} 166# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermi2b %xmm16, %xmm17, %xmm19 {%k1} {z} 167# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermi2b (%rax), %xmm17, %xmm19 {%k1} {z} 168# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermi2b %ymm16, %ymm17, %ymm19 169# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermi2b (%rax), %ymm17, %ymm19 170# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermi2b %ymm16, %ymm17, %ymm19 {%k1} 171# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermi2b (%rax), %ymm17, %ymm19 {%k1} 172# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermi2b %ymm16, %ymm17, %ymm19 {%k1} {z} 173# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermi2b (%rax), %ymm17, %ymm19 {%k1} {z} 174# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermt2b %xmm16, %xmm17, %xmm19 175# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermt2b (%rax), %xmm17, %xmm19 176# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermt2b %xmm16, %xmm17, %xmm19 {%k1} 177# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermt2b (%rax), %xmm17, %xmm19 {%k1} 178# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermt2b %xmm16, %xmm17, %xmm19 {%k1} {z} 179# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermt2b (%rax), %xmm17, %xmm19 {%k1} {z} 180# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermt2b %ymm16, %ymm17, %ymm19 181# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermt2b (%rax), %ymm17, %ymm19 182# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermt2b %ymm16, %ymm17, %ymm19 {%k1} 183# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermt2b (%rax), %ymm17, %ymm19 {%k1} 184# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermt2b %ymm16, %ymm17, %ymm19 {%k1} {z} 185# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermt2b (%rax), %ymm17, %ymm19 {%k1} {z} 186# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmultishiftqb %xmm16, %xmm17, %xmm19 187# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax), %xmm17, %xmm19 188# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 189# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmultishiftqb %xmm16, %xmm17, %xmm19 {%k1} 190# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax), %xmm17, %xmm19 {%k1} 191# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 {%k1} 192# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmultishiftqb %xmm16, %xmm17, %xmm19 {%k1} {z} 193# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax), %xmm17, %xmm19 {%k1} {z} 194# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax){1to2}, %xmm17, %xmm19 {%k1} {z} 195# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmultishiftqb %ymm16, %ymm17, %ymm19 196# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax), %ymm17, %ymm19 197# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 198# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmultishiftqb %ymm16, %ymm17, %ymm19 {%k1} 199# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax), %ymm17, %ymm19 {%k1} 200# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 {%k1} 201# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmultishiftqb %ymm16, %ymm17, %ymm19 {%k1} {z} 202# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax), %ymm17, %ymm19 {%k1} {z} 203# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmultishiftqb (%rax){1to4}, %ymm17, %ymm19 {%k1} {z} 204