| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +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 -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 |
| 3 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE42 |
| 4 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 |
| 5 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 |
| 6 | |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 7 | ; Lower common integer comparisons such as 'isPositive' efficiently: |
| 8 | ; https://llvm.org/bugs/show_bug.cgi?id=26701 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 9 | |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 10 | define <16 x i8> @test_pcmpgtb(<16 x i8> %x) { |
| 11 | ; SSE-LABEL: test_pcmpgtb: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 12 | ; SSE: # BB#0: |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 13 | ; SSE-NEXT: pcmpeqd %xmm1, %xmm1 |
| 14 | ; SSE-NEXT: pcmpgtb %xmm1, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 15 | ; SSE-NEXT: retq |
| 16 | ; |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 17 | ; AVX-LABEL: test_pcmpgtb: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 18 | ; AVX: # BB#0: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 19 | ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 20 | ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 21 | ; AVX-NEXT: retq |
| 22 | %sign = ashr <16 x i8> %x, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7> |
| 23 | %not = xor <16 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> |
| 24 | ret <16 x i8> %not |
| 25 | } |
| 26 | |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 27 | define <8 x i16> @test_pcmpgtw(<8 x i16> %x) { |
| 28 | ; SSE-LABEL: test_pcmpgtw: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 29 | ; SSE: # BB#0: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 30 | ; SSE-NEXT: pcmpeqd %xmm1, %xmm1 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 31 | ; SSE-NEXT: pcmpgtw %xmm1, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 32 | ; SSE-NEXT: retq |
| 33 | ; |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 34 | ; AVX-LABEL: test_pcmpgtw: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 35 | ; AVX: # BB#0: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 36 | ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 37 | ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 38 | ; AVX-NEXT: retq |
| 39 | %sign = ashr <8 x i16> %x, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> |
| 40 | %not = xor <8 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> |
| 41 | ret <8 x i16> %not |
| 42 | } |
| 43 | |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 44 | define <4 x i32> @test_pcmpgtd(<4 x i32> %x) { |
| 45 | ; SSE-LABEL: test_pcmpgtd: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 46 | ; SSE: # BB#0: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 47 | ; SSE-NEXT: pcmpeqd %xmm1, %xmm1 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 48 | ; SSE-NEXT: pcmpgtd %xmm1, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 49 | ; SSE-NEXT: retq |
| 50 | ; |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 51 | ; AVX-LABEL: test_pcmpgtd: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 52 | ; AVX: # BB#0: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 53 | ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 54 | ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 55 | ; AVX-NEXT: retq |
| 56 | %sign = ashr <4 x i32> %x, <i32 31, i32 31, i32 31, i32 31> |
| 57 | %not = xor <4 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1> |
| 58 | ret <4 x i32> %not |
| 59 | } |
| 60 | |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 61 | define <2 x i64> @test_pcmpgtq(<2 x i64> %x) { |
| 62 | ; SSE2-LABEL: test_pcmpgtq: |
| 63 | ; SSE2: # BB#0: |
| 64 | ; SSE2-NEXT: psrad $31, %xmm0 |
| 65 | ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3] |
| 66 | ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 |
| 67 | ; SSE2-NEXT: pxor %xmm1, %xmm0 |
| 68 | ; SSE2-NEXT: retq |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 69 | ; |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 70 | ; SSE42-LABEL: test_pcmpgtq: |
| 71 | ; SSE42: # BB#0: |
| 72 | ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1 |
| 73 | ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 |
| 74 | ; SSE42-NEXT: retq |
| 75 | ; |
| 76 | ; AVX-LABEL: test_pcmpgtq: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 77 | ; AVX: # BB#0: |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 78 | ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 79 | ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 |
| Sanjay Patel | 7ed9361 | 2016-02-26 01:14:27 +0000 | [diff] [blame] | 80 | ; AVX-NEXT: retq |
| 81 | %sign = ashr <2 x i64> %x, <i64 63, i64 63> |
| 82 | %not = xor <2 x i64> %sign, <i64 -1, i64 -1> |
| 83 | ret <2 x i64> %not |
| 84 | } |
| 85 | |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 86 | define <1 x i128> @test_strange_type(<1 x i128> %x) { |
| 87 | ; SSE2-LABEL: test_strange_type: |
| 88 | ; SSE2: # BB#0: |
| 89 | ; SSE2-NEXT: sarq $63, %rsi |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 90 | ; SSE2-NEXT: movd %rsi, %xmm0 |
| Simon Pilgrim | d3df400 | 2016-03-28 21:33:52 +0000 | [diff] [blame] | 91 | ; SSE2-NEXT: notq %rsi |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 92 | ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] |
| Simon Pilgrim | d3df400 | 2016-03-28 21:33:52 +0000 | [diff] [blame] | 93 | ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1 |
| 94 | ; SSE2-NEXT: pxor %xmm0, %xmm1 |
| 95 | ; SSE2-NEXT: movd %xmm1, %rax |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 96 | ; SSE2-NEXT: movq %rsi, %rdx |
| 97 | ; SSE2-NEXT: retq |
| 98 | ; |
| 99 | ; SSE42-LABEL: test_strange_type: |
| 100 | ; SSE42: # BB#0: |
| 101 | ; SSE42-NEXT: sarq $63, %rsi |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 102 | ; SSE42-NEXT: movd %rsi, %xmm0 |
| 103 | ; SSE42-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] |
| Simon Pilgrim | d3df400 | 2016-03-28 21:33:52 +0000 | [diff] [blame] | 104 | ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1 |
| 105 | ; SSE42-NEXT: pxor %xmm0, %xmm1 |
| 106 | ; SSE42-NEXT: movd %xmm1, %rax |
| 107 | ; SSE42-NEXT: pextrq $1, %xmm1, %rdx |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 108 | ; SSE42-NEXT: retq |
| 109 | ; |
| 110 | ; AVX1-LABEL: test_strange_type: |
| 111 | ; AVX1: # BB#0: |
| 112 | ; AVX1-NEXT: sarq $63, %rsi |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 113 | ; AVX1-NEXT: vmovq %rsi, %xmm0 |
| 114 | ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] |
| Simon Pilgrim | d3df400 | 2016-03-28 21:33:52 +0000 | [diff] [blame] | 115 | ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| 116 | ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 117 | ; AVX1-NEXT: vmovq %xmm0, %rax |
| 118 | ; AVX1-NEXT: vpextrq $1, %xmm0, %rdx |
| 119 | ; AVX1-NEXT: retq |
| 120 | ; |
| 121 | ; AVX2-LABEL: test_strange_type: |
| 122 | ; AVX2: # BB#0: |
| 123 | ; AVX2-NEXT: sarq $63, %rsi |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 124 | ; AVX2-NEXT: vmovq %rsi, %xmm0 |
| 125 | ; AVX2-NEXT: vpbroadcastq %xmm0, %xmm0 |
| Simon Pilgrim | d3df400 | 2016-03-28 21:33:52 +0000 | [diff] [blame] | 126 | ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| 127 | ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0 |
| Sanjay Patel | 4402a32 | 2016-02-26 16:56:03 +0000 | [diff] [blame] | 128 | ; AVX2-NEXT: vmovq %xmm0, %rax |
| 129 | ; AVX2-NEXT: vpextrq $1, %xmm0, %rdx |
| 130 | ; AVX2-NEXT: retq |
| 131 | %sign = ashr <1 x i128> %x, <i128 127> |
| 132 | %not = xor <1 x i128> %sign, <i128 -1> |
| 133 | ret <1 x i128> %not |
| 134 | } |
| 135 | |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 136 | define <32 x i8> @test_pcmpgtb_256(<32 x i8> %x) { |
| 137 | ; SSE-LABEL: test_pcmpgtb_256: |
| 138 | ; SSE: # BB#0: |
| 139 | ; SSE-NEXT: pcmpeqd %xmm2, %xmm2 |
| 140 | ; SSE-NEXT: pcmpgtb %xmm2, %xmm0 |
| 141 | ; SSE-NEXT: pcmpgtb %xmm2, %xmm1 |
| 142 | ; SSE-NEXT: retq |
| 143 | ; |
| 144 | ; AVX1-LABEL: test_pcmpgtb_256: |
| 145 | ; AVX1: # BB#0: |
| 146 | ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 |
| 147 | ; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 |
| 148 | ; AVX1-NEXT: vpcmpgtb %xmm1, %xmm2, %xmm1 |
| 149 | ; AVX1-NEXT: vpcmpgtb %xmm0, %xmm2, %xmm0 |
| 150 | ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 |
| 151 | ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| 152 | ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 |
| 153 | ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 |
| 154 | ; AVX1-NEXT: retq |
| 155 | ; |
| 156 | ; AVX2-LABEL: test_pcmpgtb_256: |
| 157 | ; AVX2: # BB#0: |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 158 | ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 |
| Sanjay Patel | 155193c | 2016-02-26 18:42:50 +0000 | [diff] [blame] | 159 | ; AVX2-NEXT: vpcmpgtb %ymm1, %ymm0, %ymm0 |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 160 | ; AVX2-NEXT: retq |
| 161 | %sign = ashr <32 x i8> %x, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7> |
| 162 | %not = xor <32 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> |
| 163 | ret <32 x i8> %not |
| 164 | } |
| 165 | |
| 166 | define <16 x i16> @test_pcmpgtw_256(<16 x i16> %x) { |
| 167 | ; SSE-LABEL: test_pcmpgtw_256: |
| 168 | ; SSE: # BB#0: |
| 169 | ; SSE-NEXT: pcmpeqd %xmm2, %xmm2 |
| 170 | ; SSE-NEXT: pcmpgtw %xmm2, %xmm0 |
| 171 | ; SSE-NEXT: pcmpgtw %xmm2, %xmm1 |
| 172 | ; SSE-NEXT: retq |
| 173 | ; |
| 174 | ; AVX1-LABEL: test_pcmpgtw_256: |
| 175 | ; AVX1: # BB#0: |
| 176 | ; AVX1-NEXT: vpsraw $15, %xmm0, %xmm1 |
| 177 | ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 |
| 178 | ; AVX1-NEXT: vpsraw $15, %xmm0, %xmm0 |
| 179 | ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 |
| 180 | ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| 181 | ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 |
| 182 | ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 |
| 183 | ; AVX1-NEXT: retq |
| 184 | ; |
| 185 | ; AVX2-LABEL: test_pcmpgtw_256: |
| 186 | ; AVX2: # BB#0: |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 187 | ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 |
| Sanjay Patel | 155193c | 2016-02-26 18:42:50 +0000 | [diff] [blame] | 188 | ; AVX2-NEXT: vpcmpgtw %ymm1, %ymm0, %ymm0 |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 189 | ; AVX2-NEXT: retq |
| 190 | %sign = ashr <16 x i16> %x, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15> |
| 191 | %not = xor <16 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> |
| 192 | ret <16 x i16> %not |
| 193 | } |
| 194 | |
| 195 | define <8 x i32> @test_pcmpgtd_256(<8 x i32> %x) { |
| 196 | ; SSE-LABEL: test_pcmpgtd_256: |
| 197 | ; SSE: # BB#0: |
| 198 | ; SSE-NEXT: pcmpeqd %xmm2, %xmm2 |
| 199 | ; SSE-NEXT: pcmpgtd %xmm2, %xmm0 |
| 200 | ; SSE-NEXT: pcmpgtd %xmm2, %xmm1 |
| 201 | ; SSE-NEXT: retq |
| 202 | ; |
| 203 | ; AVX1-LABEL: test_pcmpgtd_256: |
| 204 | ; AVX1: # BB#0: |
| 205 | ; AVX1-NEXT: vpsrad $31, %xmm0, %xmm1 |
| 206 | ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 |
| 207 | ; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 |
| 208 | ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 |
| 209 | ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| 210 | ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 |
| 211 | ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 |
| 212 | ; AVX1-NEXT: retq |
| 213 | ; |
| 214 | ; AVX2-LABEL: test_pcmpgtd_256: |
| 215 | ; AVX2: # BB#0: |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 216 | ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 |
| Sanjay Patel | 155193c | 2016-02-26 18:42:50 +0000 | [diff] [blame] | 217 | ; AVX2-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0 |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 218 | ; AVX2-NEXT: retq |
| 219 | %sign = ashr <8 x i32> %x, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31> |
| 220 | %not = xor <8 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1> |
| 221 | ret <8 x i32> %not |
| 222 | } |
| 223 | |
| 224 | define <4 x i64> @test_pcmpgtq_256(<4 x i64> %x) { |
| 225 | ; SSE2-LABEL: test_pcmpgtq_256: |
| 226 | ; SSE2: # BB#0: |
| 227 | ; SSE2-NEXT: psrad $31, %xmm1 |
| 228 | ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] |
| 229 | ; SSE2-NEXT: psrad $31, %xmm0 |
| 230 | ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] |
| 231 | ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2 |
| 232 | ; SSE2-NEXT: pxor %xmm2, %xmm0 |
| 233 | ; SSE2-NEXT: pxor %xmm2, %xmm1 |
| 234 | ; SSE2-NEXT: retq |
| 235 | ; |
| 236 | ; SSE42-LABEL: test_pcmpgtq_256: |
| 237 | ; SSE42: # BB#0: |
| 238 | ; SSE42-NEXT: pcmpeqd %xmm2, %xmm2 |
| 239 | ; SSE42-NEXT: pcmpgtq %xmm2, %xmm0 |
| 240 | ; SSE42-NEXT: pcmpgtq %xmm2, %xmm1 |
| 241 | ; SSE42-NEXT: retq |
| 242 | ; |
| 243 | ; AVX1-LABEL: test_pcmpgtq_256: |
| 244 | ; AVX1: # BB#0: |
| 245 | ; AVX1-NEXT: vpsrad $31, %xmm0, %xmm1 |
| 246 | ; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] |
| 247 | ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 |
| 248 | ; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 |
| 249 | ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] |
| 250 | ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 |
| 251 | ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 |
| 252 | ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1 |
| 253 | ; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 |
| 254 | ; AVX1-NEXT: retq |
| 255 | ; |
| 256 | ; AVX2-LABEL: test_pcmpgtq_256: |
| 257 | ; AVX2: # BB#0: |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 258 | ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1 |
| Sanjay Patel | 155193c | 2016-02-26 18:42:50 +0000 | [diff] [blame] | 259 | ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm0 |
| Sanjay Patel | 334685b | 2016-02-26 18:07:58 +0000 | [diff] [blame] | 260 | ; AVX2-NEXT: retq |
| 261 | %sign = ashr <4 x i64> %x, <i64 63, i64 63, i64 63, i64 63> |
| 262 | %not = xor <4 x i64> %sign, <i64 -1, i64 -1, i64 -1, i64 -1> |
| 263 | ret <4 x i64> %not |
| 264 | } |
| 265 | |