diff options
author | Tom Tan <Tom.Tan@microsoft.com> | 2019-06-21 23:38:05 +0000 |
---|---|---|
committer | Tom Tan <Tom.Tan@microsoft.com> | 2019-06-21 23:38:05 +0000 |
commit | 7ecb5145bae57fce44c53f3e8eacea76078e3825 (patch) | |
tree | 9f664fe9f45471f1a87c438fab1b6665d294c1db /llvm/lib/Target/AArch64/AArch64FastISel.cpp | |
parent | 51a741c87fa8f87c8b37015dac4bce2b10d1ce81 (diff) | |
download | bcm5719-llvm-7ecb5145bae57fce44c53f3e8eacea76078e3825.tar.gz bcm5719-llvm-7ecb5145bae57fce44c53f3e8eacea76078e3825.zip |
[COFF, ARM64] Fix encoding of debugtrap for Windows
On Windows ARM64, intrinsic __debugbreak is compiled into brk #0xF000 which is
mapped to llvm.debugtrap in Clang. Instruction brk #F000 is the defined break
point instruction on ARM64 which is recognized by Windows debugger and
exception handling code, so llvm.debugtrap should map to it instead of
redirecting to llvm.trap (brk #1) as the default implementation.
Differential Revision: https://reviews.llvm.org/D63635
llvm-svn: 364115
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64FastISel.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64FastISel.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64FastISel.cpp b/llvm/lib/Target/AArch64/AArch64FastISel.cpp index 8b033ee6376..91194611179 100644 --- a/llvm/lib/Target/AArch64/AArch64FastISel.cpp +++ b/llvm/lib/Target/AArch64/AArch64FastISel.cpp @@ -3604,6 +3604,14 @@ bool AArch64FastISel::fastLowerIntrinsicCall(const IntrinsicInst *II) { BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::BRK)) .addImm(1); return true; + case Intrinsic::debugtrap: { + if (Subtarget->isTargetWindows()) { + BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::BRK)) + .addImm(0xF000); + return true; + } + break; + } case Intrinsic::sqrt: { Type *RetTy = II->getCalledFunction()->getReturnType(); |