1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -disable-peephole -mtriple=i386-apple-darwin -mattr=+sse4.2 -show-mc-encoding | FileCheck %s --check-prefixes=SSE,X86-SSE 3; RUN: llc < %s -disable-peephole -mtriple=i386-apple-darwin -mattr=+sse4.2,-crc32 -show-mc-encoding | FileCheck %s --check-prefixes=SSE,X86-SSE 4; RUN: llc < %s -disable-peephole -mtriple=i386-apple-darwin -mattr=+avx -show-mc-encoding | FileCheck %s --check-prefixes=AVX,X86-AVX,X86-AVX1 5; RUN: llc < %s -disable-peephole -mtriple=i386-apple-darwin -mattr=+avx512f,+avx512bw,+avx512dq,+avx512vl -show-mc-encoding | FileCheck %s --check-prefixes=AVX,X86-AVX,X86-AVX512 6; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+sse4.2 -show-mc-encoding | FileCheck %s --check-prefixes=SSE,X64-SSE 7; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+sse4.2,-crc32 -show-mc-encoding | FileCheck %s --check-prefixes=SSE,X64-SSE 8; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+avx -show-mc-encoding | FileCheck %s --check-prefixes=AVX,X64-AVX,X64-AVX1 9; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+avx512f,+avx512bw,+avx512dq,+avx512vl -show-mc-encoding | FileCheck %s --check-prefixes=AVX,X64-AVX,X64-AVX512 10 11define i32 @test_x86_sse42_pcmpestri128(<16 x i8> %a0, <16 x i8> %a2) { 12; SSE-LABEL: test_x86_sse42_pcmpestri128: 13; SSE: ## %bb.0: 14; SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 15; SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 16; SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 17; SSE-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 18; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 19; 20; AVX-LABEL: test_x86_sse42_pcmpestri128: 21; AVX: ## %bb.0: 22; AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 23; AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 24; AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 25; AVX-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 26; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 27 %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 28 ret i32 %res 29} 30declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 31 32 33define i32 @test_x86_sse42_pcmpestri128_load(ptr %a0, ptr %a2) { 34; X86-SSE-LABEL: test_x86_sse42_pcmpestri128_load: 35; X86-SSE: ## %bb.0: 36; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x08] 37; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 38; X86-SSE-NEXT: movdqa (%eax), %xmm0 ## encoding: [0x66,0x0f,0x6f,0x00] 39; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 40; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 41; X86-SSE-NEXT: pcmpestri $7, (%ecx), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0x01,0x07] 42; X86-SSE-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 43; X86-SSE-NEXT: retl ## encoding: [0xc3] 44; 45; X86-AVX1-LABEL: test_x86_sse42_pcmpestri128_load: 46; X86-AVX1: ## %bb.0: 47; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x08] 48; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 49; X86-AVX1-NEXT: vmovdqa (%eax), %xmm0 ## encoding: [0xc5,0xf9,0x6f,0x00] 50; X86-AVX1-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 51; X86-AVX1-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 52; X86-AVX1-NEXT: vpcmpestri $7, (%ecx), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0x01,0x07] 53; X86-AVX1-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 54; X86-AVX1-NEXT: retl ## encoding: [0xc3] 55; 56; X86-AVX512-LABEL: test_x86_sse42_pcmpestri128_load: 57; X86-AVX512: ## %bb.0: 58; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x08] 59; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 60; X86-AVX512-NEXT: vmovdqa (%eax), %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x6f,0x00] 61; X86-AVX512-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 62; X86-AVX512-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 63; X86-AVX512-NEXT: vpcmpestri $7, (%ecx), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0x01,0x07] 64; X86-AVX512-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 65; X86-AVX512-NEXT: retl ## encoding: [0xc3] 66; 67; X64-SSE-LABEL: test_x86_sse42_pcmpestri128_load: 68; X64-SSE: ## %bb.0: 69; X64-SSE-NEXT: movdqa (%rdi), %xmm0 ## encoding: [0x66,0x0f,0x6f,0x07] 70; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 71; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 72; X64-SSE-NEXT: pcmpestri $7, (%rsi), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0x06,0x07] 73; X64-SSE-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 74; X64-SSE-NEXT: retq ## encoding: [0xc3] 75; 76; X64-AVX1-LABEL: test_x86_sse42_pcmpestri128_load: 77; X64-AVX1: ## %bb.0: 78; X64-AVX1-NEXT: vmovdqa (%rdi), %xmm0 ## encoding: [0xc5,0xf9,0x6f,0x07] 79; X64-AVX1-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 80; X64-AVX1-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 81; X64-AVX1-NEXT: vpcmpestri $7, (%rsi), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0x06,0x07] 82; X64-AVX1-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 83; X64-AVX1-NEXT: retq ## encoding: [0xc3] 84; 85; X64-AVX512-LABEL: test_x86_sse42_pcmpestri128_load: 86; X64-AVX512: ## %bb.0: 87; X64-AVX512-NEXT: vmovdqa (%rdi), %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x6f,0x07] 88; X64-AVX512-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 89; X64-AVX512-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 90; X64-AVX512-NEXT: vpcmpestri $7, (%rsi), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0x06,0x07] 91; X64-AVX512-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 92; X64-AVX512-NEXT: retq ## encoding: [0xc3] 93 %1 = load <16 x i8>, ptr %a0 94 %2 = load <16 x i8>, ptr %a2 95 %res = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7) ; <i32> [#uses=1] 96 ret i32 %res 97} 98 99 100define i32 @test_x86_sse42_pcmpestria128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 101; X86-SSE-LABEL: test_x86_sse42_pcmpestria128: 102; X86-SSE: ## %bb.0: 103; X86-SSE-NEXT: pushl %ebx ## encoding: [0x53] 104; X86-SSE-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 105; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 106; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 107; X86-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 108; X86-SSE-NEXT: seta %bl ## encoding: [0x0f,0x97,0xc3] 109; X86-SSE-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 110; X86-SSE-NEXT: popl %ebx ## encoding: [0x5b] 111; X86-SSE-NEXT: retl ## encoding: [0xc3] 112; 113; X86-AVX-LABEL: test_x86_sse42_pcmpestria128: 114; X86-AVX: ## %bb.0: 115; X86-AVX-NEXT: pushl %ebx ## encoding: [0x53] 116; X86-AVX-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 117; X86-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 118; X86-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 119; X86-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 120; X86-AVX-NEXT: seta %bl ## encoding: [0x0f,0x97,0xc3] 121; X86-AVX-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 122; X86-AVX-NEXT: popl %ebx ## encoding: [0x5b] 123; X86-AVX-NEXT: retl ## encoding: [0xc3] 124; 125; X64-SSE-LABEL: test_x86_sse42_pcmpestria128: 126; X64-SSE: ## %bb.0: 127; X64-SSE-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 128; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 129; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 130; X64-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 131; X64-SSE-NEXT: seta %sil ## encoding: [0x40,0x0f,0x97,0xc6] 132; X64-SSE-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 133; X64-SSE-NEXT: retq ## encoding: [0xc3] 134; 135; X64-AVX-LABEL: test_x86_sse42_pcmpestria128: 136; X64-AVX: ## %bb.0: 137; X64-AVX-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 138; X64-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 139; X64-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 140; X64-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 141; X64-AVX-NEXT: seta %sil ## encoding: [0x40,0x0f,0x97,0xc6] 142; X64-AVX-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 143; X64-AVX-NEXT: retq ## encoding: [0xc3] 144 %res = call i32 @llvm.x86.sse42.pcmpestria128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 145 ret i32 %res 146} 147declare i32 @llvm.x86.sse42.pcmpestria128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 148 149 150define i32 @test_x86_sse42_pcmpestric128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 151; X86-SSE-LABEL: test_x86_sse42_pcmpestric128: 152; X86-SSE: ## %bb.0: 153; X86-SSE-NEXT: pushl %ebx ## encoding: [0x53] 154; X86-SSE-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 155; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 156; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 157; X86-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 158; X86-SSE-NEXT: setb %bl ## encoding: [0x0f,0x92,0xc3] 159; X86-SSE-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 160; X86-SSE-NEXT: popl %ebx ## encoding: [0x5b] 161; X86-SSE-NEXT: retl ## encoding: [0xc3] 162; 163; X86-AVX-LABEL: test_x86_sse42_pcmpestric128: 164; X86-AVX: ## %bb.0: 165; X86-AVX-NEXT: pushl %ebx ## encoding: [0x53] 166; X86-AVX-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 167; X86-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 168; X86-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 169; X86-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 170; X86-AVX-NEXT: setb %bl ## encoding: [0x0f,0x92,0xc3] 171; X86-AVX-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 172; X86-AVX-NEXT: popl %ebx ## encoding: [0x5b] 173; X86-AVX-NEXT: retl ## encoding: [0xc3] 174; 175; X64-SSE-LABEL: test_x86_sse42_pcmpestric128: 176; X64-SSE: ## %bb.0: 177; X64-SSE-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 178; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 179; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 180; X64-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 181; X64-SSE-NEXT: setb %sil ## encoding: [0x40,0x0f,0x92,0xc6] 182; X64-SSE-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 183; X64-SSE-NEXT: retq ## encoding: [0xc3] 184; 185; X64-AVX-LABEL: test_x86_sse42_pcmpestric128: 186; X64-AVX: ## %bb.0: 187; X64-AVX-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 188; X64-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 189; X64-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 190; X64-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 191; X64-AVX-NEXT: setb %sil ## encoding: [0x40,0x0f,0x92,0xc6] 192; X64-AVX-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 193; X64-AVX-NEXT: retq ## encoding: [0xc3] 194 %res = call i32 @llvm.x86.sse42.pcmpestric128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 195 ret i32 %res 196} 197declare i32 @llvm.x86.sse42.pcmpestric128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 198 199 200define i32 @test_x86_sse42_pcmpestrio128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 201; X86-SSE-LABEL: test_x86_sse42_pcmpestrio128: 202; X86-SSE: ## %bb.0: 203; X86-SSE-NEXT: pushl %ebx ## encoding: [0x53] 204; X86-SSE-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 205; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 206; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 207; X86-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 208; X86-SSE-NEXT: seto %bl ## encoding: [0x0f,0x90,0xc3] 209; X86-SSE-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 210; X86-SSE-NEXT: popl %ebx ## encoding: [0x5b] 211; X86-SSE-NEXT: retl ## encoding: [0xc3] 212; 213; X86-AVX-LABEL: test_x86_sse42_pcmpestrio128: 214; X86-AVX: ## %bb.0: 215; X86-AVX-NEXT: pushl %ebx ## encoding: [0x53] 216; X86-AVX-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 217; X86-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 218; X86-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 219; X86-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 220; X86-AVX-NEXT: seto %bl ## encoding: [0x0f,0x90,0xc3] 221; X86-AVX-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 222; X86-AVX-NEXT: popl %ebx ## encoding: [0x5b] 223; X86-AVX-NEXT: retl ## encoding: [0xc3] 224; 225; X64-SSE-LABEL: test_x86_sse42_pcmpestrio128: 226; X64-SSE: ## %bb.0: 227; X64-SSE-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 228; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 229; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 230; X64-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 231; X64-SSE-NEXT: seto %sil ## encoding: [0x40,0x0f,0x90,0xc6] 232; X64-SSE-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 233; X64-SSE-NEXT: retq ## encoding: [0xc3] 234; 235; X64-AVX-LABEL: test_x86_sse42_pcmpestrio128: 236; X64-AVX: ## %bb.0: 237; X64-AVX-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 238; X64-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 239; X64-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 240; X64-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 241; X64-AVX-NEXT: seto %sil ## encoding: [0x40,0x0f,0x90,0xc6] 242; X64-AVX-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 243; X64-AVX-NEXT: retq ## encoding: [0xc3] 244 %res = call i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 245 ret i32 %res 246} 247declare i32 @llvm.x86.sse42.pcmpestrio128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 248 249 250define i32 @test_x86_sse42_pcmpestris128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 251; X86-SSE-LABEL: test_x86_sse42_pcmpestris128: 252; X86-SSE: ## %bb.0: 253; X86-SSE-NEXT: pushl %ebx ## encoding: [0x53] 254; X86-SSE-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 255; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 256; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 257; X86-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 258; X86-SSE-NEXT: sets %bl ## encoding: [0x0f,0x98,0xc3] 259; X86-SSE-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 260; X86-SSE-NEXT: popl %ebx ## encoding: [0x5b] 261; X86-SSE-NEXT: retl ## encoding: [0xc3] 262; 263; X86-AVX-LABEL: test_x86_sse42_pcmpestris128: 264; X86-AVX: ## %bb.0: 265; X86-AVX-NEXT: pushl %ebx ## encoding: [0x53] 266; X86-AVX-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 267; X86-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 268; X86-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 269; X86-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 270; X86-AVX-NEXT: sets %bl ## encoding: [0x0f,0x98,0xc3] 271; X86-AVX-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 272; X86-AVX-NEXT: popl %ebx ## encoding: [0x5b] 273; X86-AVX-NEXT: retl ## encoding: [0xc3] 274; 275; X64-SSE-LABEL: test_x86_sse42_pcmpestris128: 276; X64-SSE: ## %bb.0: 277; X64-SSE-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 278; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 279; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 280; X64-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 281; X64-SSE-NEXT: sets %sil ## encoding: [0x40,0x0f,0x98,0xc6] 282; X64-SSE-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 283; X64-SSE-NEXT: retq ## encoding: [0xc3] 284; 285; X64-AVX-LABEL: test_x86_sse42_pcmpestris128: 286; X64-AVX: ## %bb.0: 287; X64-AVX-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 288; X64-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 289; X64-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 290; X64-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 291; X64-AVX-NEXT: sets %sil ## encoding: [0x40,0x0f,0x98,0xc6] 292; X64-AVX-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 293; X64-AVX-NEXT: retq ## encoding: [0xc3] 294 %res = call i32 @llvm.x86.sse42.pcmpestris128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 295 ret i32 %res 296} 297declare i32 @llvm.x86.sse42.pcmpestris128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 298 299 300define i32 @test_x86_sse42_pcmpestriz128(<16 x i8> %a0, <16 x i8> %a2) nounwind { 301; X86-SSE-LABEL: test_x86_sse42_pcmpestriz128: 302; X86-SSE: ## %bb.0: 303; X86-SSE-NEXT: pushl %ebx ## encoding: [0x53] 304; X86-SSE-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 305; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 306; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 307; X86-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 308; X86-SSE-NEXT: sete %bl ## encoding: [0x0f,0x94,0xc3] 309; X86-SSE-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 310; X86-SSE-NEXT: popl %ebx ## encoding: [0x5b] 311; X86-SSE-NEXT: retl ## encoding: [0xc3] 312; 313; X86-AVX-LABEL: test_x86_sse42_pcmpestriz128: 314; X86-AVX: ## %bb.0: 315; X86-AVX-NEXT: pushl %ebx ## encoding: [0x53] 316; X86-AVX-NEXT: xorl %ebx, %ebx ## encoding: [0x31,0xdb] 317; X86-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 318; X86-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 319; X86-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 320; X86-AVX-NEXT: sete %bl ## encoding: [0x0f,0x94,0xc3] 321; X86-AVX-NEXT: movl %ebx, %eax ## encoding: [0x89,0xd8] 322; X86-AVX-NEXT: popl %ebx ## encoding: [0x5b] 323; X86-AVX-NEXT: retl ## encoding: [0xc3] 324; 325; X64-SSE-LABEL: test_x86_sse42_pcmpestriz128: 326; X64-SSE: ## %bb.0: 327; X64-SSE-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 328; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 329; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 330; X64-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x61,0xc1,0x07] 331; X64-SSE-NEXT: sete %sil ## encoding: [0x40,0x0f,0x94,0xc6] 332; X64-SSE-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 333; X64-SSE-NEXT: retq ## encoding: [0xc3] 334; 335; X64-AVX-LABEL: test_x86_sse42_pcmpestriz128: 336; X64-AVX: ## %bb.0: 337; X64-AVX-NEXT: xorl %esi, %esi ## encoding: [0x31,0xf6] 338; X64-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 339; X64-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 340; X64-AVX-NEXT: vpcmpestri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x61,0xc1,0x07] 341; X64-AVX-NEXT: sete %sil ## encoding: [0x40,0x0f,0x94,0xc6] 342; X64-AVX-NEXT: movl %esi, %eax ## encoding: [0x89,0xf0] 343; X64-AVX-NEXT: retq ## encoding: [0xc3] 344 %res = call i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8> %a0, i32 7, <16 x i8> %a2, i32 7, i8 7) ; <i32> [#uses=1] 345 ret i32 %res 346} 347declare i32 @llvm.x86.sse42.pcmpestriz128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 348 349 350define <16 x i8> @test_x86_sse42_pcmpestrm128(<16 x i8> %a0, <16 x i8> %a2) { 351; SSE-LABEL: test_x86_sse42_pcmpestrm128: 352; SSE: ## %bb.0: 353; SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 354; SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 355; SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x60,0xc1,0x07] 356; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 357; 358; AVX-LABEL: test_x86_sse42_pcmpestrm128: 359; AVX: ## %bb.0: 360; AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 361; AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 362; AVX-NEXT: vpcmpestrm $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x60,0xc1,0x07] 363; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 364 %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] 365 ret <16 x i8> %res 366} 367declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 368 369 370define <16 x i8> @test_x86_sse42_pcmpestrm128_load(<16 x i8> %a0, ptr %a2) { 371; X86-SSE-LABEL: test_x86_sse42_pcmpestrm128_load: 372; X86-SSE: ## %bb.0: 373; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x04] 374; X86-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 375; X86-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 376; X86-SSE-NEXT: pcmpestrm $7, (%ecx), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x60,0x01,0x07] 377; X86-SSE-NEXT: retl ## encoding: [0xc3] 378; 379; X86-AVX-LABEL: test_x86_sse42_pcmpestrm128_load: 380; X86-AVX: ## %bb.0: 381; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x04] 382; X86-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 383; X86-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 384; X86-AVX-NEXT: vpcmpestrm $7, (%ecx), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x60,0x01,0x07] 385; X86-AVX-NEXT: retl ## encoding: [0xc3] 386; 387; X64-SSE-LABEL: test_x86_sse42_pcmpestrm128_load: 388; X64-SSE: ## %bb.0: 389; X64-SSE-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 390; X64-SSE-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 391; X64-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x60,0x07,0x07] 392; X64-SSE-NEXT: retq ## encoding: [0xc3] 393; 394; X64-AVX-LABEL: test_x86_sse42_pcmpestrm128_load: 395; X64-AVX: ## %bb.0: 396; X64-AVX-NEXT: movl $7, %eax ## encoding: [0xb8,0x07,0x00,0x00,0x00] 397; X64-AVX-NEXT: movl $7, %edx ## encoding: [0xba,0x07,0x00,0x00,0x00] 398; X64-AVX-NEXT: vpcmpestrm $7, (%rdi), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x60,0x07,0x07] 399; X64-AVX-NEXT: retq ## encoding: [0xc3] 400 %1 = load <16 x i8>, ptr %a2 401 %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] 402 ret <16 x i8> %res 403} 404 405 406define i32 @test_x86_sse42_pcmpistri128(<16 x i8> %a0, <16 x i8> %a1) { 407; SSE-LABEL: test_x86_sse42_pcmpistri128: 408; SSE: ## %bb.0: 409; SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0xc1,0x07] 410; SSE-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 411; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 412; 413; AVX-LABEL: test_x86_sse42_pcmpistri128: 414; AVX: ## %bb.0: 415; AVX-NEXT: vpcmpistri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0xc1,0x07] 416; AVX-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 417; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 418 %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 419 ret i32 %res 420} 421declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone 422 423 424define i32 @test_x86_sse42_pcmpistri128_load(ptr %a0, ptr %a1) { 425; X86-SSE-LABEL: test_x86_sse42_pcmpistri128_load: 426; X86-SSE: ## %bb.0: 427; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x08] 428; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x04] 429; X86-SSE-NEXT: movdqa (%ecx), %xmm0 ## encoding: [0x66,0x0f,0x6f,0x01] 430; X86-SSE-NEXT: pcmpistri $7, (%eax), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0x00,0x07] 431; X86-SSE-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 432; X86-SSE-NEXT: retl ## encoding: [0xc3] 433; 434; X86-AVX1-LABEL: test_x86_sse42_pcmpistri128_load: 435; X86-AVX1: ## %bb.0: 436; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x08] 437; X86-AVX1-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x04] 438; X86-AVX1-NEXT: vmovdqa (%ecx), %xmm0 ## encoding: [0xc5,0xf9,0x6f,0x01] 439; X86-AVX1-NEXT: vpcmpistri $7, (%eax), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0x00,0x07] 440; X86-AVX1-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 441; X86-AVX1-NEXT: retl ## encoding: [0xc3] 442; 443; X86-AVX512-LABEL: test_x86_sse42_pcmpistri128_load: 444; X86-AVX512: ## %bb.0: 445; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x08] 446; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %ecx ## encoding: [0x8b,0x4c,0x24,0x04] 447; X86-AVX512-NEXT: vmovdqa (%ecx), %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x6f,0x01] 448; X86-AVX512-NEXT: vpcmpistri $7, (%eax), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0x00,0x07] 449; X86-AVX512-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 450; X86-AVX512-NEXT: retl ## encoding: [0xc3] 451; 452; X64-SSE-LABEL: test_x86_sse42_pcmpistri128_load: 453; X64-SSE: ## %bb.0: 454; X64-SSE-NEXT: movdqa (%rdi), %xmm0 ## encoding: [0x66,0x0f,0x6f,0x07] 455; X64-SSE-NEXT: pcmpistri $7, (%rsi), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0x06,0x07] 456; X64-SSE-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 457; X64-SSE-NEXT: retq ## encoding: [0xc3] 458; 459; X64-AVX1-LABEL: test_x86_sse42_pcmpistri128_load: 460; X64-AVX1: ## %bb.0: 461; X64-AVX1-NEXT: vmovdqa (%rdi), %xmm0 ## encoding: [0xc5,0xf9,0x6f,0x07] 462; X64-AVX1-NEXT: vpcmpistri $7, (%rsi), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0x06,0x07] 463; X64-AVX1-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 464; X64-AVX1-NEXT: retq ## encoding: [0xc3] 465; 466; X64-AVX512-LABEL: test_x86_sse42_pcmpistri128_load: 467; X64-AVX512: ## %bb.0: 468; X64-AVX512-NEXT: vmovdqa (%rdi), %xmm0 ## EVEX TO VEX Compression encoding: [0xc5,0xf9,0x6f,0x07] 469; X64-AVX512-NEXT: vpcmpistri $7, (%rsi), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0x06,0x07] 470; X64-AVX512-NEXT: movl %ecx, %eax ## encoding: [0x89,0xc8] 471; X64-AVX512-NEXT: retq ## encoding: [0xc3] 472 %1 = load <16 x i8>, ptr %a0 473 %2 = load <16 x i8>, ptr %a1 474 %res = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %1, <16 x i8> %2, i8 7) ; <i32> [#uses=1] 475 ret i32 %res 476} 477 478 479define i32 @test_x86_sse42_pcmpistria128(<16 x i8> %a0, <16 x i8> %a1) { 480; SSE-LABEL: test_x86_sse42_pcmpistria128: 481; SSE: ## %bb.0: 482; SSE-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 483; SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0xc1,0x07] 484; SSE-NEXT: seta %al ## encoding: [0x0f,0x97,0xc0] 485; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 486; 487; AVX-LABEL: test_x86_sse42_pcmpistria128: 488; AVX: ## %bb.0: 489; AVX-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 490; AVX-NEXT: vpcmpistri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0xc1,0x07] 491; AVX-NEXT: seta %al ## encoding: [0x0f,0x97,0xc0] 492; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 493 %res = call i32 @llvm.x86.sse42.pcmpistria128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 494 ret i32 %res 495} 496declare i32 @llvm.x86.sse42.pcmpistria128(<16 x i8>, <16 x i8>, i8) nounwind readnone 497 498 499define i32 @test_x86_sse42_pcmpistric128(<16 x i8> %a0, <16 x i8> %a1) { 500; SSE-LABEL: test_x86_sse42_pcmpistric128: 501; SSE: ## %bb.0: 502; SSE-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 503; SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0xc1,0x07] 504; SSE-NEXT: setb %al ## encoding: [0x0f,0x92,0xc0] 505; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 506; 507; AVX-LABEL: test_x86_sse42_pcmpistric128: 508; AVX: ## %bb.0: 509; AVX-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 510; AVX-NEXT: vpcmpistri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0xc1,0x07] 511; AVX-NEXT: setb %al ## encoding: [0x0f,0x92,0xc0] 512; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 513 %res = call i32 @llvm.x86.sse42.pcmpistric128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 514 ret i32 %res 515} 516declare i32 @llvm.x86.sse42.pcmpistric128(<16 x i8>, <16 x i8>, i8) nounwind readnone 517 518 519define i32 @test_x86_sse42_pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1) { 520; SSE-LABEL: test_x86_sse42_pcmpistrio128: 521; SSE: ## %bb.0: 522; SSE-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 523; SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0xc1,0x07] 524; SSE-NEXT: seto %al ## encoding: [0x0f,0x90,0xc0] 525; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 526; 527; AVX-LABEL: test_x86_sse42_pcmpistrio128: 528; AVX: ## %bb.0: 529; AVX-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 530; AVX-NEXT: vpcmpistri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0xc1,0x07] 531; AVX-NEXT: seto %al ## encoding: [0x0f,0x90,0xc0] 532; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 533 %res = call i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 534 ret i32 %res 535} 536declare i32 @llvm.x86.sse42.pcmpistrio128(<16 x i8>, <16 x i8>, i8) nounwind readnone 537 538 539define i32 @test_x86_sse42_pcmpistris128(<16 x i8> %a0, <16 x i8> %a1) { 540; SSE-LABEL: test_x86_sse42_pcmpistris128: 541; SSE: ## %bb.0: 542; SSE-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 543; SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0xc1,0x07] 544; SSE-NEXT: sets %al ## encoding: [0x0f,0x98,0xc0] 545; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 546; 547; AVX-LABEL: test_x86_sse42_pcmpistris128: 548; AVX: ## %bb.0: 549; AVX-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 550; AVX-NEXT: vpcmpistri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0xc1,0x07] 551; AVX-NEXT: sets %al ## encoding: [0x0f,0x98,0xc0] 552; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 553 %res = call i32 @llvm.x86.sse42.pcmpistris128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 554 ret i32 %res 555} 556declare i32 @llvm.x86.sse42.pcmpistris128(<16 x i8>, <16 x i8>, i8) nounwind readnone 557 558 559define i32 @test_x86_sse42_pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1) { 560; SSE-LABEL: test_x86_sse42_pcmpistriz128: 561; SSE: ## %bb.0: 562; SSE-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 563; SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x63,0xc1,0x07] 564; SSE-NEXT: sete %al ## encoding: [0x0f,0x94,0xc0] 565; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 566; 567; AVX-LABEL: test_x86_sse42_pcmpistriz128: 568; AVX: ## %bb.0: 569; AVX-NEXT: xorl %eax, %eax ## encoding: [0x31,0xc0] 570; AVX-NEXT: vpcmpistri $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x63,0xc1,0x07] 571; AVX-NEXT: sete %al ## encoding: [0x0f,0x94,0xc0] 572; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 573 %res = call i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <i32> [#uses=1] 574 ret i32 %res 575} 576declare i32 @llvm.x86.sse42.pcmpistriz128(<16 x i8>, <16 x i8>, i8) nounwind readnone 577 578 579define <16 x i8> @test_x86_sse42_pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1) { 580; SSE-LABEL: test_x86_sse42_pcmpistrm128: 581; SSE: ## %bb.0: 582; SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 ## encoding: [0x66,0x0f,0x3a,0x62,0xc1,0x07] 583; SSE-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 584; 585; AVX-LABEL: test_x86_sse42_pcmpistrm128: 586; AVX: ## %bb.0: 587; AVX-NEXT: vpcmpistrm $7, %xmm1, %xmm0 ## encoding: [0xc4,0xe3,0x79,0x62,0xc1,0x07] 588; AVX-NEXT: ret{{[l|q]}} ## encoding: [0xc3] 589 %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7) ; <<16 x i8>> [#uses=1] 590 ret <16 x i8> %res 591} 592declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone 593 594 595define <16 x i8> @test_x86_sse42_pcmpistrm128_load(<16 x i8> %a0, ptr %a1) { 596; X86-SSE-LABEL: test_x86_sse42_pcmpistrm128_load: 597; X86-SSE: ## %bb.0: 598; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 599; X86-SSE-NEXT: pcmpistrm $7, (%eax), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x62,0x00,0x07] 600; X86-SSE-NEXT: retl ## encoding: [0xc3] 601; 602; X86-AVX-LABEL: test_x86_sse42_pcmpistrm128_load: 603; X86-AVX: ## %bb.0: 604; X86-AVX-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 605; X86-AVX-NEXT: vpcmpistrm $7, (%eax), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x62,0x00,0x07] 606; X86-AVX-NEXT: retl ## encoding: [0xc3] 607; 608; X64-SSE-LABEL: test_x86_sse42_pcmpistrm128_load: 609; X64-SSE: ## %bb.0: 610; X64-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 ## encoding: [0x66,0x0f,0x3a,0x62,0x07,0x07] 611; X64-SSE-NEXT: retq ## encoding: [0xc3] 612; 613; X64-AVX-LABEL: test_x86_sse42_pcmpistrm128_load: 614; X64-AVX: ## %bb.0: 615; X64-AVX-NEXT: vpcmpistrm $7, (%rdi), %xmm0 ## encoding: [0xc4,0xe3,0x79,0x62,0x07,0x07] 616; X64-AVX-NEXT: retq ## encoding: [0xc3] 617 %1 = load <16 x i8>, ptr %a1, align 1 618 %res = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %1, i8 7) ; <<16 x i8>> [#uses=1] 619 ret <16 x i8> %res 620} 621