1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2 ; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=-avx,+sse4.2 | FileCheck %s 3 4 define i32 @test_x86_sse42_pcmpestri128(<16 x i8> %a0, <16 x i8> %a2) { 5 ; CHECK-LABEL: test_x86_sse42_pcmpestri128: 6 ; CHECK: ## BB#0: 7 ; CHECK-NEXT: movl $7, %eax 8 ; CHECK-NEXT: movl $7, %edx 9 ; CHECK-NEXT: pcmpestri $7, %xmm1, %xmm0 10 ; CHECK-NEXT: movl %ecx, %eax 11 ; CHECK-NEXT: retl 12 %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 13 ret i32 %res 14 } 15 declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 16 17 18 define i32 @test_x86_sse42_pcmpestri128_load(<16 x i8>* %a0, <16 x i8>* %a2) { 19 ; CHECK-LABEL: test_x86_sse42_pcmpestri128_load: 20 ; CHECK: ## BB#0: 21 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx 22 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 23 ; CHECK-NEXT: movdqa (%eax), %xmm0 24 ; CHECK-NEXT: movl $7, %eax 25 ; CHECK-NEXT: movl $7, %edx 26 ; CHECK-NEXT: pcmpestri $7, (%ecx), %xmm0 27 ; CHECK-NEXT: movl %ecx, %eax 28 ; CHECK-NEXT: retl 29 %1 = load <16 x i8>, <16 x i8>* %a0 30 %2 = load <16 x i8>, <16 x i8>* %a2 31 %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7) ; <i32> [#uses=1] 32 ret i32 %res 33 } 34 35 36 define i32 @test_x86_sse42_pcmpestria128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 37 ; CHECK-LABEL: test_x86_sse42_pcmpestria128: 38 ; CHECK: ## BB#0: 39 ; CHECK-NEXT: pushl %ebx 40 ; CHECK-NEXT: movl $7, %eax 41 ; CHECK-NEXT: movl $7, %edx 42 ; CHECK-NEXT: xorl %ebx, %ebx 43 ; CHECK-NEXT: pcmpestri $7, %xmm1, %xmm0 44 ; CHECK-NEXT: seta %bl 45 ; CHECK-NEXT: movl %ebx, %eax 46 ; CHECK-NEXT: popl %ebx 47 ; CHECK-NEXT: retl 48 %res = call i32 @llvm.x86.sse42.pcmpestria128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 49 ret i32 %res 50 } 51 declare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 52 53 54 define i32 @test_x86_sse42_pcmpestric128(<16 x i8> %a0, <16 x i8> %a2) { 55 ; CHECK-LABEL: test_x86_sse42_pcmpestric128: 56 ; CHECK: ## BB#0: 57 ; CHECK-NEXT: movl $7, %eax 58 ; CHECK-NEXT: movl $7, %edx 59 ; CHECK-NEXT: pcmpestri $7, %xmm1, %xmm0 60 ; CHECK-NEXT: sbbl %eax, %eax 61 ; CHECK-NEXT: andl $1, %eax 62 ; CHECK-NEXT: retl 63 %res = call i32 @llvm.x86.sse42.pcmpestric128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 64 ret i32 %res 65 } 66 declare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 67 68 69 define i32 @test_x86_sse42_pcmpestrio128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 70 ; CHECK-LABEL: test_x86_sse42_pcmpestrio128: 71 ; CHECK: ## BB#0: 72 ; CHECK-NEXT: pushl %ebx 73 ; CHECK-NEXT: movl $7, %eax 74 ; CHECK-NEXT: movl $7, %edx 75 ; CHECK-NEXT: xorl %ebx, %ebx 76 ; CHECK-NEXT: pcmpestri $7, %xmm1, %xmm0 77 ; CHECK-NEXT: seto %bl 78 ; CHECK-NEXT: movl %ebx, %eax 79 ; CHECK-NEXT: popl %ebx 80 ; CHECK-NEXT: retl 81 %res = call i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 82 ret i32 %res 83 } 84 declare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 85 86 87 define i32 @test_x86_sse42_pcmpestris128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 88 ; CHECK-LABEL: test_x86_sse42_pcmpestris128: 89 ; CHECK: ## BB#0: 90 ; CHECK-NEXT: pushl %ebx 91 ; CHECK-NEXT: movl $7, %eax 92 ; CHECK-NEXT: movl $7, %edx 93 ; CHECK-NEXT: xorl %ebx, %ebx 94 ; CHECK-NEXT: pcmpestri $7, %xmm1, %xmm0 95 ; CHECK-NEXT: sets %bl 96 ; CHECK-NEXT: movl %ebx, %eax 97 ; CHECK-NEXT: popl %ebx 98 ; CHECK-NEXT: retl 99 %res = call i32 @llvm.x86.sse42.pcmpestris128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 100 ret i32 %res 101 } 102 declare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 103 104 105 define i32 @test_x86_sse42_pcmpestriz128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 106 ; CHECK-LABEL: test_x86_sse42_pcmpestriz128: 107 ; CHECK: ## BB#0: 108 ; CHECK-NEXT: pushl %ebx 109 ; CHECK-NEXT: movl $7, %eax 110 ; CHECK-NEXT: movl $7, %edx 111 ; CHECK-NEXT: xorl %ebx, %ebx 112 ; CHECK-NEXT: pcmpestri $7, %xmm1, %xmm0 113 ; CHECK-NEXT: sete %bl 114 ; CHECK-NEXT: movl %ebx, %eax 115 ; CHECK-NEXT: popl %ebx 116 ; CHECK-NEXT: retl 117 %res = call i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 118 ret i32 %res 119 } 120 declare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 121 122 123 define <16 x i8> @test_x86_sse42_pcmpestrm128(<16 x i8> %a0, <16 x i8> %a2) { 124 ; CHECK-LABEL: test_x86_sse42_pcmpestrm128: 125 ; CHECK: ## BB#0: 126 ; CHECK-NEXT: movl $7, %eax 127 ; CHECK-NEXT: movl $7, %edx 128 ; CHECK-NEXT: pcmpestrm $7, %xmm1, %xmm0 129 ; CHECK-NEXT: retl 130 %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <<16 x i8>> [#uses=1] 131 ret <16 x i8> %res 132 } 133 declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 134 135 136 define <16 x i8> @test_x86_sse42_pcmpestrm128_load(<16 x i8> %a0, <16 x i8>* %a2) { 137 ; CHECK-LABEL: test_x86_sse42_pcmpestrm128_load: 138 ; CHECK: ## BB#0: 139 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx 140 ; CHECK-NEXT: movl $7, %eax 141 ; CHECK-NEXT: movl $7, %edx 142 ; CHECK-NEXT: pcmpestrm $7, (%ecx), %xmm0 143 ; CHECK-NEXT: retl 144 %1 = load <16 x i8>, <16 x i8>* %a2 145 %res = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %1, i32 7, i8 7) ; <<16 x i8>> [#uses=1] 146 ret <16 x i8> %res 147 } 148 149 150 define i32 @test_x86_sse42_pcmpistri128(<16 x i8> %a0, <16 x i8> %a1) { 151 ; CHECK-LABEL: test_x86_sse42_pcmpistri128: 152 ; CHECK: ## BB#0: 153 ; CHECK-NEXT: pcmpistri $7, %xmm1, %xmm0 154 ; CHECK-NEXT: movl %ecx, %eax 155 ; CHECK-NEXT: retl 156 %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 157 ret i32 %res 158 } 159 declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone 160 161 162 define i32 @test_x86_sse42_pcmpistri128_load(<16 x i8>* %a0, <16 x i8>* %a1) { 163 ; CHECK-LABEL: test_x86_sse42_pcmpistri128_load: 164 ; CHECK: ## BB#0: 165 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 166 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx 167 ; CHECK-NEXT: movdqa (%ecx), %xmm0 168 ; CHECK-NEXT: pcmpistri $7, (%eax), %xmm0 169 ; CHECK-NEXT: movl %ecx, %eax 170 ; CHECK-NEXT: retl 171 %1 = load <16 x i8>, <16 x i8>* %a0 172 %2 = load <16 x i8>, <16 x i8>* %a1 173 %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %1, <16 x i8> %2, i8 7) ; <i32> [#uses=1] 174 ret i32 %res 175 } 176 177 178 define i32 @test_x86_sse42_pcmpistria128(<16 x i8> %a0, <16 x i8> %a1) { 179 ; CHECK-LABEL: test_x86_sse42_pcmpistria128: 180 ; CHECK: ## BB#0: 181 ; CHECK-NEXT: xorl %eax, %eax 182 ; CHECK-NEXT: pcmpistri $7, %xmm1, %xmm0 183 ; CHECK-NEXT: seta %al 184 ; CHECK-NEXT: retl 185 %res = call i32 @llvm.x86.sse42.pcmpistria128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 186 ret i32 %res 187 } 188 declare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone 189 190 191 define i32 @test_x86_sse42_pcmpistric128(<16 x i8> %a0, <16 x i8> %a1) { 192 ; CHECK-LABEL: test_x86_sse42_pcmpistric128: 193 ; CHECK: ## BB#0: 194 ; CHECK-NEXT: pcmpistri $7, %xmm1, %xmm0 195 ; CHECK-NEXT: sbbl %eax, %eax 196 ; CHECK-NEXT: andl $1, %eax 197 ; CHECK-NEXT: retl 198 %res = call i32 @llvm.x86.sse42.pcmpistric128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 199 ret i32 %res 200 } 201 declare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone 202 203 204 define i32 @test_x86_sse42_pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1) { 205 ; CHECK-LABEL: test_x86_sse42_pcmpistrio128: 206 ; CHECK: ## BB#0: 207 ; CHECK-NEXT: xorl %eax, %eax 208 ; CHECK-NEXT: pcmpistri $7, %xmm1, %xmm0 209 ; CHECK-NEXT: seto %al 210 ; CHECK-NEXT: retl 211 %res = call i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 212 ret i32 %res 213 } 214 declare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone 215 216 217 define i32 @test_x86_sse42_pcmpistris128(<16 x i8> %a0, <16 x i8> %a1) { 218 ; CHECK-LABEL: test_x86_sse42_pcmpistris128: 219 ; CHECK: ## BB#0: 220 ; CHECK-NEXT: xorl %eax, %eax 221 ; CHECK-NEXT: pcmpistri $7, %xmm1, %xmm0 222 ; CHECK-NEXT: sets %al 223 ; CHECK-NEXT: retl 224 %res = call i32 @llvm.x86.sse42.pcmpistris128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 225 ret i32 %res 226 } 227 declare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone 228 229 230 define i32 @test_x86_sse42_pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1) { 231 ; CHECK-LABEL: test_x86_sse42_pcmpistriz128: 232 ; CHECK: ## BB#0: 233 ; CHECK-NEXT: xorl %eax, %eax 234 ; CHECK-NEXT: pcmpistri $7, %xmm1, %xmm0 235 ; CHECK-NEXT: sete %al 236 ; CHECK-NEXT: retl 237 %res = call i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 238 ret i32 %res 239 } 240 declare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone 241 242 243 define <16 x i8> @test_x86_sse42_pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1) { 244 ; CHECK-LABEL: test_x86_sse42_pcmpistrm128: 245 ; CHECK: ## BB#0: 246 ; CHECK-NEXT: pcmpistrm $7, %xmm1, %xmm0 247 ; CHECK-NEXT: retl 248 %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<16 x i8>> [#uses=1] 249 ret <16 x i8> %res 250 } 251 declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone 252 253 254 define <16 x i8> @test_x86_sse42_pcmpistrm128_load(<16 x i8> %a0, <16 x i8>* %a1) { 255 ; CHECK-LABEL: test_x86_sse42_pcmpistrm128_load: 256 ; CHECK: ## BB#0: 257 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 258 ; CHECK-NEXT: pcmpistrm $7, (%eax), %xmm0 259 ; CHECK-NEXT: retl 260 %1 = load <16 x i8>, <16 x i8>* %a1 261 %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %1, i8 7) ; <<16 x i8>> [#uses=1] 262 ret <16 x i8> %res 263 } 264