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 4define 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} 15declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 16 17 18define 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 36define 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} 51declare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 52 53 54define 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} 66declare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 67 68 69define 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} 84declare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 85 86 87define 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} 102declare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 103 104 105define 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} 120declare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 121 122 123define <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} 133declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 134 135 136define <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 150define 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} 159declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone 160 161 162define 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 178define 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} 188declare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone 189 190 191define 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} 201declare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone 202 203 204define 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} 214declare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone 215 216 217define 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} 227declare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone 228 229 230define 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} 240declare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone 241 242 243define <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} 251declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone 252 253 254define <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