mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-30 02:25:19 +00:00
Use function attribute "trap-func-name" and remove TargetOptions::TrapFuncName.
This commit changes normal isel and fast isel to read the user-defined trap function name from function attribute "trap-func-name" attached to llvm.trap or llvm.debugtrap instead of from TargetOptions::TrapFuncName. This is needed to use clang's command line option "-ftrap-function" for LTO and enable changing the trap function name on a per-call-site basis. Out-of-tree projects currently using TargetOptions::TrapFuncName to specify the trap function name should attach attribute "trap-func-name" to the call sites of llvm.trap and llvm.debugtrap instead. rdar://problem/21225723 Differential Revision: http://reviews.llvm.org/D10832 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241305 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1350,7 +1350,7 @@ bool FastISel::selectInstruction(const Instruction *I) {
|
||||
|
||||
// Don't handle Intrinsic::trap if a trap funciton is specified.
|
||||
if (F && F->getIntrinsicID() == Intrinsic::trap &&
|
||||
!TM.Options.getTrapFunctionName().empty())
|
||||
Call->hasFnAttr("trap-func-name"))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -4780,7 +4780,10 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
||||
|
||||
case Intrinsic::debugtrap:
|
||||
case Intrinsic::trap: {
|
||||
StringRef TrapFuncName = TM.Options.getTrapFunctionName();
|
||||
StringRef TrapFuncName =
|
||||
I.getAttributes()
|
||||
.getAttribute(AttributeSet::FunctionIndex, "trap-func-name")
|
||||
.getValueAsString();
|
||||
if (TrapFuncName.empty()) {
|
||||
ISD::NodeType Op = (Intrinsic == Intrinsic::trap) ?
|
||||
ISD::TRAP : ISD::DEBUGTRAP;
|
||||
|
@@ -47,10 +47,3 @@ bool TargetOptions::LessPreciseFPMAD() const {
|
||||
bool TargetOptions::HonorSignDependentRoundingFPMath() const {
|
||||
return !UnsafeFPMath && HonorSignDependentRoundingFPMathOption;
|
||||
}
|
||||
|
||||
/// getTrapFunctionName - If this returns a non-empty string, this means isel
|
||||
/// should lower Intrinsic::trap to a call to the specified function name
|
||||
/// instead of an ISD::TRAP node.
|
||||
StringRef TargetOptions::getTrapFunctionName() const {
|
||||
return TrapFuncName;
|
||||
}
|
||||
|
Reference in New Issue
Block a user