1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -disable-peephole -mtriple=i386-apple-darwin -mattr=+crc32 -show-mc-encoding | FileCheck %s --check-prefixes=X86 3; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+crc32 -show-mc-encoding | FileCheck %s --check-prefixes=X64 4; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+crc32,+egpr -show-mc-encoding | FileCheck %s --check-prefixes=EGPR 5 6define i32 @crc32_32_8(i32 %a, i8 %b) nounwind { 7; X86-LABEL: crc32_32_8: 8; X86: ## %bb.0: 9; X86-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 10; X86-NEXT: crc32b {{[0-9]+}}(%esp), %eax ## encoding: [0xf2,0x0f,0x38,0xf0,0x44,0x24,0x08] 11; X86-NEXT: retl ## encoding: [0xc3] 12; 13; X64-LABEL: crc32_32_8: 14; X64: ## %bb.0: 15; X64-NEXT: movl %edi, %eax ## encoding: [0x89,0xf8] 16; X64-NEXT: crc32b %sil, %eax ## encoding: [0xf2,0x40,0x0f,0x38,0xf0,0xc6] 17; X64-NEXT: retq ## encoding: [0xc3] 18; 19; EGPR-LABEL: crc32_32_8: 20; EGPR: ## %bb.0: 21; EGPR-NEXT: movl %edi, %eax ## encoding: [0x89,0xf8] 22; EGPR-NEXT: crc32b %sil, %eax ## EVEX TO LEGACY Compression encoding: [0xf2,0x40,0x0f,0x38,0xf0,0xc6] 23; EGPR-NEXT: retq ## encoding: [0xc3] 24 %tmp = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a, i8 %b) 25 ret i32 %tmp 26} 27declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind 28 29define i32 @crc32_32_16(i32 %a, i16 %b) nounwind { 30; X86-LABEL: crc32_32_16: 31; X86: ## %bb.0: 32; X86-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 33; X86-NEXT: crc32w {{[0-9]+}}(%esp), %eax ## encoding: [0x66,0xf2,0x0f,0x38,0xf1,0x44,0x24,0x08] 34; X86-NEXT: retl ## encoding: [0xc3] 35; 36; X64-LABEL: crc32_32_16: 37; X64: ## %bb.0: 38; X64-NEXT: movl %edi, %eax ## encoding: [0x89,0xf8] 39; X64-NEXT: crc32w %si, %eax ## encoding: [0x66,0xf2,0x0f,0x38,0xf1,0xc6] 40; X64-NEXT: retq ## encoding: [0xc3] 41; 42; EGPR-LABEL: crc32_32_16: 43; EGPR: ## %bb.0: 44; EGPR-NEXT: movl %edi, %eax ## encoding: [0x89,0xf8] 45; EGPR-NEXT: crc32w %si, %eax ## EVEX TO LEGACY Compression encoding: [0x66,0xf2,0x0f,0x38,0xf1,0xc6] 46; EGPR-NEXT: retq ## encoding: [0xc3] 47 %tmp = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a, i16 %b) 48 ret i32 %tmp 49} 50declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind 51 52define i32 @crc32_32_32(i32 %a, i32 %b) nounwind { 53; X86-LABEL: crc32_32_32: 54; X86: ## %bb.0: 55; X86-NEXT: movl {{[0-9]+}}(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x04] 56; X86-NEXT: crc32l {{[0-9]+}}(%esp), %eax ## encoding: [0xf2,0x0f,0x38,0xf1,0x44,0x24,0x08] 57; X86-NEXT: retl ## encoding: [0xc3] 58; 59; X64-LABEL: crc32_32_32: 60; X64: ## %bb.0: 61; X64-NEXT: movl %edi, %eax ## encoding: [0x89,0xf8] 62; X64-NEXT: crc32l %esi, %eax ## encoding: [0xf2,0x0f,0x38,0xf1,0xc6] 63; X64-NEXT: retq ## encoding: [0xc3] 64; 65; EGPR-LABEL: crc32_32_32: 66; EGPR: ## %bb.0: 67; EGPR-NEXT: movl %edi, %eax ## encoding: [0x89,0xf8] 68; EGPR-NEXT: crc32l %esi, %eax ## EVEX TO LEGACY Compression encoding: [0xf2,0x0f,0x38,0xf1,0xc6] 69; EGPR-NEXT: retq ## encoding: [0xc3] 70 %tmp = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a, i32 %b) 71 ret i32 %tmp 72} 73declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind 74