diff options
author | Nico Weber <nicolasweber@gmx.de> | 2018-08-17 17:19:06 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2018-08-17 17:19:06 +0000 |
commit | 9e45fbd56cdcc6c62a276b5838878cc65dee4831 (patch) | |
tree | 1b576225ef0097cdbdfa1425de37a20ea9d49d9a /test/CodeGen/ms-x86-intrinsics.c | |
parent | 0e6cfa4e8a86bd9f35d69f44aae209918475e44d (diff) | |
download | clang-9e45fbd56cdcc6c62a276b5838878cc65dee4831.tar.gz |
Make __shiftleft128 / __shiftright128 real compiler built-ins.
r337619 added __shiftleft128 / __shiftright128 as functions in intrin.h.
Microsoft's STL plans on using these functions, and they're using intrin0.h
which just has declarations of built-ins to not pull in the huge intrin.h
header in the standard library headers. That requires that these functions are
real built-ins.
https://reviews.llvm.org/D50907
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@340048 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/ms-x86-intrinsics.c')
-rw-r--r-- | test/CodeGen/ms-x86-intrinsics.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/test/CodeGen/ms-x86-intrinsics.c b/test/CodeGen/ms-x86-intrinsics.c index 450a134131..bd8f5fce23 100644 --- a/test/CodeGen/ms-x86-intrinsics.c +++ b/test/CodeGen/ms-x86-intrinsics.c @@ -130,4 +130,34 @@ unsigned __int64 test_umul128(unsigned __int64 Multiplier, // CHECK-X64: = mul nuw i128 % // CHECK-X64: store i64 % // CHECK-X64: ret i64 % -#endif + +unsigned __int64 test__shiftleft128(unsigned __int64 l, unsigned __int64 h, + unsigned char d) { + return __shiftleft128(l, h, d); +} +// CHECK-X64-LABEL: define dso_local i64 @test__shiftleft128(i64 %l, i64 %h, i8 %d) +// CHECK-X64 = zext i64 %h to i128 +// CHECK-X64 = shl nuw i128 %0, 64 +// CHECK-X64 = zext i64 %l to i128 +// CHECK-X64 = or i128 %1, %2 +// CHECK-X64 = and i8 %d, 63 +// CHECK-X64 = shl i128 % +// CHECK-X64 = lshr i128 % +// CHECK-X64 = trunc i128 % +// CHECK-X64 ret i64 % + +unsigned __int64 test__shiftright128(unsigned __int64 l, unsigned __int64 h, + unsigned char d) { + return __shiftright128(l, h, d); +} +// CHECK-X64-LABEL: define dso_local i64 @test__shiftright128(i64 %l, i64 %h, i8 %d) +// CHECK-X64 = zext i64 %h to i128 +// CHECK-X64 = shl nuw i128 % +// CHECK-X64 = zext i64 %l to i128 +// CHECK-X64 = or i128 % +// CHECK-X64 = and i8 %d, 63 +// CHECK-X64 = lshr i128 % +// CHECK-X64 = trunc i128 % +// CHECK-X64 ret i64 % + +#endif // defined(__x86_64__) |