aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorFreddy Ye <freddy.ye@intel.com>2021-10-12 09:57:26 +0800
committerFreddy Ye <freddy.ye@intel.com>2021-10-12 11:01:18 +0800
commitd57a87ea89c750b6d1cf359b619eea4eda806e1a (patch)
tree79c993839743a7a20719ff5922ff7762f2840e42 /llvm/lib
parent97f0c63783f52389bd8842df205379ceade7a89d (diff)
downloadllvm-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.cpp13
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.");
+ }
}
}