diff --git a/llvm/lib/Target/AArch64/AArch64FastISel.cpp b/llvm/lib/Target/AArch64/AArch64FastISel.cpp --- a/llvm/lib/Target/AArch64/AArch64FastISel.cpp +++ b/llvm/lib/Target/AArch64/AArch64FastISel.cpp @@ -3652,14 +3652,10 @@ 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::debugtrap: + BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(AArch64::BRK)) + .addImm(0xF000); + return true; case Intrinsic::sqrt: { Type *RetTy = II->getCalledFunction()->getReturnType(); diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -677,8 +677,7 @@ // Trap. setOperationAction(ISD::TRAP, MVT::Other, Legal); - if (Subtarget->isTargetWindows()) - setOperationAction(ISD::DEBUGTRAP, MVT::Other, Legal); + setOperationAction(ISD::DEBUGTRAP, MVT::Other, Legal); // We combine OR nodes for bitfield operations. setTargetDAGCombine(ISD::OR); diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td @@ -6663,7 +6663,7 @@ // __builtin_trap() uses the BRK instruction on AArch64. def : Pat<(trap), (BRK 1)>; -def : Pat<(debugtrap), (BRK 0xF000)>, Requires<[IsWindows]>; +def : Pat<(debugtrap), (BRK 0xF000)>; // Multiply high patterns which multiply the lower subvector using smull/umull // and the upper subvector with smull2/umull2. Then shuffle the high the high diff --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp --- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp +++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp @@ -4633,8 +4633,6 @@ MIRBuilder.buildInstr(AArch64::BRK, {}, {}).addImm(1); break; case Intrinsic::debugtrap: - if (!STI.isTargetWindows()) - return false; MIRBuilder.buildInstr(AArch64::BRK, {}, {}).addImm(0xF000); break; } diff --git a/llvm/test/CodeGen/AArch64/windows-trap1.ll b/llvm/test/CodeGen/AArch64/debugtrap.ll rename from llvm/test/CodeGen/AArch64/windows-trap1.ll rename to llvm/test/CodeGen/AArch64/debugtrap.ll --- a/llvm/test/CodeGen/AArch64/windows-trap1.ll +++ b/llvm/test/CodeGen/AArch64/debugtrap.ll @@ -1,6 +1,9 @@ ; RUN: llc -mtriple=aarch64-windows %s -o -| FileCheck %s ; RUN: llc -mtriple=aarch64-windows -fast-isel %s -o - | FileCheck %s ; RUN: llc -mtriple=aarch64-windows -global-isel %s -o - | FileCheck %s +; RUN: llc -mtriple=aarch64-linux-gnu %s -o -| FileCheck %s +; RUN: llc -mtriple=arm64-apple-ios -global-isel %s -o - | FileCheck %s +; RUN: llc -mtriple=arm64-apple-macosx -fast-isel %s -o - | FileCheck %s ; CHECK-LABEL: test1: ; CHECK: brk #0xf000