1 | // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +movbe -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,CHECK-X64 |
2 | // RUN: %clang_cc1 -ffreestanding %s -triple=i686-apple-darwin -target-feature +movbe -emit-llvm -o - | FileCheck %s |
3 | |
4 | |
5 | #include <immintrin.h> |
6 | |
7 | short test_loadbe_i16(const short *P) { |
8 | // CHECK-LABEL: @test_loadbe_i16 |
9 | // CHECK: [[LOAD:%.*]] = load i16, i16* %{{.*}}, align 1 |
10 | // CHECK: call i16 @llvm.bswap.i16(i16 [[LOAD]]) |
11 | return _loadbe_i16(P); |
12 | } |
13 | |
14 | void test_storebe_i16(short *P, short D) { |
15 | // CHECK-LABEL: @test_storebe_i16 |
16 | // CHECK: [[DATA:%.*]] = call i16 @llvm.bswap.i16(i16 %{{.*}}) |
17 | // CHECK: store i16 [[DATA]], i16* %{{.*}}, align 1 |
18 | _storebe_i16(P, D); |
19 | } |
20 | |
21 | int test_loadbe_i32(const int *P) { |
22 | // CHECK-LABEL: @test_loadbe_i32 |
23 | // CHECK: [[LOAD:%.*]] = load i32, i32* %{{.*}}, align 1 |
24 | // CHECK: call i32 @llvm.bswap.i32(i32 [[LOAD]]) |
25 | return _loadbe_i32(P); |
26 | } |
27 | |
28 | void test_storebe_i32(int *P, int D) { |
29 | // CHECK-LABEL: @test_storebe_i32 |
30 | // CHECK: [[DATA:%.*]] = call i32 @llvm.bswap.i32(i32 %{{.*}}) |
31 | // CHECK: store i32 [[DATA]], i32* %{{.*}}, align 1 |
32 | _storebe_i32(P, D); |
33 | } |
34 | |
35 | #ifdef __x86_64__ |
36 | long long test_loadbe_i64(const long long *P) { |
37 | // CHECK-X64-LABEL: @test_loadbe_i64 |
38 | // CHECK-X64: [[LOAD:%.*]] = load i64, i64* %{{.*}}, align 1 |
39 | // CHECK-X64: call i64 @llvm.bswap.i64(i64 [[LOAD]]) |
40 | return _loadbe_i64(P); |
41 | } |
42 | |
43 | void test_storebe_i64(long long *P, long long D) { |
44 | // CHECK-X64-LABEL: @test_storebe_i64 |
45 | // CHECK-X64: [[DATA:%.*]] = call i64 @llvm.bswap.i64(i64 %{{.*}}) |
46 | // CHECK-X64: store i64 [[DATA]], i64* %{{.*}}, align 1 |
47 | _storebe_i64(P, D); |
48 | } |
49 | #endif |
50 | |