[X86] Fix TC_RETURN selection failure for Win+Thunk combination (#175977)

https://github.com/llvm/llvm-project/pull/158055 added a
IsNotWin64CCFunc predicate to these cases for reasons that are not super
clear to me, which causes selection failures as this combination is not
covered elsewhere.

Fixes https://github.com/llvm/llvm-project/issues/175965.
This commit is contained in:
Nikita Popov 2026-01-15 09:23:24 +01:00 committed by GitHub
parent e5999e84b6
commit 2789ad2b79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 2 deletions

View File

@ -1381,11 +1381,11 @@ def : Pat<(X86tcret_6regs (load addr:$dst), timm:$off),
def : Pat<(X86tcret ptr_rc_tailcall:$dst, timm:$off),
(INDIRECT_THUNK_TCRETURN64 ptr_rc_tailcall:$dst, timm:$off)>,
Requires<[In64BitMode, IsNotWin64CCFunc, UseIndirectThunkCalls]>;
Requires<[In64BitMode, UseIndirectThunkCalls]>;
def : Pat<(X86tcret ptr_rc_tailcall:$dst, timm:$off),
(INDIRECT_THUNK_TCRETURN32 ptr_rc_tailcall:$dst, timm:$off)>,
Requires<[Not64BitMode, IsNotWin64CCFunc, UseIndirectThunkCalls]>;
Requires<[Not64BitMode, UseIndirectThunkCalls]>;
def : Pat<(X86tcret (i64 tglobaladdr:$dst), timm:$off),
(TCRETURNdi64 tglobaladdr:$dst, timm:$off)>,

View File

@ -0,0 +1,19 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=64BIT
; RUN: llc -mtriple=i686-unknown-linux-gnu < %s | FileCheck %s --check-prefix=32BIT
define void @test(ptr %g) #0 {
; 64BIT-LABEL: test:
; 64BIT: # %bb.0:
; 64BIT-NEXT: movq %rdi, %r11
; 64BIT-NEXT: jmp __x86_indirect_thunk_r11 # TAILCALL
;
; 32BIT-LABEL: test:
; 32BIT: # %bb.0:
; 32BIT-NEXT: movl {{[0-9]+}}(%esp), %eax
; 32BIT-NEXT: jmp __x86_indirect_thunk_eax # TAILCALL
tail call void %g()
ret void
}
attributes #0 = { "target-features"="+retpoline-external-thunk" }