[llvm] [X86][GlobalISel] Enable SINCOS with libcall mapping (PR #142438)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 24 04:18:26 PDT 2025
================
@@ -648,6 +650,57 @@ simpleLibcall(MachineInstr &MI, MachineIRBuilder &MIRBuilder, unsigned Size,
LocObserver, &MI);
}
+LegalizerHelper::LegalizeResult LegalizerHelper::simpleLibcallSinCos(
+ MachineInstr &MI, MachineIRBuilder &MIRBuilder, unsigned Size, Type *OpType,
+ LostDebugLocObserver &LocObserver) {
+ MachineFunction &MF = *MI.getMF();
+ MachineRegisterInfo &MRI = MF.getRegInfo();
+
+ Register DstSin = MI.getOperand(0).getReg();
+ Register DstCos = MI.getOperand(1).getReg();
+ Register Src = MI.getOperand(2).getReg();
+ LLT DstTy = MRI.getType(DstSin);
+ LLT SrcTy = MRI.getType(Src);
+
+ assert((SrcTy.getSizeInBits() == 32 || SrcTy.getSizeInBits() == 64 ||
+ SrcTy.getSizeInBits() == 80) &&
+ "Unexpected source type for SINCOS.");
+
+ int MemSize = DstTy.getSizeInBytes();
+ Align Alignment = getStackTemporaryAlignment(DstTy);
+ const DataLayout &DL = MIRBuilder.getDataLayout();
+ unsigned AddrSpace = DL.getAllocaAddrSpace();
+ MachinePointerInfo PtrInfo;
+
+ Register StackPtrSin =
+ createStackTemporary(TypeSize::getFixed(MemSize), Alignment, PtrInfo)
+ .getReg(0);
+ Register StackPtrCos =
+ createStackTemporary(TypeSize::getFixed(MemSize), Alignment, PtrInfo)
+ .getReg(0);
+
+ auto &Ctx = MF.getFunction().getContext();
+ if (LegalizerHelper::LegalizeResult::Legalized !=
+ createLibcall(MIRBuilder, getRTLibDesc(MI.getOpcode(), Size),
+ {{0}, Type::getVoidTy(Ctx), 0},
+ {{Src, OpType, 0},
+ {StackPtrSin, PointerType::get(Ctx, AddrSpace), 1},
+ {StackPtrCos, PointerType::get(Ctx, AddrSpace), 2}},
+ LocObserver, &MI)) {
----------------
arsenm wrote:
Backwards condition. Also should pull the createLibcall and assign the status to a temporary variable
https://github.com/llvm/llvm-project/pull/142438
More information about the llvm-commits
mailing list