xref: /llvm-project/clang/test/CodeGen/avr/avr-builtins.c (revision b2638a7a34d97066caa234999055bf580cbab02f)
191c587b3SBen Shi // RUN: %clang_cc1 -triple avr-unknown-unknown -emit-llvm -o - %s | FileCheck %s
291c587b3SBen Shi 
391c587b3SBen Shi // Check that the parameter types match. This verifies pr43309.
491c587b3SBen Shi // RUN: %clang_cc1 -triple avr-unknown-unknown -Wconversion -verify %s
591c587b3SBen Shi // expected-no-diagnostics
691c587b3SBen Shi 
bitrev8(unsigned char data)791c587b3SBen Shi unsigned char bitrev8(unsigned char data) {
891c587b3SBen Shi     return __builtin_bitreverse8(data);
991c587b3SBen Shi }
1091c587b3SBen Shi 
11*b2638a7aSBen Shi // CHECK: define{{.*}} i8 @bitrev8
1291c587b3SBen Shi // CHECK: i8 @llvm.bitreverse.i8(i8
1391c587b3SBen Shi 
bitrev16(unsigned int data)1491c587b3SBen Shi unsigned int bitrev16(unsigned int data) {
1591c587b3SBen Shi     return __builtin_bitreverse16(data);
1691c587b3SBen Shi }
1791c587b3SBen Shi 
1891c587b3SBen Shi // CHECK: define{{.*}} i16 @bitrev16
1991c587b3SBen Shi // CHECK: i16 @llvm.bitreverse.i16(i16
2091c587b3SBen Shi 
bitrev32(unsigned long data)2191c587b3SBen Shi unsigned long bitrev32(unsigned long data) {
2291c587b3SBen Shi     return __builtin_bitreverse32(data);
2391c587b3SBen Shi }
2491c587b3SBen Shi // CHECK: define{{.*}} i32 @bitrev32
2591c587b3SBen Shi // CHECK: i32 @llvm.bitreverse.i32(i32
2691c587b3SBen Shi 
bitrev64(unsigned long long data)2791c587b3SBen Shi unsigned long long bitrev64(unsigned long long data) {
2891c587b3SBen Shi     return __builtin_bitreverse64(data);
2991c587b3SBen Shi }
3091c587b3SBen Shi 
3191c587b3SBen Shi // CHECK: define{{.*}} i64 @bitrev64
3291c587b3SBen Shi // CHECK: i64 @llvm.bitreverse.i64(i64
3391c587b3SBen Shi 
rotleft8(unsigned char x,unsigned char y)3491c587b3SBen Shi unsigned char rotleft8(unsigned char x, unsigned char y) {
3591c587b3SBen Shi     return __builtin_rotateleft8(x, y);
3691c587b3SBen Shi }
3791c587b3SBen Shi 
38*b2638a7aSBen Shi // CHECK: define{{.*}} i8 @rotleft8
3991c587b3SBen Shi // CHECK: i8 @llvm.fshl.i8(i8
4091c587b3SBen Shi 
rotleft16(unsigned int x,unsigned int y)4191c587b3SBen Shi unsigned int rotleft16(unsigned int x, unsigned int y) {
4291c587b3SBen Shi     return __builtin_rotateleft16(x, y);
4391c587b3SBen Shi }
4491c587b3SBen Shi 
4591c587b3SBen Shi // CHECK: define{{.*}} i16 @rotleft16
4691c587b3SBen Shi // CHECK: i16 @llvm.fshl.i16(i16
4791c587b3SBen Shi 
rotleft32(unsigned long x,unsigned long y)4891c587b3SBen Shi unsigned long rotleft32(unsigned long x, unsigned long y) {
4991c587b3SBen Shi     return __builtin_rotateleft32(x, y);
5091c587b3SBen Shi }
5191c587b3SBen Shi // CHECK: define{{.*}} i32 @rotleft32
5291c587b3SBen Shi // CHECK: i32 @llvm.fshl.i32(i32
5391c587b3SBen Shi 
rotleft64(unsigned long long x,unsigned long long y)5491c587b3SBen Shi unsigned long long rotleft64(unsigned long long x, unsigned long long y) {
5591c587b3SBen Shi     return __builtin_rotateleft64(x, y);
5691c587b3SBen Shi }
5791c587b3SBen Shi 
5891c587b3SBen Shi // CHECK: define{{.*}} i64 @rotleft64
5991c587b3SBen Shi // CHECK: i64 @llvm.fshl.i64(i64
6091c587b3SBen Shi 
rotright8(unsigned char x,unsigned char y)6191c587b3SBen Shi unsigned char rotright8(unsigned char x, unsigned char y) {
6291c587b3SBen Shi     return __builtin_rotateright8(x, y);
6391c587b3SBen Shi }
6491c587b3SBen Shi 
65*b2638a7aSBen Shi // CHECK: define{{.*}} i8 @rotright8
6691c587b3SBen Shi // CHECK: i8 @llvm.fshr.i8(i8
6791c587b3SBen Shi 
rotright16(unsigned int x,unsigned int y)6891c587b3SBen Shi unsigned int rotright16(unsigned int x, unsigned int y) {
6991c587b3SBen Shi     return __builtin_rotateright16(x, y);
7091c587b3SBen Shi }
7191c587b3SBen Shi 
7291c587b3SBen Shi // CHECK: define{{.*}} i16 @rotright16
7391c587b3SBen Shi // CHECK: i16 @llvm.fshr.i16(i16
7491c587b3SBen Shi 
rotright32(unsigned long x,unsigned long y)7591c587b3SBen Shi unsigned long rotright32(unsigned long x, unsigned long y) {
7691c587b3SBen Shi     return __builtin_rotateright32(x, y);
7791c587b3SBen Shi }
7891c587b3SBen Shi // CHECK: define{{.*}} i32 @rotright32
7991c587b3SBen Shi // CHECK: i32 @llvm.fshr.i32(i32
8091c587b3SBen Shi 
rotright64(unsigned long long x,unsigned long long y)8191c587b3SBen Shi unsigned long long rotright64(unsigned long long x, unsigned long long y) {
8291c587b3SBen Shi     return __builtin_rotateright64(x, y);
8391c587b3SBen Shi }
8491c587b3SBen Shi 
8591c587b3SBen Shi // CHECK: define{{.*}} i64 @rotright64
8691c587b3SBen Shi // CHECK: i64 @llvm.fshr.i64(i64
8791c587b3SBen Shi 
byteswap16(unsigned int x)8891c587b3SBen Shi unsigned int byteswap16(unsigned int x) {
8991c587b3SBen Shi     return __builtin_bswap16(x);
9091c587b3SBen Shi }
9191c587b3SBen Shi 
9291c587b3SBen Shi // CHECK: define{{.*}} i16 @byteswap16
9391c587b3SBen Shi // CHECK: i16 @llvm.bswap.i16(i16
9491c587b3SBen Shi 
byteswap32(unsigned long x)9591c587b3SBen Shi unsigned long byteswap32(unsigned long x) {
9691c587b3SBen Shi     return __builtin_bswap32(x);
9791c587b3SBen Shi }
9891c587b3SBen Shi // CHECK: define{{.*}} i32 @byteswap32
9991c587b3SBen Shi // CHECK: i32 @llvm.bswap.i32(i32
10091c587b3SBen Shi 
byteswap64(unsigned long long x)10191c587b3SBen Shi unsigned long long byteswap64(unsigned long long x) {
10291c587b3SBen Shi     return __builtin_bswap64(x);
10391c587b3SBen Shi }
10491c587b3SBen Shi 
10591c587b3SBen Shi // CHECK: define{{.*}} i64 @byteswap64
10691c587b3SBen Shi // CHECK: i64 @llvm.bswap.i64(i64
10791c587b3SBen Shi 
powi(double x,int y)10891c587b3SBen Shi double powi(double x, int y) {
10991c587b3SBen Shi   return __builtin_powi(x, y);
11091c587b3SBen Shi }
11191c587b3SBen Shi 
11291c587b3SBen Shi // CHECK: define{{.*}} float @powi
11391c587b3SBen Shi // CHECK: float @llvm.powi.f32.i16(float %0, i16 %1)
11491c587b3SBen Shi 
powif(float x,int y)11591c587b3SBen Shi float powif(float x, int y) {
11691c587b3SBen Shi     return __builtin_powif(x, y);
11791c587b3SBen Shi }
11891c587b3SBen Shi 
11991c587b3SBen Shi // CHECK: define{{.*}} float @powif
12091c587b3SBen Shi // CHECK: float @llvm.powi.f32.i16(float %0, i16 %1)
12191c587b3SBen Shi 
powil(long double x,int y)12291c587b3SBen Shi long double powil(long double x, int y) {
12391c587b3SBen Shi     return __builtin_powil(x, y);
12491c587b3SBen Shi }
12591c587b3SBen Shi 
12691c587b3SBen Shi // CHECK: define{{.*}} float @powil
12791c587b3SBen Shi // CHECK: float @llvm.powi.f32.i16(float %0, i16 %1)
128