summaryrefslogtreecommitdiff
path: root/llvm/lib/Target/X86/X86TargetMachine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r--llvm/lib/Target/X86/X86TargetMachine.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index 336985f3bf9d..78bc5519c23f 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -588,6 +588,18 @@ void X86PassConfig::addPreEmitPass2() {
// Insert pseudo probe annotation for callsite profiling
addPass(createPseudoProbeInserter());
+
+ // On Darwin platforms, BLR_RVMARKER pseudo instructions are lowered to
+ // bundles.
+ if (TT.isOSDarwin())
+ addPass(createUnpackMachineBundles([](const MachineFunction &MF) {
+ // Only run bundle expansion if there are relevant ObjC runtime functions
+ // present in the module.
+ const Function &F = MF.getFunction();
+ const Module *M = F.getParent();
+ return M->getFunction("objc_retainAutoreleasedReturnValue") ||
+ M->getFunction("objc_unsafeClaimAutoreleasedReturnValue");
+ }));
}
bool X86PassConfig::addPostFastRegAllocRewrite() {