diff options
author | Hans Wennborg <hans@hanshq.net> | 2015-12-04 23:00:33 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2015-12-04 23:00:33 +0000 |
commit | 5000ce8a632c701aba09ddfa6d4bc33ae1b6f5a5 (patch) | |
tree | ae02f06e6e57385712e8cd41ded1a8af676109a6 /llvm/lib/Target/X86/X86ISelLowering.cpp | |
parent | 3e9e7d28225fd7d262c660cf19429930d3bc2991 (diff) | |
download | bcm5719-llvm-5000ce8a632c701aba09ddfa6d4bc33ae1b6f5a5.tar.gz bcm5719-llvm-5000ce8a632c701aba09ddfa6d4bc33ae1b6f5a5.zip |
X86: Don't emit SAHF/LAHF for 64-bit targets unless explicitly supported
These instructions are not supported by all CPUs in 64-bit mode. Emitting them
causes Chromium to crash on start-up for users with such chips.
(GCC puts these instructions behind -msahf on 64-bit for the same reason.)
This patch adds FeatureLAHFSAHF, enables it by default for 32-bit targets
and modern CPUs, and changes X86InstrInfo::copyPhysReg back to the lowering
from before r244503 when the instructions are not available.
Differential Revision: http://reviews.llvm.org/D15240
llvm-svn: 254793
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 2cf1d4ba30e..c07bca8fe52 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -13930,6 +13930,9 @@ SDValue X86TargetLowering::ConvertCmpIfNecessary(SDValue Cmp, SDValue Srl = DAG.getNode(ISD::SRL, dl, MVT::i16, FNStSW, DAG.getConstant(8, dl, MVT::i8)); SDValue TruncSrl = DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, Srl); + + // Some 64-bit targets lack SAHF support, but they do support FCOMI. + assert(Subtarget->hasLAHFSAHF() && "Target doesn't support SAHF or FCOMI?"); return DAG.getNode(X86ISD::SAHF, dl, MVT::i32, TruncSrl); } |