1*b197667eSSanjay Patel // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
2*b197667eSSanjay Patel
rotl8(unsigned char x,unsigned char y)3*b197667eSSanjay Patel unsigned char rotl8(unsigned char x, unsigned char y) {
4*b197667eSSanjay Patel // CHECK-LABEL: rotl8
5*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i8 @llvm.fshl.i8(i8 [[X:%.*]], i8 [[X]], i8 [[Y:%.*]])
6*b197667eSSanjay Patel // CHECK-NEXT: ret i8 [[F]]
7*b197667eSSanjay Patel
8*b197667eSSanjay Patel return __builtin_rotateleft8(x, y);
9*b197667eSSanjay Patel }
10*b197667eSSanjay Patel
rotl16(short x,short y)11*b197667eSSanjay Patel short rotl16(short x, short y) {
12*b197667eSSanjay Patel // CHECK-LABEL: rotl16
13*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 [[X]], i16 [[Y:%.*]])
14*b197667eSSanjay Patel // CHECK-NEXT: ret i16 [[F]]
15*b197667eSSanjay Patel
16*b197667eSSanjay Patel return __builtin_rotateleft16(x, y);
17*b197667eSSanjay Patel }
18*b197667eSSanjay Patel
rotl32(int x,unsigned int y)19*b197667eSSanjay Patel int rotl32(int x, unsigned int y) {
20*b197667eSSanjay Patel // CHECK-LABEL: rotl32
21*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i32 @llvm.fshl.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]])
22*b197667eSSanjay Patel // CHECK-NEXT: ret i32 [[F]]
23*b197667eSSanjay Patel
24*b197667eSSanjay Patel return __builtin_rotateleft32(x, y);
25*b197667eSSanjay Patel }
26*b197667eSSanjay Patel
rotl64(unsigned long long x,long long y)27*b197667eSSanjay Patel unsigned long long rotl64(unsigned long long x, long long y) {
28*b197667eSSanjay Patel // CHECK-LABEL: rotl64
29*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i64 @llvm.fshl.i64(i64 [[X:%.*]], i64 [[X]], i64 [[Y:%.*]])
30*b197667eSSanjay Patel // CHECK-NEXT: ret i64 [[F]]
31*b197667eSSanjay Patel
32*b197667eSSanjay Patel return __builtin_rotateleft64(x, y);
33*b197667eSSanjay Patel }
34*b197667eSSanjay Patel
rotr8(char x,char y)35*b197667eSSanjay Patel char rotr8(char x, char y) {
36*b197667eSSanjay Patel // CHECK-LABEL: rotr8
37*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i8 @llvm.fshr.i8(i8 [[X:%.*]], i8 [[X]], i8 [[Y:%.*]])
38*b197667eSSanjay Patel // CHECK-NEXT: ret i8 [[F]]
39*b197667eSSanjay Patel
40*b197667eSSanjay Patel return __builtin_rotateright8(x, y);
41*b197667eSSanjay Patel }
42*b197667eSSanjay Patel
rotr16(unsigned short x,unsigned short y)43*b197667eSSanjay Patel unsigned short rotr16(unsigned short x, unsigned short y) {
44*b197667eSSanjay Patel // CHECK-LABEL: rotr16
45*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i16 @llvm.fshr.i16(i16 [[X:%.*]], i16 [[X]], i16 [[Y:%.*]])
46*b197667eSSanjay Patel // CHECK-NEXT: ret i16 [[F]]
47*b197667eSSanjay Patel
48*b197667eSSanjay Patel return __builtin_rotateright16(x, y);
49*b197667eSSanjay Patel }
50*b197667eSSanjay Patel
rotr32(unsigned int x,int y)51*b197667eSSanjay Patel unsigned int rotr32(unsigned int x, int y) {
52*b197667eSSanjay Patel // CHECK-LABEL: rotr32
53*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i32 @llvm.fshr.i32(i32 [[X:%.*]], i32 [[X]], i32 [[Y:%.*]])
54*b197667eSSanjay Patel // CHECK-NEXT: ret i32 [[F]]
55*b197667eSSanjay Patel
56*b197667eSSanjay Patel return __builtin_rotateright32(x, y);
57*b197667eSSanjay Patel }
58*b197667eSSanjay Patel
rotr64(long long x,unsigned long long y)59*b197667eSSanjay Patel long long rotr64(long long x, unsigned long long y) {
60*b197667eSSanjay Patel // CHECK-LABEL: rotr64
61*b197667eSSanjay Patel // CHECK: [[F:%.*]] = call i64 @llvm.fshr.i64(i64 [[X:%.*]], i64 [[X]], i64 [[Y:%.*]])
62*b197667eSSanjay Patel // CHECK-NEXT: ret i64 [[F]]
63*b197667eSSanjay Patel
64*b197667eSSanjay Patel return __builtin_rotateright64(x, y);
65*b197667eSSanjay Patel }
66*b197667eSSanjay Patel
67