1 // RUN: %clang_cc1 -triple armv8-none-linux-gnueabi \
2 // RUN:   -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
3 
crc32b(int a,char b)4 int crc32b(int a, char b)
5 {
6         return __builtin_arm_crc32b(a,b);
7 // CHECK: [[T0:%[0-9]+]] = zext i8 %b to i32
8 // CHECK: call i32 @llvm.arm.crc32b(i32 %a, i32 [[T0]])
9 }
10 
crc32cb(int a,char b)11 int crc32cb(int a, char b)
12 {
13         return __builtin_arm_crc32cb(a,b);
14 // CHECK: [[T0:%[0-9]+]] = zext i8 %b to i32
15 // CHECK: call i32 @llvm.arm.crc32cb(i32 %a, i32 [[T0]])
16 }
17 
crc32h(int a,short b)18 int crc32h(int a, short b)
19 {
20         return __builtin_arm_crc32h(a,b);
21 // CHECK: [[T0:%[0-9]+]] = zext i16 %b to i32
22 // CHECK: call i32 @llvm.arm.crc32h(i32 %a, i32 [[T0]])
23 }
24 
crc32ch(int a,short b)25 int crc32ch(int a, short b)
26 {
27         return __builtin_arm_crc32ch(a,b);
28 // CHECK: [[T0:%[0-9]+]] = zext i16 %b to i32
29 // CHECK: call i32 @llvm.arm.crc32ch(i32 %a, i32 [[T0]])
30 }
31 
crc32w(int a,int b)32 int crc32w(int a, int b)
33 {
34         return __builtin_arm_crc32w(a,b);
35 // CHECK: call i32 @llvm.arm.crc32w(i32 %a, i32 %b)
36 }
37 
crc32cw(int a,int b)38 int crc32cw(int a, int b)
39 {
40         return __builtin_arm_crc32cw(a,b);
41 // CHECK: call i32 @llvm.arm.crc32cw(i32 %a, i32 %b)
42 }
43 
crc32d(int a,long long b)44 int crc32d(int a, long long b)
45 {
46         return __builtin_arm_crc32d(a,b);
47 // CHECK: [[T0:%[0-9]+]] = trunc i64 %b to i32
48 // CHECK: [[T1:%[0-9]+]] = lshr i64 %b, 32
49 // CHECK: [[T2:%[0-9]+]] = trunc i64 [[T1]] to i32
50 // CHECK: [[T3:%[0-9]+]] = call i32 @llvm.arm.crc32w(i32 %a, i32 [[T0]])
51 // CHECK: call i32 @llvm.arm.crc32w(i32 [[T3]], i32 [[T2]])
52 }
53 
crc32cd(int a,long long b)54 int crc32cd(int a, long long b)
55 {
56         return __builtin_arm_crc32cd(a,b);
57 // CHECK: [[T0:%[0-9]+]] = trunc i64 %b to i32
58 // CHECK: [[T1:%[0-9]+]] = lshr i64 %b, 32
59 // CHECK: [[T2:%[0-9]+]] = trunc i64 [[T1]] to i32
60 // CHECK: [[T3:%[0-9]+]] = call i32 @llvm.arm.crc32cw(i32 %a, i32 [[T0]])
61 // CHECK: call i32 @llvm.arm.crc32cw(i32 [[T3]], i32 [[T2]])
62 }
63