1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin9 -mattr=sse4.2 | FileCheck %s --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mattr=sse4.2 | FileCheck %s --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind 6*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind 7*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine i32 @crc32_32_8(i32 %a, i8 %b) nounwind { 10*9880d681SAndroid Build Coastguard Worker; X32-LABEL: crc32_32_8: 11*9880d681SAndroid Build Coastguard Worker; X32: ## BB#0: 12*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 13*9880d681SAndroid Build Coastguard Worker; X32-NEXT: crc32b {{[0-9]+}}(%esp), %eax 14*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 15*9880d681SAndroid Build Coastguard Worker; 16*9880d681SAndroid Build Coastguard Worker; X64-LABEL: crc32_32_8: 17*9880d681SAndroid Build Coastguard Worker; X64: ## BB#0: 18*9880d681SAndroid Build Coastguard Worker; X64-NEXT: crc32b %sil, %edi 19*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movl %edi, %eax 20*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a, i8 %b) 22*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerdefine i32 @crc32_32_16(i32 %a, i16 %b) nounwind { 27*9880d681SAndroid Build Coastguard Worker; X32-LABEL: crc32_32_16: 28*9880d681SAndroid Build Coastguard Worker; X32: ## BB#0: 29*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 30*9880d681SAndroid Build Coastguard Worker; X32-NEXT: crc32w {{[0-9]+}}(%esp), %eax 31*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 32*9880d681SAndroid Build Coastguard Worker; 33*9880d681SAndroid Build Coastguard Worker; X64-LABEL: crc32_32_16: 34*9880d681SAndroid Build Coastguard Worker; X64: ## BB#0: 35*9880d681SAndroid Build Coastguard Worker; X64-NEXT: crc32w %si, %edi 36*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movl %edi, %eax 37*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a, i16 %b) 39*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine i32 @crc32_32_32(i32 %a, i32 %b) nounwind { 44*9880d681SAndroid Build Coastguard Worker; X32-LABEL: crc32_32_32: 45*9880d681SAndroid Build Coastguard Worker; X32: ## BB#0: 46*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 47*9880d681SAndroid Build Coastguard Worker; X32-NEXT: crc32l {{[0-9]+}}(%esp), %eax 48*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 49*9880d681SAndroid Build Coastguard Worker; 50*9880d681SAndroid Build Coastguard Worker; X64-LABEL: crc32_32_32: 51*9880d681SAndroid Build Coastguard Worker; X64: ## BB#0: 52*9880d681SAndroid Build Coastguard Worker; X64-NEXT: crc32l %esi, %edi 53*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movl %edi, %eax 54*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 55*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a, i32 %b) 56*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59