| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| 2 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL |
| 3 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL |
| 4 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 |
| 5 | |
| 6 | define <32 x i8> @test_pabsb(<32 x i8> %a0, <32 x i8> *%a1) { |
| 7 | ; HASWELL-LABEL: test_pabsb: |
| 8 | ; HASWELL: # BB#0: |
| 9 | ; HASWELL-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.50] |
| 10 | ; HASWELL-NEXT: vpabsb (%rdi), %ymm1 # sched: [5:0.50] |
| 11 | ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 12 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 13 | ; |
| 14 | ; ZNVER1-LABEL: test_pabsb: |
| 15 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 16 | ; ZNVER1-NEXT: vpabsb (%rdi), %ymm1 # sched: [8:0.50] |
| 17 | ; ZNVER1-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.25] |
| 18 | ; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 19 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 20 | %1 = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %a0) |
| 21 | %2 = load <32 x i8>, <32 x i8> *%a1, align 32 |
| 22 | %3 = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %2) |
| 23 | %4 = or <32 x i8> %1, %3 |
| 24 | ret <32 x i8> %4 |
| 25 | } |
| 26 | declare <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8>) nounwind readnone |
| 27 | |
| 28 | define <8 x i32> @test_pabsd(<8 x i32> %a0, <8 x i32> *%a1) { |
| 29 | ; HASWELL-LABEL: test_pabsd: |
| 30 | ; HASWELL: # BB#0: |
| 31 | ; HASWELL-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 32 | ; HASWELL-NEXT: vpabsd (%rdi), %ymm1 # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 33 | ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 34 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 35 | ; |
| 36 | ; ZNVER1-LABEL: test_pabsd: |
| 37 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 38 | ; ZNVER1-NEXT: vpabsd (%rdi), %ymm1 # sched: [8:0.50] |
| 39 | ; ZNVER1-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.25] |
| 40 | ; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 41 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 42 | %1 = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %a0) |
| 43 | %2 = load <8 x i32>, <8 x i32> *%a1, align 32 |
| 44 | %3 = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %2) |
| 45 | %4 = or <8 x i32> %1, %3 |
| 46 | ret <8 x i32> %4 |
| 47 | } |
| 48 | declare <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32>) nounwind readnone |
| 49 | |
| 50 | define <16 x i16> @test_pabsw(<16 x i16> %a0, <16 x i16> *%a1) { |
| 51 | ; HASWELL-LABEL: test_pabsw: |
| 52 | ; HASWELL: # BB#0: |
| 53 | ; HASWELL-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 54 | ; HASWELL-NEXT: vpabsw (%rdi), %ymm1 # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 55 | ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 56 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 57 | ; |
| 58 | ; ZNVER1-LABEL: test_pabsw: |
| 59 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 60 | ; ZNVER1-NEXT: vpabsw (%rdi), %ymm1 # sched: [8:0.50] |
| 61 | ; ZNVER1-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.25] |
| 62 | ; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 63 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 64 | %1 = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %a0) |
| 65 | %2 = load <16 x i16>, <16 x i16> *%a1, align 32 |
| 66 | %3 = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %2) |
| 67 | %4 = or <16 x i16> %1, %3 |
| 68 | ret <16 x i16> %4 |
| 69 | } |
| 70 | declare <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16>) nounwind readnone |
| 71 | |
| 72 | define <32 x i8> @test_paddb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> *%a2) { |
| 73 | ; HASWELL-LABEL: test_paddb: |
| 74 | ; HASWELL: # BB#0: |
| 75 | ; HASWELL-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| 76 | ; HASWELL-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 77 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 78 | ; |
| 79 | ; ZNVER1-LABEL: test_paddb: |
| 80 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 81 | ; ZNVER1-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 82 | ; ZNVER1-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 83 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 84 | %1 = add <32 x i8> %a0, %a1 |
| 85 | %2 = load <32 x i8>, <32 x i8> *%a2, align 32 |
| 86 | %3 = add <32 x i8> %1, %2 |
| 87 | ret <32 x i8> %3 |
| 88 | } |
| 89 | |
| 90 | define <8 x i32> @test_paddd(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) { |
| 91 | ; HASWELL-LABEL: test_paddd: |
| 92 | ; HASWELL: # BB#0: |
| 93 | ; HASWELL-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| 94 | ; HASWELL-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 95 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 96 | ; |
| 97 | ; ZNVER1-LABEL: test_paddd: |
| 98 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 99 | ; ZNVER1-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 100 | ; ZNVER1-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 101 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 102 | %1 = add <8 x i32> %a0, %a1 |
| 103 | %2 = load <8 x i32>, <8 x i32> *%a2, align 32 |
| 104 | %3 = add <8 x i32> %1, %2 |
| 105 | ret <8 x i32> %3 |
| 106 | } |
| 107 | |
| 108 | define <4 x i64> @test_paddq(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) { |
| 109 | ; HASWELL-LABEL: test_paddq: |
| 110 | ; HASWELL: # BB#0: |
| 111 | ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 112 | ; HASWELL-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| 113 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 114 | ; |
| 115 | ; ZNVER1-LABEL: test_paddq: |
| 116 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 117 | ; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 118 | ; ZNVER1-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 119 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 120 | %1 = add <4 x i64> %a0, %a1 |
| 121 | %2 = load <4 x i64>, <4 x i64> *%a2, align 32 |
| 122 | %3 = add <4 x i64> %1, %2 |
| 123 | ret <4 x i64> %3 |
| 124 | } |
| 125 | |
| 126 | define <16 x i16> @test_paddw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) { |
| 127 | ; HASWELL-LABEL: test_paddw: |
| 128 | ; HASWELL: # BB#0: |
| 129 | ; HASWELL-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| 130 | ; HASWELL-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 131 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 132 | ; |
| 133 | ; ZNVER1-LABEL: test_paddw: |
| 134 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 135 | ; ZNVER1-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 136 | ; ZNVER1-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 137 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 138 | %1 = add <16 x i16> %a0, %a1 |
| 139 | %2 = load <16 x i16>, <16 x i16> *%a2, align 32 |
| 140 | %3 = add <16 x i16> %1, %2 |
| 141 | ret <16 x i16> %3 |
| 142 | } |
| 143 | |
| 144 | define <4 x i64> @test_pand(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) { |
| 145 | ; HASWELL-LABEL: test_pand: |
| 146 | ; HASWELL: # BB#0: |
| 147 | ; HASWELL-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 148 | ; HASWELL-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 149 | ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 150 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 151 | ; |
| 152 | ; ZNVER1-LABEL: test_pand: |
| 153 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 154 | ; ZNVER1-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 155 | ; ZNVER1-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 156 | ; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 157 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 158 | %1 = and <4 x i64> %a0, %a1 |
| 159 | %2 = load <4 x i64>, <4 x i64> *%a2, align 32 |
| 160 | %3 = and <4 x i64> %1, %2 |
| 161 | %4 = add <4 x i64> %3, %a1 |
| 162 | ret <4 x i64> %4 |
| 163 | } |
| 164 | |
| 165 | define <4 x i64> @test_pandn(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) { |
| 166 | ; HASWELL-LABEL: test_pandn: |
| 167 | ; HASWELL: # BB#0: |
| 168 | ; HASWELL-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 169 | ; HASWELL-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 170 | ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 171 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 172 | ; |
| 173 | ; ZNVER1-LABEL: test_pandn: |
| 174 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 175 | ; ZNVER1-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 176 | ; ZNVER1-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [8:0.50] |
| 177 | ; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 178 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 179 | %1 = xor <4 x i64> %a0, <i64 -1, i64 -1, i64 -1, i64 -1> |
| 180 | %2 = and <4 x i64> %a1, %1 |
| 181 | %3 = load <4 x i64>, <4 x i64> *%a2, align 32 |
| 182 | %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1> |
| 183 | %5 = and <4 x i64> %3, %4 |
| 184 | %6 = add <4 x i64> %2, %5 |
| 185 | ret <4 x i64> %6 |
| 186 | } |
| 187 | |
| 188 | define <8 x i32> @test_pmulld(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) { |
| 189 | ; HASWELL-LABEL: test_pmulld: |
| 190 | ; HASWELL: # BB#0: |
| 191 | ; HASWELL-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [10:2.00] |
| 192 | ; HASWELL-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [10:2.00] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 193 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 194 | ; |
| 195 | ; ZNVER1-LABEL: test_pmulld: |
| 196 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 197 | ; ZNVER1-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [4:1.00] |
| 198 | ; ZNVER1-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [11:1.00] |
| 199 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 200 | %1 = mul <8 x i32> %a0, %a1 |
| 201 | %2 = load <8 x i32>, <8 x i32> *%a2, align 32 |
| 202 | %3 = mul <8 x i32> %1, %2 |
| 203 | ret <8 x i32> %3 |
| 204 | } |
| 205 | |
| 206 | define <16 x i16> @test_pmullw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) { |
| 207 | ; HASWELL-LABEL: test_pmullw: |
| 208 | ; HASWELL: # BB#0: |
| 209 | ; HASWELL-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [5:1.00] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 210 | ; HASWELL-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [9:1.00] |
| 211 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 212 | ; |
| 213 | ; ZNVER1-LABEL: test_pmullw: |
| 214 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 215 | ; ZNVER1-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [4:1.00] |
| 216 | ; ZNVER1-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [11:1.00] |
| 217 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 218 | %1 = mul <16 x i16> %a0, %a1 |
| 219 | %2 = load <16 x i16>, <16 x i16> *%a2, align 32 |
| 220 | %3 = mul <16 x i16> %1, %2 |
| 221 | ret <16 x i16> %3 |
| 222 | } |
| 223 | |
| 224 | define <4 x i64> @test_por(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) { |
| 225 | ; HASWELL-LABEL: test_por: |
| 226 | ; HASWELL: # BB#0: |
| 227 | ; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 228 | ; HASWELL-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 229 | ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 230 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 231 | ; |
| 232 | ; ZNVER1-LABEL: test_por: |
| 233 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 234 | ; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 235 | ; ZNVER1-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 236 | ; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 237 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 238 | %1 = or <4 x i64> %a0, %a1 |
| 239 | %2 = load <4 x i64>, <4 x i64> *%a2, align 32 |
| 240 | %3 = or <4 x i64> %1, %2 |
| 241 | %4 = add <4 x i64> %3, %a1 |
| 242 | ret <4 x i64> %4 |
| 243 | } |
| 244 | |
| 245 | define <32 x i8> @test_psubb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> *%a2) { |
| 246 | ; HASWELL-LABEL: test_psubb: |
| 247 | ; HASWELL: # BB#0: |
| 248 | ; HASWELL-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 249 | ; HASWELL-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| 250 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 251 | ; |
| 252 | ; ZNVER1-LABEL: test_psubb: |
| 253 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 254 | ; ZNVER1-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 255 | ; ZNVER1-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 256 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 257 | %1 = sub <32 x i8> %a0, %a1 |
| 258 | %2 = load <32 x i8>, <32 x i8> *%a2, align 32 |
| 259 | %3 = sub <32 x i8> %1, %2 |
| 260 | ret <32 x i8> %3 |
| 261 | } |
| 262 | |
| 263 | define <8 x i32> @test_psubd(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) { |
| 264 | ; HASWELL-LABEL: test_psubd: |
| 265 | ; HASWELL: # BB#0: |
| 266 | ; HASWELL-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 267 | ; HASWELL-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| 268 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 269 | ; |
| 270 | ; ZNVER1-LABEL: test_psubd: |
| 271 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 272 | ; ZNVER1-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 273 | ; ZNVER1-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 274 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 275 | %1 = sub <8 x i32> %a0, %a1 |
| 276 | %2 = load <8 x i32>, <8 x i32> *%a2, align 32 |
| 277 | %3 = sub <8 x i32> %1, %2 |
| 278 | ret <8 x i32> %3 |
| 279 | } |
| 280 | |
| 281 | define <4 x i64> @test_psubq(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) { |
| 282 | ; HASWELL-LABEL: test_psubq: |
| 283 | ; HASWELL: # BB#0: |
| 284 | ; HASWELL-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 285 | ; HASWELL-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| 286 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 287 | ; |
| 288 | ; ZNVER1-LABEL: test_psubq: |
| 289 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 290 | ; ZNVER1-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 291 | ; ZNVER1-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 292 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 293 | %1 = sub <4 x i64> %a0, %a1 |
| 294 | %2 = load <4 x i64>, <4 x i64> *%a2, align 32 |
| 295 | %3 = sub <4 x i64> %1, %2 |
| 296 | ret <4 x i64> %3 |
| 297 | } |
| 298 | |
| 299 | define <16 x i16> @test_psubw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) { |
| 300 | ; HASWELL-LABEL: test_psubw: |
| 301 | ; HASWELL: # BB#0: |
| 302 | ; HASWELL-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 303 | ; HASWELL-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| 304 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 305 | ; |
| 306 | ; ZNVER1-LABEL: test_psubw: |
| 307 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 308 | ; ZNVER1-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 309 | ; ZNVER1-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 310 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 311 | %1 = sub <16 x i16> %a0, %a1 |
| 312 | %2 = load <16 x i16>, <16 x i16> *%a2, align 32 |
| 313 | %3 = sub <16 x i16> %1, %2 |
| 314 | ret <16 x i16> %3 |
| 315 | } |
| 316 | |
| 317 | define <4 x i64> @test_pxor(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) { |
| 318 | ; HASWELL-LABEL: test_pxor: |
| 319 | ; HASWELL: # BB#0: |
| 320 | ; HASWELL-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.33] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 321 | ; HASWELL-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 322 | ; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50] |
| Michael Zuckerman | f668400 | 2017-06-28 11:23:31 +0000 | [diff] [blame] | 323 | ; HASWELL-NEXT: retq # sched: [1:1.00] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 324 | ; |
| 325 | ; ZNVER1-LABEL: test_pxor: |
| 326 | ; ZNVER1: # BB#0: |
| Craig Topper | 106b5b6 | 2017-07-19 02:45:14 +0000 | [diff] [blame^] | 327 | ; ZNVER1-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 328 | ; ZNVER1-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [8:0.50] |
| 329 | ; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25] |
| 330 | ; ZNVER1-NEXT: retq # sched: [5:0.50] |
| Simon Pilgrim | 946f08c | 2017-05-06 13:46:09 +0000 | [diff] [blame] | 331 | %1 = xor <4 x i64> %a0, %a1 |
| 332 | %2 = load <4 x i64>, <4 x i64> *%a2, align 32 |
| 333 | %3 = xor <4 x i64> %1, %2 |
| 334 | %4 = add <4 x i64> %3, %a1 |
| 335 | ret <4 x i64> %4 |
| 336 | } |
| 337 | |
| 338 | !0 = !{i32 1} |