[PATCH] D134441: [ObjC][ARC] Fix target register for call expanded from CALL_RVMARKER on Windows
Stefan Gränitz via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 27 09:50:59 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGed8409dfa0a9: [ObjC][ARC] Fix target register for call expanded from CALL_RVMARKER on Windows (authored by sgraenitz).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134441/new/
https://reviews.llvm.org/D134441
Files:
llvm/lib/Target/X86/X86ExpandPseudo.cpp
llvm/test/CodeGen/X86/call-rv-marker.ll
Index: llvm/test/CodeGen/X86/call-rv-marker.ll
===================================================================
--- llvm/test/CodeGen/X86/call-rv-marker.ll
+++ llvm/test/CodeGen/X86/call-rv-marker.ll
@@ -1,4 +1,5 @@
; RUN: llc -mtriple=x86_64-apple-macosx -verify-machineinstrs -o - %s | FileCheck --check-prefix=CHECK %s
+; RUN: llc -mtriple=x86_64-windows-msvc -verify-machineinstrs -o - %s | FileCheck --check-prefix=WINABI %s
; TODO: support marker generation with GlobalISel
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
@@ -33,6 +34,12 @@
; CHECK-NEXT: popq %rcx
; CHECK-NEXT: retq
;
+; WINABI-LABEL: rv_marker_1_retain:
+; WINABI: callq foo1
+; WINABI-NEXT: movq %rax, %rcx
+; WINABI-NEXT: callq objc_retainAutoreleasedReturnValue
+; WINABI-NEXT: nop
+;
entry:
%call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr @objc_retainAutoreleasedReturnValue) ]
ret ptr %call
Index: llvm/lib/Target/X86/X86ExpandPseudo.cpp
===================================================================
--- llvm/lib/Target/X86/X86ExpandPseudo.cpp
+++ llvm/lib/Target/X86/X86ExpandPseudo.cpp
@@ -224,9 +224,11 @@
// Emit marker "movq %rax, %rdi". %rdi is not callee-saved, so it cannot be
// live across the earlier call. The call to the ObjC runtime function returns
// the first argument, so the value of %rax is unchanged after the ObjC
- // runtime call.
+ // runtime call. On Windows targets, the runtime call follows the regular
+ // x64 calling convention and expects the first argument in %rcx.
+ auto TargetReg = STI->getTargetTriple().isOSWindows() ? X86::RCX : X86::RDI;
auto *Marker = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(X86::MOV64rr))
- .addReg(X86::RDI, RegState::Define)
+ .addReg(TargetReg, RegState::Define)
.addReg(X86::RAX)
.getInstr();
if (MI.shouldUpdateCallSiteInfo())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134441.463263.patch
Type: text/x-patch
Size: 1968 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220927/006fa57c/attachment.bin>
More information about the cfe-commits
mailing list