diff options
author | Freddy Ye <freddy.ye@intel.com> | 2021-10-12 09:57:26 +0800 |
---|---|---|
committer | Freddy Ye <freddy.ye@intel.com> | 2021-10-12 11:01:18 +0800 |
commit | d57a87ea89c750b6d1cf359b619eea4eda806e1a (patch) | |
tree | 79c993839743a7a20719ff5922ff7762f2840e42 /llvm/lib | |
parent | 97f0c63783f52389bd8842df205379ceade7a89d (diff) | |
download | llvm-d57a87ea89c750b6d1cf359b619eea4eda806e1a.zip llvm-d57a87ea89c750b6d1cf359b619eea4eda806e1a.tar.gz llvm-d57a87ea89c750b6d1cf359b619eea4eda806e1a.tar.bz2 |
[X86][ISel] Lowering llvm.thread.pointer
Reviewed By: pengfei
Differential Revision: https://reviews.llvm.org/D110681
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 2b34f9a..d1579d4 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -26761,6 +26761,19 @@ SDValue X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, getPointerTy(DAG.getDataLayout())), Op.getOperand(1), ShAmt); } + case Intrinsic::thread_pointer: { + if (Subtarget.isTargetELF()) { + SDLoc dl(Op); + EVT PtrVT = getPointerTy(DAG.getDataLayout()); + // Get the Thread Pointer, which is %gs:0 (32-bit) or %fs:0 (64-bit). + Value *Ptr = Constant::getNullValue(Type::getInt8PtrTy( + *DAG.getContext(), Subtarget.is64Bit() ? X86AS::FS : X86AS::GS)); + return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), + DAG.getIntPtrConstant(0, dl), MachinePointerInfo(Ptr)); + } + report_fatal_error( + "Target OS doesn't support __builtin_thread_pointer() yet."); + } } } |