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=x86-64 -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefixes=CHECK,GENERIC 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SLM 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SANDY-SSE 5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY 6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SANDY-SSE 7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY 8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx | FileCheck %s --check-prefixes=CHECK,HASWELL-SSE 9; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,HASWELL 10; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx | FileCheck %s --check-prefixes=CHECK,BROADWELL-SSE 11; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BROADWELL 12; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SKYLAKE-SSE 13; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKYLAKE 14; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SKX-SSE 15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKX 16; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx | FileCheck %s --check-prefixes=CHECK,BTVER2-SSE 17; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BTVER2 18; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx | FileCheck %s --check-prefixes=CHECK,ZNVER1-SSE 19; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,ZNVER1 20 21define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) { 22; GENERIC-LABEL: crc32_32_8: 23; GENERIC: # %bb.0: 24; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00] 25; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 26; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33] 27; GENERIC-NEXT: retq # sched: [1:1.00] 28; 29; SLM-LABEL: crc32_32_8: 30; SLM: # %bb.0: 31; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00] 32; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00] 33; SLM-NEXT: movl %edi, %eax # sched: [1:0.50] 34; SLM-NEXT: retq # sched: [4:1.00] 35; 36; SANDY-SSE-LABEL: crc32_32_8: 37; SANDY-SSE: # %bb.0: 38; SANDY-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 39; SANDY-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 40; SANDY-SSE-NEXT: movl %edi, %eax # sched: [1:0.33] 41; SANDY-SSE-NEXT: retq # sched: [1:1.00] 42; 43; SANDY-LABEL: crc32_32_8: 44; SANDY: # %bb.0: 45; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00] 46; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 47; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33] 48; SANDY-NEXT: retq # sched: [1:1.00] 49; 50; HASWELL-SSE-LABEL: crc32_32_8: 51; HASWELL-SSE: # %bb.0: 52; HASWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 53; HASWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 54; HASWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 55; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 56; 57; HASWELL-LABEL: crc32_32_8: 58; HASWELL: # %bb.0: 59; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00] 60; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 61; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] 62; HASWELL-NEXT: retq # sched: [7:1.00] 63; 64; BROADWELL-SSE-LABEL: crc32_32_8: 65; BROADWELL-SSE: # %bb.0: 66; BROADWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 67; BROADWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 68; BROADWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 69; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 70; 71; BROADWELL-LABEL: crc32_32_8: 72; BROADWELL: # %bb.0: 73; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00] 74; BROADWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 75; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25] 76; BROADWELL-NEXT: retq # sched: [7:1.00] 77; 78; SKYLAKE-SSE-LABEL: crc32_32_8: 79; SKYLAKE-SSE: # %bb.0: 80; SKYLAKE-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 81; SKYLAKE-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 82; SKYLAKE-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 83; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 84; 85; SKYLAKE-LABEL: crc32_32_8: 86; SKYLAKE: # %bb.0: 87; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 88; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 89; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] 90; SKYLAKE-NEXT: retq # sched: [7:1.00] 91; 92; SKX-SSE-LABEL: crc32_32_8: 93; SKX-SSE: # %bb.0: 94; SKX-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 95; SKX-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 96; SKX-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 97; SKX-SSE-NEXT: retq # sched: [7:1.00] 98; 99; SKX-LABEL: crc32_32_8: 100; SKX: # %bb.0: 101; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00] 102; SKX-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 103; SKX-NEXT: movl %edi, %eax # sched: [1:0.25] 104; SKX-NEXT: retq # sched: [7:1.00] 105; 106; BTVER2-SSE-LABEL: crc32_32_8: 107; BTVER2-SSE: # %bb.0: 108; BTVER2-SSE-NEXT: crc32b %sil, %edi # sched: [3:2.00] 109; BTVER2-SSE-NEXT: crc32b (%rdx), %edi # sched: [6:2.00] 110; BTVER2-SSE-NEXT: movl %edi, %eax # sched: [1:0.50] 111; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 112; 113; BTVER2-LABEL: crc32_32_8: 114; BTVER2: # %bb.0: 115; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:2.00] 116; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [6:2.00] 117; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50] 118; BTVER2-NEXT: retq # sched: [4:1.00] 119; 120; ZNVER1-SSE-LABEL: crc32_32_8: 121; ZNVER1-SSE: # %bb.0: 122; ZNVER1-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 123; ZNVER1-SSE-NEXT: crc32b (%rdx), %edi # sched: [10:1.00] 124; ZNVER1-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 125; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 126; 127; ZNVER1-LABEL: crc32_32_8: 128; ZNVER1: # %bb.0: 129; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00] 130; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00] 131; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25] 132; ZNVER1-NEXT: retq # sched: [1:0.50] 133 %1 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1) 134 %2 = load i8, i8 *%a2 135 %3 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %1, i8 %2) 136 ret i32 %3 137} 138declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind 139 140define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) { 141; GENERIC-LABEL: crc32_32_16: 142; GENERIC: # %bb.0: 143; GENERIC-NEXT: crc32w %si, %edi # sched: [3:1.00] 144; GENERIC-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 145; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33] 146; GENERIC-NEXT: retq # sched: [1:1.00] 147; 148; SLM-LABEL: crc32_32_16: 149; SLM: # %bb.0: 150; SLM-NEXT: crc32w %si, %edi # sched: [3:1.00] 151; SLM-NEXT: crc32w (%rdx), %edi # sched: [6:1.00] 152; SLM-NEXT: movl %edi, %eax # sched: [1:0.50] 153; SLM-NEXT: retq # sched: [4:1.00] 154; 155; SANDY-SSE-LABEL: crc32_32_16: 156; SANDY-SSE: # %bb.0: 157; SANDY-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00] 158; SANDY-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 159; SANDY-SSE-NEXT: movl %edi, %eax # sched: [1:0.33] 160; SANDY-SSE-NEXT: retq # sched: [1:1.00] 161; 162; SANDY-LABEL: crc32_32_16: 163; SANDY: # %bb.0: 164; SANDY-NEXT: crc32w %si, %edi # sched: [3:1.00] 165; SANDY-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 166; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33] 167; SANDY-NEXT: retq # sched: [1:1.00] 168; 169; HASWELL-SSE-LABEL: crc32_32_16: 170; HASWELL-SSE: # %bb.0: 171; HASWELL-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00] 172; HASWELL-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 173; HASWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 174; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 175; 176; HASWELL-LABEL: crc32_32_16: 177; HASWELL: # %bb.0: 178; HASWELL-NEXT: crc32w %si, %edi # sched: [3:1.00] 179; HASWELL-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 180; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] 181; HASWELL-NEXT: retq # sched: [7:1.00] 182; 183; BROADWELL-SSE-LABEL: crc32_32_16: 184; BROADWELL-SSE: # %bb.0: 185; BROADWELL-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00] 186; BROADWELL-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 187; BROADWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 188; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 189; 190; BROADWELL-LABEL: crc32_32_16: 191; BROADWELL: # %bb.0: 192; BROADWELL-NEXT: crc32w %si, %edi # sched: [3:1.00] 193; BROADWELL-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 194; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25] 195; BROADWELL-NEXT: retq # sched: [7:1.00] 196; 197; SKYLAKE-SSE-LABEL: crc32_32_16: 198; SKYLAKE-SSE: # %bb.0: 199; SKYLAKE-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00] 200; SKYLAKE-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 201; SKYLAKE-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 202; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 203; 204; SKYLAKE-LABEL: crc32_32_16: 205; SKYLAKE: # %bb.0: 206; SKYLAKE-NEXT: crc32w %si, %edi # sched: [3:1.00] 207; SKYLAKE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 208; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] 209; SKYLAKE-NEXT: retq # sched: [7:1.00] 210; 211; SKX-SSE-LABEL: crc32_32_16: 212; SKX-SSE: # %bb.0: 213; SKX-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00] 214; SKX-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 215; SKX-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 216; SKX-SSE-NEXT: retq # sched: [7:1.00] 217; 218; SKX-LABEL: crc32_32_16: 219; SKX: # %bb.0: 220; SKX-NEXT: crc32w %si, %edi # sched: [3:1.00] 221; SKX-NEXT: crc32w (%rdx), %edi # sched: [8:1.00] 222; SKX-NEXT: movl %edi, %eax # sched: [1:0.25] 223; SKX-NEXT: retq # sched: [7:1.00] 224; 225; BTVER2-SSE-LABEL: crc32_32_16: 226; BTVER2-SSE: # %bb.0: 227; BTVER2-SSE-NEXT: crc32w %si, %edi # sched: [3:2.00] 228; BTVER2-SSE-NEXT: crc32w (%rdx), %edi # sched: [6:2.00] 229; BTVER2-SSE-NEXT: movl %edi, %eax # sched: [1:0.50] 230; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 231; 232; BTVER2-LABEL: crc32_32_16: 233; BTVER2: # %bb.0: 234; BTVER2-NEXT: crc32w %si, %edi # sched: [3:2.00] 235; BTVER2-NEXT: crc32w (%rdx), %edi # sched: [6:2.00] 236; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50] 237; BTVER2-NEXT: retq # sched: [4:1.00] 238; 239; ZNVER1-SSE-LABEL: crc32_32_16: 240; ZNVER1-SSE: # %bb.0: 241; ZNVER1-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00] 242; ZNVER1-SSE-NEXT: crc32w (%rdx), %edi # sched: [10:1.00] 243; ZNVER1-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 244; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 245; 246; ZNVER1-LABEL: crc32_32_16: 247; ZNVER1: # %bb.0: 248; ZNVER1-NEXT: crc32w %si, %edi # sched: [3:1.00] 249; ZNVER1-NEXT: crc32w (%rdx), %edi # sched: [10:1.00] 250; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25] 251; ZNVER1-NEXT: retq # sched: [1:0.50] 252 %1 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1) 253 %2 = load i16, i16 *%a2 254 %3 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %1, i16 %2) 255 ret i32 %3 256} 257declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind 258 259define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) { 260; GENERIC-LABEL: crc32_32_32: 261; GENERIC: # %bb.0: 262; GENERIC-NEXT: crc32l %esi, %edi # sched: [3:1.00] 263; GENERIC-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 264; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33] 265; GENERIC-NEXT: retq # sched: [1:1.00] 266; 267; SLM-LABEL: crc32_32_32: 268; SLM: # %bb.0: 269; SLM-NEXT: crc32l %esi, %edi # sched: [3:1.00] 270; SLM-NEXT: crc32l (%rdx), %edi # sched: [6:1.00] 271; SLM-NEXT: movl %edi, %eax # sched: [1:0.50] 272; SLM-NEXT: retq # sched: [4:1.00] 273; 274; SANDY-SSE-LABEL: crc32_32_32: 275; SANDY-SSE: # %bb.0: 276; SANDY-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 277; SANDY-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 278; SANDY-SSE-NEXT: movl %edi, %eax # sched: [1:0.33] 279; SANDY-SSE-NEXT: retq # sched: [1:1.00] 280; 281; SANDY-LABEL: crc32_32_32: 282; SANDY: # %bb.0: 283; SANDY-NEXT: crc32l %esi, %edi # sched: [3:1.00] 284; SANDY-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 285; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33] 286; SANDY-NEXT: retq # sched: [1:1.00] 287; 288; HASWELL-SSE-LABEL: crc32_32_32: 289; HASWELL-SSE: # %bb.0: 290; HASWELL-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 291; HASWELL-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 292; HASWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 293; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 294; 295; HASWELL-LABEL: crc32_32_32: 296; HASWELL: # %bb.0: 297; HASWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00] 298; HASWELL-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 299; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25] 300; HASWELL-NEXT: retq # sched: [7:1.00] 301; 302; BROADWELL-SSE-LABEL: crc32_32_32: 303; BROADWELL-SSE: # %bb.0: 304; BROADWELL-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 305; BROADWELL-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 306; BROADWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 307; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 308; 309; BROADWELL-LABEL: crc32_32_32: 310; BROADWELL: # %bb.0: 311; BROADWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00] 312; BROADWELL-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 313; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25] 314; BROADWELL-NEXT: retq # sched: [7:1.00] 315; 316; SKYLAKE-SSE-LABEL: crc32_32_32: 317; SKYLAKE-SSE: # %bb.0: 318; SKYLAKE-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 319; SKYLAKE-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 320; SKYLAKE-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 321; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 322; 323; SKYLAKE-LABEL: crc32_32_32: 324; SKYLAKE: # %bb.0: 325; SKYLAKE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 326; SKYLAKE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 327; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25] 328; SKYLAKE-NEXT: retq # sched: [7:1.00] 329; 330; SKX-SSE-LABEL: crc32_32_32: 331; SKX-SSE: # %bb.0: 332; SKX-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 333; SKX-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 334; SKX-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 335; SKX-SSE-NEXT: retq # sched: [7:1.00] 336; 337; SKX-LABEL: crc32_32_32: 338; SKX: # %bb.0: 339; SKX-NEXT: crc32l %esi, %edi # sched: [3:1.00] 340; SKX-NEXT: crc32l (%rdx), %edi # sched: [8:1.00] 341; SKX-NEXT: movl %edi, %eax # sched: [1:0.25] 342; SKX-NEXT: retq # sched: [7:1.00] 343; 344; BTVER2-SSE-LABEL: crc32_32_32: 345; BTVER2-SSE: # %bb.0: 346; BTVER2-SSE-NEXT: crc32l %esi, %edi # sched: [3:2.00] 347; BTVER2-SSE-NEXT: crc32l (%rdx), %edi # sched: [6:2.00] 348; BTVER2-SSE-NEXT: movl %edi, %eax # sched: [1:0.50] 349; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 350; 351; BTVER2-LABEL: crc32_32_32: 352; BTVER2: # %bb.0: 353; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:2.00] 354; BTVER2-NEXT: crc32l (%rdx), %edi # sched: [6:2.00] 355; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50] 356; BTVER2-NEXT: retq # sched: [4:1.00] 357; 358; ZNVER1-SSE-LABEL: crc32_32_32: 359; ZNVER1-SSE: # %bb.0: 360; ZNVER1-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00] 361; ZNVER1-SSE-NEXT: crc32l (%rdx), %edi # sched: [10:1.00] 362; ZNVER1-SSE-NEXT: movl %edi, %eax # sched: [1:0.25] 363; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 364; 365; ZNVER1-LABEL: crc32_32_32: 366; ZNVER1: # %bb.0: 367; ZNVER1-NEXT: crc32l %esi, %edi # sched: [3:1.00] 368; ZNVER1-NEXT: crc32l (%rdx), %edi # sched: [10:1.00] 369; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25] 370; ZNVER1-NEXT: retq # sched: [1:0.50] 371 %1 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1) 372 %2 = load i32, i32 *%a2 373 %3 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %1, i32 %2) 374 ret i32 %3 375} 376declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind 377 378define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind { 379; GENERIC-LABEL: crc32_64_8: 380; GENERIC: # %bb.0: 381; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00] 382; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 383; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33] 384; GENERIC-NEXT: retq # sched: [1:1.00] 385; 386; SLM-LABEL: crc32_64_8: 387; SLM: # %bb.0: 388; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00] 389; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00] 390; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50] 391; SLM-NEXT: retq # sched: [4:1.00] 392; 393; SANDY-SSE-LABEL: crc32_64_8: 394; SANDY-SSE: # %bb.0: 395; SANDY-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 396; SANDY-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 397; SANDY-SSE-NEXT: movq %rdi, %rax # sched: [1:0.33] 398; SANDY-SSE-NEXT: retq # sched: [1:1.00] 399; 400; SANDY-LABEL: crc32_64_8: 401; SANDY: # %bb.0: 402; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00] 403; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 404; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33] 405; SANDY-NEXT: retq # sched: [1:1.00] 406; 407; HASWELL-SSE-LABEL: crc32_64_8: 408; HASWELL-SSE: # %bb.0: 409; HASWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 410; HASWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 411; HASWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 412; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 413; 414; HASWELL-LABEL: crc32_64_8: 415; HASWELL: # %bb.0: 416; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00] 417; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 418; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25] 419; HASWELL-NEXT: retq # sched: [7:1.00] 420; 421; BROADWELL-SSE-LABEL: crc32_64_8: 422; BROADWELL-SSE: # %bb.0: 423; BROADWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 424; BROADWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 425; BROADWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 426; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 427; 428; BROADWELL-LABEL: crc32_64_8: 429; BROADWELL: # %bb.0: 430; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00] 431; BROADWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 432; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25] 433; BROADWELL-NEXT: retq # sched: [7:1.00] 434; 435; SKYLAKE-SSE-LABEL: crc32_64_8: 436; SKYLAKE-SSE: # %bb.0: 437; SKYLAKE-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 438; SKYLAKE-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 439; SKYLAKE-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 440; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 441; 442; SKYLAKE-LABEL: crc32_64_8: 443; SKYLAKE: # %bb.0: 444; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 445; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 446; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25] 447; SKYLAKE-NEXT: retq # sched: [7:1.00] 448; 449; SKX-SSE-LABEL: crc32_64_8: 450; SKX-SSE: # %bb.0: 451; SKX-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 452; SKX-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 453; SKX-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 454; SKX-SSE-NEXT: retq # sched: [7:1.00] 455; 456; SKX-LABEL: crc32_64_8: 457; SKX: # %bb.0: 458; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00] 459; SKX-NEXT: crc32b (%rdx), %edi # sched: [8:1.00] 460; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25] 461; SKX-NEXT: retq # sched: [7:1.00] 462; 463; BTVER2-SSE-LABEL: crc32_64_8: 464; BTVER2-SSE: # %bb.0: 465; BTVER2-SSE-NEXT: crc32b %sil, %edi # sched: [3:2.00] 466; BTVER2-SSE-NEXT: crc32b (%rdx), %edi # sched: [6:2.00] 467; BTVER2-SSE-NEXT: movq %rdi, %rax # sched: [1:0.50] 468; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 469; 470; BTVER2-LABEL: crc32_64_8: 471; BTVER2: # %bb.0: 472; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:2.00] 473; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [6:2.00] 474; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.50] 475; BTVER2-NEXT: retq # sched: [4:1.00] 476; 477; ZNVER1-SSE-LABEL: crc32_64_8: 478; ZNVER1-SSE: # %bb.0: 479; ZNVER1-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00] 480; ZNVER1-SSE-NEXT: crc32b (%rdx), %edi # sched: [10:1.00] 481; ZNVER1-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 482; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 483; 484; ZNVER1-LABEL: crc32_64_8: 485; ZNVER1: # %bb.0: 486; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00] 487; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00] 488; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25] 489; ZNVER1-NEXT: retq # sched: [1:0.50] 490 %1 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %a0, i8 %a1) 491 %2 = load i8, i8 *%a2 492 %3 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %1, i8 %2) 493 ret i64 %3 494} 495declare i64 @llvm.x86.sse42.crc32.64.8(i64, i8) nounwind 496 497define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) { 498; GENERIC-LABEL: crc32_64_64: 499; GENERIC: # %bb.0: 500; GENERIC-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 501; GENERIC-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 502; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33] 503; GENERIC-NEXT: retq # sched: [1:1.00] 504; 505; SLM-LABEL: crc32_64_64: 506; SLM: # %bb.0: 507; SLM-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 508; SLM-NEXT: crc32q (%rdx), %rdi # sched: [6:1.00] 509; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50] 510; SLM-NEXT: retq # sched: [4:1.00] 511; 512; SANDY-SSE-LABEL: crc32_64_64: 513; SANDY-SSE: # %bb.0: 514; SANDY-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 515; SANDY-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 516; SANDY-SSE-NEXT: movq %rdi, %rax # sched: [1:0.33] 517; SANDY-SSE-NEXT: retq # sched: [1:1.00] 518; 519; SANDY-LABEL: crc32_64_64: 520; SANDY: # %bb.0: 521; SANDY-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 522; SANDY-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 523; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33] 524; SANDY-NEXT: retq # sched: [1:1.00] 525; 526; HASWELL-SSE-LABEL: crc32_64_64: 527; HASWELL-SSE: # %bb.0: 528; HASWELL-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 529; HASWELL-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 530; HASWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 531; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 532; 533; HASWELL-LABEL: crc32_64_64: 534; HASWELL: # %bb.0: 535; HASWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 536; HASWELL-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 537; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25] 538; HASWELL-NEXT: retq # sched: [7:1.00] 539; 540; BROADWELL-SSE-LABEL: crc32_64_64: 541; BROADWELL-SSE: # %bb.0: 542; BROADWELL-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 543; BROADWELL-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 544; BROADWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 545; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 546; 547; BROADWELL-LABEL: crc32_64_64: 548; BROADWELL: # %bb.0: 549; BROADWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 550; BROADWELL-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 551; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25] 552; BROADWELL-NEXT: retq # sched: [7:1.00] 553; 554; SKYLAKE-SSE-LABEL: crc32_64_64: 555; SKYLAKE-SSE: # %bb.0: 556; SKYLAKE-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 557; SKYLAKE-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 558; SKYLAKE-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 559; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 560; 561; SKYLAKE-LABEL: crc32_64_64: 562; SKYLAKE: # %bb.0: 563; SKYLAKE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 564; SKYLAKE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 565; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25] 566; SKYLAKE-NEXT: retq # sched: [7:1.00] 567; 568; SKX-SSE-LABEL: crc32_64_64: 569; SKX-SSE: # %bb.0: 570; SKX-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 571; SKX-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 572; SKX-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 573; SKX-SSE-NEXT: retq # sched: [7:1.00] 574; 575; SKX-LABEL: crc32_64_64: 576; SKX: # %bb.0: 577; SKX-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 578; SKX-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00] 579; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25] 580; SKX-NEXT: retq # sched: [7:1.00] 581; 582; BTVER2-SSE-LABEL: crc32_64_64: 583; BTVER2-SSE: # %bb.0: 584; BTVER2-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:2.00] 585; BTVER2-SSE-NEXT: crc32q (%rdx), %rdi # sched: [6:2.00] 586; BTVER2-SSE-NEXT: movq %rdi, %rax # sched: [1:0.50] 587; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 588; 589; BTVER2-LABEL: crc32_64_64: 590; BTVER2: # %bb.0: 591; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:2.00] 592; BTVER2-NEXT: crc32q (%rdx), %rdi # sched: [6:2.00] 593; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.50] 594; BTVER2-NEXT: retq # sched: [4:1.00] 595; 596; ZNVER1-SSE-LABEL: crc32_64_64: 597; ZNVER1-SSE: # %bb.0: 598; ZNVER1-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 599; ZNVER1-SSE-NEXT: crc32q (%rdx), %rdi # sched: [10:1.00] 600; ZNVER1-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25] 601; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 602; 603; ZNVER1-LABEL: crc32_64_64: 604; ZNVER1: # %bb.0: 605; ZNVER1-NEXT: crc32q %rsi, %rdi # sched: [3:1.00] 606; ZNVER1-NEXT: crc32q (%rdx), %rdi # sched: [10:1.00] 607; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25] 608; ZNVER1-NEXT: retq # sched: [1:0.50] 609 %1 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %a0, i64 %a1) 610 %2 = load i64, i64 *%a2 611 %3 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %1, i64 %2) 612 ret i64 %3 613} 614declare i64 @llvm.x86.sse42.crc32.64.64(i64, i64) nounwind 615 616define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) { 617; GENERIC-LABEL: test_pcmpestri: 618; GENERIC: # %bb.0: 619; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33] 620; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33] 621; GENERIC-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67] 622; GENERIC-NEXT: movl %ecx, %esi # sched: [1:0.33] 623; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33] 624; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33] 625; GENERIC-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33] 626; GENERIC-NEXT: # kill: def $ecx killed $ecx def $rcx 627; GENERIC-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 628; GENERIC-NEXT: retq # sched: [1:1.00] 629; 630; SLM-LABEL: test_pcmpestri: 631; SLM: # %bb.0: 632; SLM-NEXT: movl $7, %eax # sched: [1:0.50] 633; SLM-NEXT: movl $7, %edx # sched: [1:0.50] 634; SLM-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [21:21.00] 635; SLM-NEXT: movl $7, %eax # sched: [1:0.50] 636; SLM-NEXT: movl $7, %edx # sched: [1:0.50] 637; SLM-NEXT: movl %ecx, %esi # sched: [1:0.50] 638; SLM-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [21:21.00] 639; SLM-NEXT: # kill: def $ecx killed $ecx def $rcx 640; SLM-NEXT: leal (%rcx,%rsi), %eax # sched: [1:1.00] 641; SLM-NEXT: retq # sched: [4:1.00] 642; 643; SANDY-SSE-LABEL: test_pcmpestri: 644; SANDY-SSE: # %bb.0: 645; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33] 646; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33] 647; SANDY-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67] 648; SANDY-SSE-NEXT: movl %ecx, %esi # sched: [1:0.33] 649; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33] 650; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33] 651; SANDY-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33] 652; SANDY-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 653; SANDY-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 654; SANDY-SSE-NEXT: retq # sched: [1:1.00] 655; 656; SANDY-LABEL: test_pcmpestri: 657; SANDY: # %bb.0: 658; SANDY-NEXT: movl $7, %eax # sched: [1:0.33] 659; SANDY-NEXT: movl $7, %edx # sched: [1:0.33] 660; SANDY-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67] 661; SANDY-NEXT: movl %ecx, %esi # sched: [1:0.33] 662; SANDY-NEXT: movl $7, %eax # sched: [1:0.33] 663; SANDY-NEXT: movl $7, %edx # sched: [1:0.33] 664; SANDY-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33] 665; SANDY-NEXT: # kill: def $ecx killed $ecx def $rcx 666; SANDY-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 667; SANDY-NEXT: retq # sched: [1:1.00] 668; 669; HASWELL-SSE-LABEL: test_pcmpestri: 670; HASWELL-SSE: # %bb.0: 671; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 672; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 673; HASWELL-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 674; HASWELL-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25] 675; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 676; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 677; HASWELL-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00] 678; HASWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 679; HASWELL-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 680; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 681; 682; HASWELL-LABEL: test_pcmpestri: 683; HASWELL: # %bb.0: 684; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25] 685; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25] 686; HASWELL-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 687; HASWELL-NEXT: movl %ecx, %esi # sched: [1:0.25] 688; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25] 689; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25] 690; HASWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00] 691; HASWELL-NEXT: # kill: def $ecx killed $ecx def $rcx 692; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 693; HASWELL-NEXT: retq # sched: [7:1.00] 694; 695; BROADWELL-SSE-LABEL: test_pcmpestri: 696; BROADWELL-SSE: # %bb.0: 697; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 698; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 699; BROADWELL-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 700; BROADWELL-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25] 701; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 702; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 703; BROADWELL-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [23:4.00] 704; BROADWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 705; BROADWELL-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 706; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 707; 708; BROADWELL-LABEL: test_pcmpestri: 709; BROADWELL: # %bb.0: 710; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25] 711; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25] 712; BROADWELL-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 713; BROADWELL-NEXT: movl %ecx, %esi # sched: [1:0.25] 714; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25] 715; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25] 716; BROADWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [23:4.00] 717; BROADWELL-NEXT: # kill: def $ecx killed $ecx def $rcx 718; BROADWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 719; BROADWELL-NEXT: retq # sched: [7:1.00] 720; 721; SKYLAKE-SSE-LABEL: test_pcmpestri: 722; SKYLAKE-SSE: # %bb.0: 723; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 724; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 725; SKYLAKE-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 726; SKYLAKE-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25] 727; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 728; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 729; SKYLAKE-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00] 730; SKYLAKE-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 731; SKYLAKE-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 732; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 733; 734; SKYLAKE-LABEL: test_pcmpestri: 735; SKYLAKE: # %bb.0: 736; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] 737; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] 738; SKYLAKE-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 739; SKYLAKE-NEXT: movl %ecx, %esi # sched: [1:0.25] 740; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] 741; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] 742; SKYLAKE-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00] 743; SKYLAKE-NEXT: # kill: def $ecx killed $ecx def $rcx 744; SKYLAKE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 745; SKYLAKE-NEXT: retq # sched: [7:1.00] 746; 747; SKX-SSE-LABEL: test_pcmpestri: 748; SKX-SSE: # %bb.0: 749; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 750; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 751; SKX-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 752; SKX-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25] 753; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 754; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 755; SKX-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00] 756; SKX-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 757; SKX-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 758; SKX-SSE-NEXT: retq # sched: [7:1.00] 759; 760; SKX-LABEL: test_pcmpestri: 761; SKX: # %bb.0: 762; SKX-NEXT: movl $7, %eax # sched: [1:0.25] 763; SKX-NEXT: movl $7, %edx # sched: [1:0.25] 764; SKX-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00] 765; SKX-NEXT: movl %ecx, %esi # sched: [1:0.25] 766; SKX-NEXT: movl $7, %eax # sched: [1:0.25] 767; SKX-NEXT: movl $7, %edx # sched: [1:0.25] 768; SKX-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00] 769; SKX-NEXT: # kill: def $ecx killed $ecx def $rcx 770; SKX-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 771; SKX-NEXT: retq # sched: [7:1.00] 772; 773; BTVER2-SSE-LABEL: test_pcmpestri: 774; BTVER2-SSE: # %bb.0: 775; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50] 776; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50] 777; BTVER2-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [14:5.00] 778; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50] 779; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50] 780; BTVER2-SSE-NEXT: movl %ecx, %esi # sched: [1:0.50] 781; BTVER2-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [19:5.00] 782; BTVER2-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 783; BTVER2-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 784; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 785; 786; BTVER2-LABEL: test_pcmpestri: 787; BTVER2: # %bb.0: 788; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50] 789; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50] 790; BTVER2-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [14:5.00] 791; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50] 792; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50] 793; BTVER2-NEXT: movl %ecx, %esi # sched: [1:0.50] 794; BTVER2-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [19:5.00] 795; BTVER2-NEXT: # kill: def $ecx killed $ecx def $rcx 796; BTVER2-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50] 797; BTVER2-NEXT: retq # sched: [4:1.00] 798; 799; ZNVER1-SSE-LABEL: test_pcmpestri: 800; ZNVER1-SSE: # %bb.0: 801; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 802; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 803; ZNVER1-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [100:0.25] 804; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 805; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 806; ZNVER1-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25] 807; ZNVER1-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [100:0.25] 808; ZNVER1-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 809; ZNVER1-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.25] 810; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 811; 812; ZNVER1-LABEL: test_pcmpestri: 813; ZNVER1: # %bb.0: 814; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25] 815; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25] 816; ZNVER1-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [100:0.25] 817; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25] 818; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25] 819; ZNVER1-NEXT: movl %ecx, %esi # sched: [1:0.25] 820; ZNVER1-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [100:0.25] 821; ZNVER1-NEXT: # kill: def $ecx killed $ecx def $rcx 822; ZNVER1-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.25] 823; ZNVER1-NEXT: retq # sched: [1:0.50] 824 %1 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7) 825 %2 = load <16 x i8>, <16 x i8> *%a2, align 16 826 %3 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %2, i32 7, i8 7) 827 %4 = add i32 %1, %3 828 ret i32 %4 829} 830declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 831 832define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) { 833; GENERIC-LABEL: test_pcmpestrm: 834; GENERIC: # %bb.0: 835; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33] 836; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33] 837; GENERIC-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67] 838; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33] 839; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33] 840; GENERIC-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33] 841; GENERIC-NEXT: retq # sched: [1:1.00] 842; 843; SLM-LABEL: test_pcmpestrm: 844; SLM: # %bb.0: 845; SLM-NEXT: movl $7, %eax # sched: [1:0.50] 846; SLM-NEXT: movl $7, %edx # sched: [1:0.50] 847; SLM-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [17:17.00] 848; SLM-NEXT: movl $7, %eax # sched: [1:0.50] 849; SLM-NEXT: movl $7, %edx # sched: [1:0.50] 850; SLM-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [17:17.00] 851; SLM-NEXT: retq # sched: [4:1.00] 852; 853; SANDY-SSE-LABEL: test_pcmpestrm: 854; SANDY-SSE: # %bb.0: 855; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33] 856; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33] 857; SANDY-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67] 858; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33] 859; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33] 860; SANDY-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33] 861; SANDY-SSE-NEXT: retq # sched: [1:1.00] 862; 863; SANDY-LABEL: test_pcmpestrm: 864; SANDY: # %bb.0: 865; SANDY-NEXT: movl $7, %eax # sched: [1:0.33] 866; SANDY-NEXT: movl $7, %edx # sched: [1:0.33] 867; SANDY-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67] 868; SANDY-NEXT: movl $7, %eax # sched: [1:0.33] 869; SANDY-NEXT: movl $7, %edx # sched: [1:0.33] 870; SANDY-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33] 871; SANDY-NEXT: retq # sched: [1:1.00] 872; 873; HASWELL-SSE-LABEL: test_pcmpestrm: 874; HASWELL-SSE: # %bb.0: 875; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 876; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 877; HASWELL-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 878; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 879; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 880; HASWELL-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00] 881; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 882; 883; HASWELL-LABEL: test_pcmpestrm: 884; HASWELL: # %bb.0: 885; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25] 886; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25] 887; HASWELL-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 888; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25] 889; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25] 890; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00] 891; HASWELL-NEXT: retq # sched: [7:1.00] 892; 893; BROADWELL-SSE-LABEL: test_pcmpestrm: 894; BROADWELL-SSE: # %bb.0: 895; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 896; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 897; BROADWELL-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 898; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 899; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 900; BROADWELL-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00] 901; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 902; 903; BROADWELL-LABEL: test_pcmpestrm: 904; BROADWELL: # %bb.0: 905; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25] 906; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25] 907; BROADWELL-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 908; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25] 909; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25] 910; BROADWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00] 911; BROADWELL-NEXT: retq # sched: [7:1.00] 912; 913; SKYLAKE-SSE-LABEL: test_pcmpestrm: 914; SKYLAKE-SSE: # %bb.0: 915; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 916; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 917; SKYLAKE-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 918; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 919; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 920; SKYLAKE-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00] 921; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 922; 923; SKYLAKE-LABEL: test_pcmpestrm: 924; SKYLAKE: # %bb.0: 925; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] 926; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] 927; SKYLAKE-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 928; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25] 929; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25] 930; SKYLAKE-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00] 931; SKYLAKE-NEXT: retq # sched: [7:1.00] 932; 933; SKX-SSE-LABEL: test_pcmpestrm: 934; SKX-SSE: # %bb.0: 935; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 936; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 937; SKX-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 938; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 939; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 940; SKX-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00] 941; SKX-SSE-NEXT: retq # sched: [7:1.00] 942; 943; SKX-LABEL: test_pcmpestrm: 944; SKX: # %bb.0: 945; SKX-NEXT: movl $7, %eax # sched: [1:0.25] 946; SKX-NEXT: movl $7, %edx # sched: [1:0.25] 947; SKX-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00] 948; SKX-NEXT: movl $7, %eax # sched: [1:0.25] 949; SKX-NEXT: movl $7, %edx # sched: [1:0.25] 950; SKX-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00] 951; SKX-NEXT: retq # sched: [7:1.00] 952; 953; BTVER2-SSE-LABEL: test_pcmpestrm: 954; BTVER2-SSE: # %bb.0: 955; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50] 956; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50] 957; BTVER2-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [14:5.00] 958; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50] 959; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50] 960; BTVER2-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00] 961; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 962; 963; BTVER2-LABEL: test_pcmpestrm: 964; BTVER2: # %bb.0: 965; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50] 966; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50] 967; BTVER2-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [14:5.00] 968; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50] 969; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50] 970; BTVER2-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00] 971; BTVER2-NEXT: retq # sched: [4:1.00] 972; 973; ZNVER1-SSE-LABEL: test_pcmpestrm: 974; ZNVER1-SSE: # %bb.0: 975; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 976; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 977; ZNVER1-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [100:0.25] 978; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25] 979; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25] 980; ZNVER1-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [100:0.25] 981; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 982; 983; ZNVER1-LABEL: test_pcmpestrm: 984; ZNVER1: # %bb.0: 985; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25] 986; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25] 987; ZNVER1-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [100:0.25] 988; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25] 989; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25] 990; ZNVER1-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [100:0.25] 991; ZNVER1-NEXT: retq # sched: [1:0.50] 992 %1 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7) 993 %2 = load <16 x i8>, <16 x i8> *%a2, align 16 994 %3 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7) 995 ret <16 x i8> %3 996} 997declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone 998 999define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) { 1000; GENERIC-LABEL: test_pcmpistri: 1001; GENERIC: # %bb.0: 1002; GENERIC-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1003; GENERIC-NEXT: movl %ecx, %eax # sched: [1:0.33] 1004; GENERIC-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00] 1005; GENERIC-NEXT: # kill: def $ecx killed $ecx def $rcx 1006; GENERIC-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1007; GENERIC-NEXT: retq # sched: [1:1.00] 1008; 1009; SLM-LABEL: test_pcmpistri: 1010; SLM: # %bb.0: 1011; SLM-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [17:17.00] 1012; SLM-NEXT: movl %ecx, %eax # sched: [1:0.50] 1013; SLM-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:17.00] 1014; SLM-NEXT: # kill: def $ecx killed $ecx def $rcx 1015; SLM-NEXT: leal (%rcx,%rax), %eax # sched: [1:1.00] 1016; SLM-NEXT: retq # sched: [4:1.00] 1017; 1018; SANDY-SSE-LABEL: test_pcmpistri: 1019; SANDY-SSE: # %bb.0: 1020; SANDY-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1021; SANDY-SSE-NEXT: movl %ecx, %eax # sched: [1:0.33] 1022; SANDY-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00] 1023; SANDY-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1024; SANDY-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1025; SANDY-SSE-NEXT: retq # sched: [1:1.00] 1026; 1027; SANDY-LABEL: test_pcmpistri: 1028; SANDY: # %bb.0: 1029; SANDY-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1030; SANDY-NEXT: movl %ecx, %eax # sched: [1:0.33] 1031; SANDY-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00] 1032; SANDY-NEXT: # kill: def $ecx killed $ecx def $rcx 1033; SANDY-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1034; SANDY-NEXT: retq # sched: [1:1.00] 1035; 1036; HASWELL-SSE-LABEL: test_pcmpistri: 1037; HASWELL-SSE: # %bb.0: 1038; HASWELL-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1039; HASWELL-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25] 1040; HASWELL-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00] 1041; HASWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1042; HASWELL-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1043; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 1044; 1045; HASWELL-LABEL: test_pcmpistri: 1046; HASWELL: # %bb.0: 1047; HASWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1048; HASWELL-NEXT: movl %ecx, %eax # sched: [1:0.25] 1049; HASWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00] 1050; HASWELL-NEXT: # kill: def $ecx killed $ecx def $rcx 1051; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1052; HASWELL-NEXT: retq # sched: [7:1.00] 1053; 1054; BROADWELL-SSE-LABEL: test_pcmpistri: 1055; BROADWELL-SSE: # %bb.0: 1056; BROADWELL-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1057; BROADWELL-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25] 1058; BROADWELL-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00] 1059; BROADWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1060; BROADWELL-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1061; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 1062; 1063; BROADWELL-LABEL: test_pcmpistri: 1064; BROADWELL: # %bb.0: 1065; BROADWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00] 1066; BROADWELL-NEXT: movl %ecx, %eax # sched: [1:0.25] 1067; BROADWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00] 1068; BROADWELL-NEXT: # kill: def $ecx killed $ecx def $rcx 1069; BROADWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1070; BROADWELL-NEXT: retq # sched: [7:1.00] 1071; 1072; SKYLAKE-SSE-LABEL: test_pcmpistri: 1073; SKYLAKE-SSE: # %bb.0: 1074; SKYLAKE-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00] 1075; SKYLAKE-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25] 1076; SKYLAKE-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00] 1077; SKYLAKE-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1078; SKYLAKE-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1079; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 1080; 1081; SKYLAKE-LABEL: test_pcmpistri: 1082; SKYLAKE: # %bb.0: 1083; SKYLAKE-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00] 1084; SKYLAKE-NEXT: movl %ecx, %eax # sched: [1:0.25] 1085; SKYLAKE-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00] 1086; SKYLAKE-NEXT: # kill: def $ecx killed $ecx def $rcx 1087; SKYLAKE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1088; SKYLAKE-NEXT: retq # sched: [7:1.00] 1089; 1090; SKX-SSE-LABEL: test_pcmpistri: 1091; SKX-SSE: # %bb.0: 1092; SKX-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00] 1093; SKX-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25] 1094; SKX-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00] 1095; SKX-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1096; SKX-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1097; SKX-SSE-NEXT: retq # sched: [7:1.00] 1098; 1099; SKX-LABEL: test_pcmpistri: 1100; SKX: # %bb.0: 1101; SKX-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00] 1102; SKX-NEXT: movl %ecx, %eax # sched: [1:0.25] 1103; SKX-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00] 1104; SKX-NEXT: # kill: def $ecx killed $ecx def $rcx 1105; SKX-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1106; SKX-NEXT: retq # sched: [7:1.00] 1107; 1108; BTVER2-SSE-LABEL: test_pcmpistri: 1109; BTVER2-SSE: # %bb.0: 1110; BTVER2-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00] 1111; BTVER2-SSE-NEXT: movl %ecx, %eax # sched: [1:0.50] 1112; BTVER2-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [12:2.00] 1113; BTVER2-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1114; BTVER2-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1115; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 1116; 1117; BTVER2-LABEL: test_pcmpistri: 1118; BTVER2: # %bb.0: 1119; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00] 1120; BTVER2-NEXT: movl %ecx, %eax # sched: [1:0.50] 1121; BTVER2-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [12:2.00] 1122; BTVER2-NEXT: # kill: def $ecx killed $ecx def $rcx 1123; BTVER2-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50] 1124; BTVER2-NEXT: retq # sched: [4:1.00] 1125; 1126; ZNVER1-SSE-LABEL: test_pcmpistri: 1127; ZNVER1-SSE: # %bb.0: 1128; ZNVER1-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [100:0.25] 1129; ZNVER1-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25] 1130; ZNVER1-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [100:0.25] 1131; ZNVER1-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx 1132; ZNVER1-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.25] 1133; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 1134; 1135; ZNVER1-LABEL: test_pcmpistri: 1136; ZNVER1: # %bb.0: 1137; ZNVER1-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [100:0.25] 1138; ZNVER1-NEXT: movl %ecx, %eax # sched: [1:0.25] 1139; ZNVER1-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [100:0.25] 1140; ZNVER1-NEXT: # kill: def $ecx killed $ecx def $rcx 1141; ZNVER1-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.25] 1142; ZNVER1-NEXT: retq # sched: [1:0.50] 1143 %1 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7) 1144 %2 = load <16 x i8>, <16 x i8> *%a2, align 16 1145 %3 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %2, i8 7) 1146 %4 = add i32 %1, %3 1147 ret i32 %4 1148} 1149declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone 1150 1151define <16 x i8> @test_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) { 1152; GENERIC-LABEL: test_pcmpistrm: 1153; GENERIC: # %bb.0: 1154; GENERIC-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1155; GENERIC-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00] 1156; GENERIC-NEXT: retq # sched: [1:1.00] 1157; 1158; SLM-LABEL: test_pcmpistrm: 1159; SLM: # %bb.0: 1160; SLM-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [13:13.00] 1161; SLM-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:13.00] 1162; SLM-NEXT: retq # sched: [4:1.00] 1163; 1164; SANDY-SSE-LABEL: test_pcmpistrm: 1165; SANDY-SSE: # %bb.0: 1166; SANDY-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1167; SANDY-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00] 1168; SANDY-SSE-NEXT: retq # sched: [1:1.00] 1169; 1170; SANDY-LABEL: test_pcmpistrm: 1171; SANDY: # %bb.0: 1172; SANDY-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1173; SANDY-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00] 1174; SANDY-NEXT: retq # sched: [1:1.00] 1175; 1176; HASWELL-SSE-LABEL: test_pcmpistrm: 1177; HASWELL-SSE: # %bb.0: 1178; HASWELL-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1179; HASWELL-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00] 1180; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 1181; 1182; HASWELL-LABEL: test_pcmpistrm: 1183; HASWELL: # %bb.0: 1184; HASWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1185; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00] 1186; HASWELL-NEXT: retq # sched: [7:1.00] 1187; 1188; BROADWELL-SSE-LABEL: test_pcmpistrm: 1189; BROADWELL-SSE: # %bb.0: 1190; BROADWELL-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1191; BROADWELL-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00] 1192; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 1193; 1194; BROADWELL-LABEL: test_pcmpistrm: 1195; BROADWELL: # %bb.0: 1196; BROADWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00] 1197; BROADWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00] 1198; BROADWELL-NEXT: retq # sched: [7:1.00] 1199; 1200; SKYLAKE-SSE-LABEL: test_pcmpistrm: 1201; SKYLAKE-SSE: # %bb.0: 1202; SKYLAKE-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00] 1203; SKYLAKE-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00] 1204; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 1205; 1206; SKYLAKE-LABEL: test_pcmpistrm: 1207; SKYLAKE: # %bb.0: 1208; SKYLAKE-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00] 1209; SKYLAKE-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00] 1210; SKYLAKE-NEXT: retq # sched: [7:1.00] 1211; 1212; SKX-SSE-LABEL: test_pcmpistrm: 1213; SKX-SSE: # %bb.0: 1214; SKX-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00] 1215; SKX-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00] 1216; SKX-SSE-NEXT: retq # sched: [7:1.00] 1217; 1218; SKX-LABEL: test_pcmpistrm: 1219; SKX: # %bb.0: 1220; SKX-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00] 1221; SKX-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00] 1222; SKX-NEXT: retq # sched: [7:1.00] 1223; 1224; BTVER2-SSE-LABEL: test_pcmpistrm: 1225; BTVER2-SSE: # %bb.0: 1226; BTVER2-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00] 1227; BTVER2-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00] 1228; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 1229; 1230; BTVER2-LABEL: test_pcmpistrm: 1231; BTVER2: # %bb.0: 1232; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00] 1233; BTVER2-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00] 1234; BTVER2-NEXT: retq # sched: [4:1.00] 1235; 1236; ZNVER1-SSE-LABEL: test_pcmpistrm: 1237; ZNVER1-SSE: # %bb.0: 1238; ZNVER1-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [100:0.25] 1239; ZNVER1-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [100:0.25] 1240; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 1241; 1242; ZNVER1-LABEL: test_pcmpistrm: 1243; ZNVER1: # %bb.0: 1244; ZNVER1-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [100:0.25] 1245; ZNVER1-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [100:0.25] 1246; ZNVER1-NEXT: retq # sched: [1:0.50] 1247 %1 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7) 1248 %2 = load <16 x i8>, <16 x i8> *%a2, align 16 1249 %3 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %1, <16 x i8> %2, i8 7) 1250 ret <16 x i8> %3 1251} 1252declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone 1253 1254define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) { 1255; GENERIC-LABEL: test_pcmpgtq: 1256; GENERIC: # %bb.0: 1257; GENERIC-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00] 1258; GENERIC-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00] 1259; GENERIC-NEXT: retq # sched: [1:1.00] 1260; 1261; SLM-LABEL: test_pcmpgtq: 1262; SLM: # %bb.0: 1263; SLM-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50] 1264; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [4:1.00] 1265; SLM-NEXT: retq # sched: [4:1.00] 1266; 1267; SANDY-SSE-LABEL: test_pcmpgtq: 1268; SANDY-SSE: # %bb.0: 1269; SANDY-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00] 1270; SANDY-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00] 1271; SANDY-SSE-NEXT: retq # sched: [1:1.00] 1272; 1273; SANDY-LABEL: test_pcmpgtq: 1274; SANDY: # %bb.0: 1275; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00] 1276; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00] 1277; SANDY-NEXT: retq # sched: [1:1.00] 1278; 1279; HASWELL-SSE-LABEL: test_pcmpgtq: 1280; HASWELL-SSE: # %bb.0: 1281; HASWELL-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00] 1282; HASWELL-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00] 1283; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 1284; 1285; HASWELL-LABEL: test_pcmpgtq: 1286; HASWELL: # %bb.0: 1287; HASWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00] 1288; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00] 1289; HASWELL-NEXT: retq # sched: [7:1.00] 1290; 1291; BROADWELL-SSE-LABEL: test_pcmpgtq: 1292; BROADWELL-SSE: # %bb.0: 1293; BROADWELL-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00] 1294; BROADWELL-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [10:1.00] 1295; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 1296; 1297; BROADWELL-LABEL: test_pcmpgtq: 1298; BROADWELL: # %bb.0: 1299; BROADWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00] 1300; BROADWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [10:1.00] 1301; BROADWELL-NEXT: retq # sched: [7:1.00] 1302; 1303; SKYLAKE-SSE-LABEL: test_pcmpgtq: 1304; SKYLAKE-SSE: # %bb.0: 1305; SKYLAKE-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [3:1.00] 1306; SKYLAKE-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [9:1.00] 1307; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 1308; 1309; SKYLAKE-LABEL: test_pcmpgtq: 1310; SKYLAKE: # %bb.0: 1311; SKYLAKE-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00] 1312; SKYLAKE-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00] 1313; SKYLAKE-NEXT: retq # sched: [7:1.00] 1314; 1315; SKX-SSE-LABEL: test_pcmpgtq: 1316; SKX-SSE: # %bb.0: 1317; SKX-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [3:1.00] 1318; SKX-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [9:1.00] 1319; SKX-SSE-NEXT: retq # sched: [7:1.00] 1320; 1321; SKX-LABEL: test_pcmpgtq: 1322; SKX: # %bb.0: 1323; SKX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00] 1324; SKX-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00] 1325; SKX-NEXT: retq # sched: [7:1.00] 1326; 1327; BTVER2-SSE-LABEL: test_pcmpgtq: 1328; BTVER2-SSE: # %bb.0: 1329; BTVER2-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50] 1330; BTVER2-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [6:1.00] 1331; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 1332; 1333; BTVER2-LABEL: test_pcmpgtq: 1334; BTVER2: # %bb.0: 1335; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] 1336; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00] 1337; BTVER2-NEXT: retq # sched: [4:1.00] 1338; 1339; ZNVER1-SSE-LABEL: test_pcmpgtq: 1340; ZNVER1-SSE: # %bb.0: 1341; ZNVER1-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50] 1342; ZNVER1-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [8:0.50] 1343; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 1344; 1345; ZNVER1-LABEL: test_pcmpgtq: 1346; ZNVER1: # %bb.0: 1347; ZNVER1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50] 1348; ZNVER1-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [8:0.50] 1349; ZNVER1-NEXT: retq # sched: [1:0.50] 1350 %1 = icmp sgt <2 x i64> %a0, %a1 1351 %2 = sext <2 x i1> %1 to <2 x i64> 1352 %3 = load <2 x i64>, <2 x i64>*%a2, align 16 1353 %4 = icmp sgt <2 x i64> %2, %3 1354 %5 = sext <2 x i1> %4 to <2 x i64> 1355 ret <2 x i64> %5 1356} 1357 1358define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) { 1359; GENERIC-LABEL: test_pclmulqdq: 1360; GENERIC: # %bb.0: 1361; GENERIC-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00] 1362; GENERIC-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67] 1363; GENERIC-NEXT: retq # sched: [1:1.00] 1364; 1365; SLM-LABEL: test_pclmulqdq: 1366; SLM: # %bb.0: 1367; SLM-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [10:10.00] 1368; SLM-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00] 1369; SLM-NEXT: retq # sched: [4:1.00] 1370; 1371; SANDY-SSE-LABEL: test_pclmulqdq: 1372; SANDY-SSE: # %bb.0: 1373; SANDY-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00] 1374; SANDY-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67] 1375; SANDY-SSE-NEXT: retq # sched: [1:1.00] 1376; 1377; SANDY-LABEL: test_pclmulqdq: 1378; SANDY: # %bb.0: 1379; SANDY-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00] 1380; SANDY-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67] 1381; SANDY-NEXT: retq # sched: [1:1.00] 1382; 1383; HASWELL-SSE-LABEL: test_pclmulqdq: 1384; HASWELL-SSE: # %bb.0: 1385; HASWELL-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [11:2.00] 1386; HASWELL-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [17:2.00] 1387; HASWELL-SSE-NEXT: retq # sched: [7:1.00] 1388; 1389; HASWELL-LABEL: test_pclmulqdq: 1390; HASWELL: # %bb.0: 1391; HASWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00] 1392; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [17:2.00] 1393; HASWELL-NEXT: retq # sched: [7:1.00] 1394; 1395; BROADWELL-SSE-LABEL: test_pclmulqdq: 1396; BROADWELL-SSE: # %bb.0: 1397; BROADWELL-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [5:1.00] 1398; BROADWELL-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:1.00] 1399; BROADWELL-SSE-NEXT: retq # sched: [7:1.00] 1400; 1401; BROADWELL-LABEL: test_pclmulqdq: 1402; BROADWELL: # %bb.0: 1403; BROADWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [5:1.00] 1404; BROADWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [10:1.00] 1405; BROADWELL-NEXT: retq # sched: [7:1.00] 1406; 1407; SKYLAKE-SSE-LABEL: test_pclmulqdq: 1408; SKYLAKE-SSE: # %bb.0: 1409; SKYLAKE-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [6:1.00] 1410; SKYLAKE-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [12:1.00] 1411; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00] 1412; 1413; SKYLAKE-LABEL: test_pclmulqdq: 1414; SKYLAKE: # %bb.0: 1415; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00] 1416; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00] 1417; SKYLAKE-NEXT: retq # sched: [7:1.00] 1418; 1419; SKX-SSE-LABEL: test_pclmulqdq: 1420; SKX-SSE: # %bb.0: 1421; SKX-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [6:1.00] 1422; SKX-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [12:1.00] 1423; SKX-SSE-NEXT: retq # sched: [7:1.00] 1424; 1425; SKX-LABEL: test_pclmulqdq: 1426; SKX: # %bb.0: 1427; SKX-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00] 1428; SKX-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00] 1429; SKX-NEXT: retq # sched: [7:1.00] 1430; 1431; BTVER2-SSE-LABEL: test_pclmulqdq: 1432; BTVER2-SSE: # %bb.0: 1433; BTVER2-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [2:1.00] 1434; BTVER2-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [7:1.00] 1435; BTVER2-SSE-NEXT: retq # sched: [4:1.00] 1436; 1437; BTVER2-LABEL: test_pclmulqdq: 1438; BTVER2: # %bb.0: 1439; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00] 1440; BTVER2-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00] 1441; BTVER2-NEXT: retq # sched: [4:1.00] 1442; 1443; ZNVER1-SSE-LABEL: test_pclmulqdq: 1444; ZNVER1-SSE: # %bb.0: 1445; ZNVER1-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [100:0.25] 1446; ZNVER1-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [100:0.25] 1447; ZNVER1-SSE-NEXT: retq # sched: [1:0.50] 1448; 1449; ZNVER1-LABEL: test_pclmulqdq: 1450; ZNVER1: # %bb.0: 1451; ZNVER1-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:0.25] 1452; ZNVER1-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [100:0.25] 1453; ZNVER1-NEXT: retq # sched: [1:0.50] 1454 %1 = load <2 x i64>, <2 x i64> *%a2, align 16 1455 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0) 1456 %3 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %1, <2 x i64> %2, i8 0) 1457 ret <2 x i64> %3 1458} 1459declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8) 1460