xref: /llvm-project/llvm/test/CodeGen/X86/crc32-intrinsics-x86.ll (revision 1c674666fa3bc0cf6d62d920bdddc846b8105d12)
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