diff options
| author | Craig Topper <craig.topper@intel.com> | 2018-09-07 19:14:24 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2018-09-07 19:14:24 +0000 |
| commit | ecf2e2fe312a5dd297e6c0c78b89c98cf1073b0d (patch) | |
| tree | 2e4d45410d460633142600bb6b4ab44a6203d445 /clang/lib/CodeGen | |
| parent | 4863313b350bd32f787d443c7ea24f102fb7a0fc (diff) | |
| download | bcm5719-llvm-ecf2e2fe312a5dd297e6c0c78b89c98cf1073b0d.tar.gz bcm5719-llvm-ecf2e2fe312a5dd297e6c0c78b89c98cf1073b0d.zip | |
[X86] Custom emit __builtin_rdtscp so we can emit an explicit store for the out parameter
This is the clang side of D51803. The llvm intrinsic now returns two results. So we need to emit an explicit store in IR for the out parameter. This is similar to addcarry/subborrow/rdrand/rdseed.
Differential Revision: https://reviews.llvm.org/D51805
llvm-svn: 341699
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index a472bf59d71..90505ac088d 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -9158,6 +9158,12 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, case X86::BI__rdtsc: { return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_rdtsc)); } + case X86::BI__builtin_ia32_rdtscp: { + Value *Call = Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_rdtscp)); + Builder.CreateDefaultAlignedStore(Builder.CreateExtractValue(Call, 1), + Ops[0]); + return Builder.CreateExtractValue(Call, 0); + } case X86::BI__builtin_ia32_undef128: case X86::BI__builtin_ia32_undef256: case X86::BI__builtin_ia32_undef512: |

