[Mlir-commits] [mlir] 782045e - Revert "HHVM calling conventions."
Amir Ayupov
llvmlistbot at llvm.org
Thu Feb 9 10:53:19 PST 2023
Author: Amir Aupov
Date: 2023-02-09T10:53:11-08:00
New Revision: 782045e727b70d19c7fa70c388eddb65390060d9
URL: https://github.com/llvm/llvm-project/commit/782045e727b70d19c7fa70c388eddb65390060d9
DIFF: https://github.com/llvm/llvm-project/commit/782045e727b70d19c7fa70c388eddb65390060d9.diff
LOG: Revert "HHVM calling conventions."
This reverts commit cce239c45d6ef3865a017b5b3f935964e0348734.
HHVM calling conventions are unused. Remove them by partially reverting the commit.
Reviewed By: MaskRay, MatzeB
Differential Revision: https://reviews.llvm.org/D124330
Added:
Modified:
llvm/include/llvm/CodeGen/TargetFrameLowering.h
llvm/include/llvm/IR/CallingConv.h
llvm/lib/AsmParser/LLParser.cpp
llvm/lib/CodeGen/PrologEpilogInserter.cpp
llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
llvm/lib/IR/AsmWriter.cpp
llvm/lib/Target/X86/X86CallingConv.td
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86RegisterInfo.cpp
llvm/test/CodeGen/X86/statepoint-fastregalloc.mir
llvm/test/Feature/callingconventions.ll
mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td
Removed:
llvm/test/CodeGen/X86/hhvm-cc.ll
################################################################################
diff --git a/llvm/include/llvm/CodeGen/TargetFrameLowering.h b/llvm/include/llvm/CodeGen/TargetFrameLowering.h
index fbce5d7a9102a..3d81ed6587fda 100644
--- a/llvm/include/llvm/CodeGen/TargetFrameLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetFrameLowering.h
@@ -123,11 +123,6 @@ class TargetFrameLowering {
return StackRealignable;
}
- /// Return the skew that has to be applied to stack alignment under
- /// certain conditions (e.g. stack was adjusted before function \p MF
- /// was called).
- virtual unsigned getStackAlignmentSkew(const MachineFunction &MF) const;
-
/// This method returns whether or not it is safe for an object with the
/// given stack id to be bundled into the local area.
virtual bool isStackIdSafeForLocalArea(unsigned StackId) const {
diff --git a/llvm/include/llvm/IR/CallingConv.h b/llvm/include/llvm/IR/CallingConv.h
index 9fefeef05cb21..395a19d595de9 100644
--- a/llvm/include/llvm/IR/CallingConv.h
+++ b/llvm/include/llvm/IR/CallingConv.h
@@ -159,13 +159,9 @@ namespace CallingConv {
/// registers.
X86_VectorCall = 80,
- /// Used by HipHop Virtual Machine (HHVM) to perform calls to and from
- /// translation cache, and for calling PHP functions. HHVM calling
- /// convention supports tail/sibling call elimination.
- HHVM = 81,
-
- /// HHVM calling convention for invoking C/C++ helpers.
- HHVM_C = 82,
+ /// Placeholders for HHVM calling conventions (deprecated, removed).
+ DUMMY_HHVM = 81,
+ DUMMY_HHVM_C = 82,
/// x86 hardware interrupt context. Callee may take one or two parameters,
/// where the 1st represents a pointer to hardware context frame and the 2nd
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index f23e5f45a661a..077b290fe0e00 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -2065,8 +2065,12 @@ bool LLParser::parseOptionalCallingConv(unsigned &CC) {
case lltok::kw_swiftcc: CC = CallingConv::Swift; break;
case lltok::kw_swifttailcc: CC = CallingConv::SwiftTail; break;
case lltok::kw_x86_intrcc: CC = CallingConv::X86_INTR; break;
- case lltok::kw_hhvmcc: CC = CallingConv::HHVM; break;
- case lltok::kw_hhvm_ccc: CC = CallingConv::HHVM_C; break;
+ case lltok::kw_hhvmcc:
+ CC = CallingConv::DUMMY_HHVM;
+ break;
+ case lltok::kw_hhvm_ccc:
+ CC = CallingConv::DUMMY_HHVM_C;
+ break;
case lltok::kw_cxx_fast_tlscc: CC = CallingConv::CXX_FAST_TLS; break;
case lltok::kw_amdgpu_vs: CC = CallingConv::AMDGPU_VS; break;
case lltok::kw_amdgpu_gfx: CC = CallingConv::AMDGPU_Gfx; break;
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
index cc70ec4776506..752cff1665271 100644
--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -692,7 +692,7 @@ void PEI::spillCalleeSavedRegs(MachineFunction &MF) {
/// AdjustStackOffset - Helper function used to adjust the stack frame offset.
static inline void AdjustStackOffset(MachineFrameInfo &MFI, int FrameIdx,
bool StackGrowsDown, int64_t &Offset,
- Align &MaxAlign, unsigned Skew) {
+ Align &MaxAlign) {
// If the stack grows down, add the object size to find the lowest address.
if (StackGrowsDown)
Offset += MFI.getObjectSize(FrameIdx);
@@ -704,7 +704,7 @@ static inline void AdjustStackOffset(MachineFrameInfo &MFI, int FrameIdx,
MaxAlign = std::max(MaxAlign, Alignment);
// Adjust to alignment boundary.
- Offset = alignTo(Offset, Alignment, Skew);
+ Offset = alignTo(Offset, Alignment);
if (StackGrowsDown) {
LLVM_DEBUG(dbgs() << "alloc FI(" << FrameIdx << ") at SP[" << -Offset
@@ -828,11 +828,10 @@ static inline bool scavengeStackSlot(MachineFrameInfo &MFI, int FrameIdx,
static void AssignProtectedObjSet(const StackObjSet &UnassignedObjs,
SmallSet<int, 16> &ProtectedObjs,
MachineFrameInfo &MFI, bool StackGrowsDown,
- int64_t &Offset, Align &MaxAlign,
- unsigned Skew) {
+ int64_t &Offset, Align &MaxAlign) {
for (int i : UnassignedObjs) {
- AdjustStackOffset(MFI, i, StackGrowsDown, Offset, MaxAlign, Skew);
+ AdjustStackOffset(MFI, i, StackGrowsDown, Offset, MaxAlign);
ProtectedObjs.insert(i);
}
}
@@ -858,9 +857,6 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
&& "Local area offset should be in direction of stack growth");
int64_t Offset = LocalAreaOffset;
- // Skew to be applied to alignment.
- unsigned Skew = TFI.getStackAlignmentSkew(MF);
-
#ifdef EXPENSIVE_CHECKS
for (unsigned i = 0, e = MFI.getObjectIndexEnd(); i != e; ++i)
if (!MFI.isDeadObjectIndex(i) &&
@@ -908,8 +904,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
if (!StackGrowsDown && MFI.isDeadObjectIndex(FrameIndex))
continue;
- AdjustStackOffset(MFI, FrameIndex, StackGrowsDown, Offset, MaxAlign,
- Skew);
+ AdjustStackOffset(MFI, FrameIndex, StackGrowsDown, Offset, MaxAlign);
}
}
@@ -930,7 +925,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
SmallVector<int, 2> SFIs;
RS->getScavengingFrameIndices(SFIs);
for (int SFI : SFIs)
- AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign, Skew);
+ AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign);
}
// FIXME: Once this is working, then enable flag will change to a target
@@ -941,7 +936,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
Align Alignment = MFI.getLocalFrameMaxAlign();
// Adjust to alignment boundary.
- Offset = alignTo(Offset, Alignment, Skew);
+ Offset = alignTo(Offset, Alignment);
LLVM_DEBUG(dbgs() << "Local frame base offset: " << Offset << "\n");
@@ -987,8 +982,8 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
"Stack protector on non-default stack expected to not be "
"pre-allocated by LocalStackSlotPass.");
} else if (!MFI.getUseLocalStackAllocationBlock()) {
- AdjustStackOffset(MFI, StackProtectorFI, StackGrowsDown, Offset, MaxAlign,
- Skew);
+ AdjustStackOffset(MFI, StackProtectorFI, StackGrowsDown, Offset,
+ MaxAlign);
} else if (!MFI.isObjectPreAllocated(MFI.getStackProtectorIndex())) {
llvm_unreachable(
"Stack protector not pre-allocated by LocalStackSlotPass.");
@@ -1036,11 +1031,11 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
"LocalStackSlotPass.");
AssignProtectedObjSet(LargeArrayObjs, ProtectedObjs, MFI, StackGrowsDown,
- Offset, MaxAlign, Skew);
+ Offset, MaxAlign);
AssignProtectedObjSet(SmallArrayObjs, ProtectedObjs, MFI, StackGrowsDown,
- Offset, MaxAlign, Skew);
+ Offset, MaxAlign);
AssignProtectedObjSet(AddrOfObjs, ProtectedObjs, MFI, StackGrowsDown,
- Offset, MaxAlign, Skew);
+ Offset, MaxAlign);
}
SmallVector<int, 8> ObjectsToAllocate;
@@ -1071,7 +1066,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
// Allocate the EH registration node first if one is present.
if (EHRegNodeFrameIndex != std::numeric_limits<int>::max())
AdjustStackOffset(MFI, EHRegNodeFrameIndex, StackGrowsDown, Offset,
- MaxAlign, Skew);
+ MaxAlign);
// Give the targets a chance to order the objects the way they like it.
if (MF.getTarget().getOptLevel() != CodeGenOpt::None &&
@@ -1093,7 +1088,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
for (auto &Object : ObjectsToAllocate)
if (!scavengeStackSlot(MFI, Object, StackGrowsDown, MaxAlign,
StackBytesFree))
- AdjustStackOffset(MFI, Object, StackGrowsDown, Offset, MaxAlign, Skew);
+ AdjustStackOffset(MFI, Object, StackGrowsDown, Offset, MaxAlign);
// Make sure the special register scavenging spill slot is closest to the
// stack pointer.
@@ -1101,7 +1096,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
SmallVector<int, 2> SFIs;
RS->getScavengingFrameIndices(SFIs);
for (int SFI : SFIs)
- AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign, Skew);
+ AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign);
}
if (!TFI.targetHandlesStackFrameRounding()) {
@@ -1127,7 +1122,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &MF) {
// SP not FP. Align to MaxAlign so this works.
StackAlign = std::max(StackAlign, MaxAlign);
int64_t OffsetBeforeAlignment = Offset;
- Offset = alignTo(Offset, StackAlign, Skew);
+ Offset = alignTo(Offset, StackAlign);
// If we have increased the offset to fulfill the alignment constrants,
// then the scavenging spill slots may become harder to reach from the
diff --git a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
index 9430e86fe44d8..48a2094f5d451 100644
--- a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
+++ b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
@@ -17,7 +17,6 @@
#include "llvm/CodeGen/TargetFrameLowering.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/Attributes.h"
-#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/MC/MCAsmInfo.h"
@@ -131,16 +130,6 @@ void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF,
}
}
-unsigned TargetFrameLowering::getStackAlignmentSkew(
- const MachineFunction &MF) const {
- // When HHVM function is called, the stack is skewed as the return address
- // is removed from the stack before we enter the function.
- if (LLVM_UNLIKELY(MF.getFunction().getCallingConv() == CallingConv::HHVM))
- return MF.getTarget().getAllocaPointerSize();
-
- return 0;
-}
-
bool TargetFrameLowering::allocateScavengingFrameIndexesNearIncomingSP(
const MachineFunction &MF) const {
if (!hasFP(MF))
diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp
index 6108ce09c289a..d8e3d25ea15d1 100644
--- a/llvm/lib/IR/AsmWriter.cpp
+++ b/llvm/lib/IR/AsmWriter.cpp
@@ -329,8 +329,12 @@ static void PrintCallingConv(unsigned cc, raw_ostream &Out) {
case CallingConv::Swift: Out << "swiftcc"; break;
case CallingConv::SwiftTail: Out << "swifttailcc"; break;
case CallingConv::X86_INTR: Out << "x86_intrcc"; break;
- case CallingConv::HHVM: Out << "hhvmcc"; break;
- case CallingConv::HHVM_C: Out << "hhvm_ccc"; break;
+ case CallingConv::DUMMY_HHVM:
+ Out << "hhvmcc";
+ break;
+ case CallingConv::DUMMY_HHVM_C:
+ Out << "hhvm_ccc";
+ break;
case CallingConv::AMDGPU_VS: Out << "amdgpu_vs"; break;
case CallingConv::AMDGPU_LS: Out << "amdgpu_ls"; break;
case CallingConv::AMDGPU_HS: Out << "amdgpu_hs"; break;
diff --git a/llvm/lib/Target/X86/X86CallingConv.td b/llvm/lib/Target/X86/X86CallingConv.td
index c92a308040143..06cebdc215943 100644
--- a/llvm/lib/Target/X86/X86CallingConv.td
+++ b/llvm/lib/Target/X86/X86CallingConv.td
@@ -430,16 +430,6 @@ def RetCC_X86_64_AnyReg : CallingConv<[
CCCustom<"CC_X86_AnyReg_Error">
]>;
-// X86-64 HHVM return-value convention.
-def RetCC_X86_64_HHVM: CallingConv<[
- // Promote all types to i64
- CCIfType<[i8, i16, i32], CCPromoteToType<i64>>,
-
- // Return: could return in any GP register save RSP and R12.
- CCIfType<[i64], CCAssignToReg<[RBX, RBP, RDI, RSI, RDX, RCX, R8, R9,
- RAX, R10, R11, R13, R14, R15]>>
-]>;
-
defm X86_32_RegCall :
X86_RegCall_base<RC_X86_32_RegCall>;
@@ -483,9 +473,6 @@ def RetCC_X86_64 : CallingConv<[
// Handle Vectorcall CC
CCIfCC<"CallingConv::X86_VectorCall", CCDelegateTo<RetCC_X86_64_Vectorcall>>,
- // Handle HHVM calls.
- CCIfCC<"CallingConv::HHVM", CCDelegateTo<RetCC_X86_64_HHVM>>,
-
CCIfCC<"CallingConv::X86_RegCall",
CCIfSubtarget<"isTargetWin64()",
CCDelegateTo<RetCC_X86_Win64_RegCall>>>,
@@ -603,23 +590,6 @@ def CC_X86_64_C : CallingConv<[
CCAssignToStack<64, 64>>
]>;
-// Calling convention for X86-64 HHVM.
-def CC_X86_64_HHVM : CallingConv<[
- // Use all/any GP registers for args, except RSP.
- CCIfType<[i64], CCAssignToReg<[RBX, R12, RBP, R15,
- RDI, RSI, RDX, RCX, R8, R9,
- RAX, R10, R11, R13, R14]>>
-]>;
-
-// Calling convention for helper functions in HHVM.
-def CC_X86_64_HHVM_C : CallingConv<[
- // Pass the first argument in RBP.
- CCIfType<[i64], CCAssignToReg<[RBP]>>,
-
- // Otherwise it's the same as the regular C calling convention.
- CCDelegateTo<CC_X86_64_C>
-]>;
-
// Calling convention used on Win64
def CC_X86_Win64_C : CallingConv<[
// FIXME: Handle varargs.
@@ -1097,8 +1067,6 @@ def CC_X86_64 : CallingConv<[
CCIfCC<"CallingConv::Win64", CCDelegateTo<CC_X86_Win64_C>>,
CCIfCC<"CallingConv::X86_64_SysV", CCDelegateTo<CC_X86_64_C>>,
CCIfCC<"CallingConv::X86_VectorCall", CCDelegateTo<CC_X86_Win64_VectorCall>>,
- CCIfCC<"CallingConv::HHVM", CCDelegateTo<CC_X86_64_HHVM>>,
- CCIfCC<"CallingConv::HHVM_C", CCDelegateTo<CC_X86_64_HHVM_C>>,
CCIfCC<"CallingConv::X86_RegCall",
CCIfSubtarget<"isTargetWin64()", CCDelegateTo<CC_X86_Win64_RegCall>>>,
CCIfCC<"CallingConv::X86_RegCall", CCDelegateTo<CC_X86_SysV64_RegCall>>,
@@ -1210,9 +1178,6 @@ def CSR_64_Intel_OCL_BI_AVX512 : CalleeSavedRegs<(add RBX, RSI, R14, R15,
(sequence "ZMM%u", 16, 31),
K4, K5, K6, K7)>;
-// Only R12 is preserved for PHP calls in HHVM.
-def CSR_64_HHVM : CalleeSavedRegs<(add R12)>;
-
// Register calling convention preserves few GPR and XMM8-15
def CSR_32_RegCall_NoSSE : CalleeSavedRegs<(add ESI, EDI, EBX, EBP)>;
def CSR_32_RegCall : CalleeSavedRegs<(add CSR_32_RegCall_NoSSE,
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index a045c2c88fdac..d868618f3e2ec 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -3717,8 +3717,7 @@ static SDValue CreateCopyOfByValArgument(SDValue Src, SDValue Dst,
static bool canGuaranteeTCO(CallingConv::ID CC) {
return (CC == CallingConv::Fast || CC == CallingConv::GHC ||
CC == CallingConv::X86_RegCall || CC == CallingConv::HiPE ||
- CC == CallingConv::HHVM || CC == CallingConv::Tail ||
- CC == CallingConv::SwiftTail);
+ CC == CallingConv::Tail || CC == CallingConv::SwiftTail);
}
/// Return true if we might ever do TCO for calls with this calling convention.
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp
index 7ce3dca7f3a79..327c61c4c5d0b 100644
--- a/llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp
@@ -329,8 +329,6 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
return CSR_64_Intel_OCL_BI_SaveList;
break;
}
- case CallingConv::HHVM:
- return CSR_64_HHVM_SaveList;
case CallingConv::X86_RegCall:
if (Is64Bit) {
if (IsWin64) {
@@ -451,8 +449,6 @@ X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
return CSR_64_Intel_OCL_BI_RegMask;
break;
}
- case CallingConv::HHVM:
- return CSR_64_HHVM_RegMask;
case CallingConv::X86_RegCall:
if (Is64Bit) {
if (IsWin64) {
diff --git a/llvm/test/CodeGen/X86/hhvm-cc.ll b/llvm/test/CodeGen/X86/hhvm-cc.ll
deleted file mode 100644
index 6e7a81739999f..0000000000000
--- a/llvm/test/CodeGen/X86/hhvm-cc.ll
+++ /dev/null
@@ -1,241 +0,0 @@
-; RUN: llc < %s | FileCheck %s
-
-target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-declare hhvmcc i64 @bar(i64, i64, i64) nounwind
-
-; Simply check we can modify %rbx and %rbp before returning via call to bar.
-define hhvmcc i64 @foo(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: foo:
-; CHECK-DAG: movl $1, %ebx
-; CHECK-DAG: movl $3, %ebp
-; CHECK: jmp bar
- %ret = musttail call hhvmcc i64 @bar(i64 1, i64 %b, i64 3)
- ret i64 %ret
-}
-
-; Check that we can read and modify %rbx returned from PHP function.
-define hhvmcc i64 @mod_return(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: mod_return:
-; CHECK-NEXT: {{^#.*}}
-; CHECK-NEXT: callq bar
-; CHECK-NEXT: incq %rbx
- %tmp = call hhvmcc i64 @bar(i64 %a, i64 %b, i64 %c)
- %retval = add i64 %tmp, 1
- ret i64 %retval
-}
-
-%rettype = type { i64, i64, i64, i64, i64, i64, i64,
- i64, i64, i64, i64, i64, i64, i64
-}
-
-; Check that we can return up to 14 64-bit args in registers.
-define hhvmcc %rettype @return_all(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: return_all:
-; CHECK-DAG: movl $1, %ebx
-; CHECK-DAG: movl $2, %ebp
-; CHECK-DAG: movl $3, %edi
-; CHECK-DAG: movl $4, %esi
-; CHECK-DAG: movl $5, %edx
-; CHECK-DAG: movl $6, %ecx
-; CHECK-DAG: movl $7, %r8
-; CHECK-DAG: movl $8, %r9
-; CHECK-DAG: movl $9, %eax
-; CHECK-DAG: movl $10, %r10
-; CHECK-DAG: movl $11, %r11
-; CHECK-DAG: movl $12, %r13
-; CHECK-DAG: movl $13, %r14
-; CHECK-DAG: movl $14, %r15
-; CHECK: retq
- %r1 = insertvalue %rettype zeroinitializer, i64 1, 0
- %r2 = insertvalue %rettype %r1, i64 2, 1
- %r3 = insertvalue %rettype %r2, i64 3, 2
- %r4 = insertvalue %rettype %r3, i64 4, 3
- %r5 = insertvalue %rettype %r4, i64 5, 4
- %r6 = insertvalue %rettype %r5, i64 6, 5
- %r7 = insertvalue %rettype %r6, i64 7, 6
- %r8 = insertvalue %rettype %r7, i64 8, 7
- %r9 = insertvalue %rettype %r8, i64 9, 8
- %r10 = insertvalue %rettype %r9, i64 10, 9
- %r11 = insertvalue %rettype %r10, i64 11, 10
- %r12 = insertvalue %rettype %r11, i64 12, 11
- %r13 = insertvalue %rettype %r12, i64 13, 12
- %r14 = insertvalue %rettype %r13, i64 14, 13
- ret %rettype %r14
-}
-
-declare hhvmcc void @return_all_tc(i64, i64, i64, i64, i64, i64, i64, i64,
- i64, i64, i64, i64, i64, i64, i64)
-
-; Check that we can return up to 14 64-bit args in registers via tail call.
-define hhvmcc void @test_return_all_tc(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_return_all_tc:
-; CHECK-NEXT: {{^#.*}}
-; CHECK-DAG: movl $1, %ebx
-; CHECK-DAG: movl $3, %ebp
-; CHECK-DAG: movl $4, %r15
-; CHECK-DAG: movl $5, %edi
-; CHECK-DAG: movl $6, %esi
-; CHECK-DAG: movl $7, %edx
-; CHECK-DAG: movl $8, %ecx
-; CHECK-DAG: movl $9, %r8
-; CHECK-DAG: movl $10, %r9
-; CHECK-DAG: movl $11, %eax
-; CHECK-DAG: movl $12, %r10
-; CHECK-DAG: movl $13, %r11
-; CHECK-DAG: movl $14, %r13
-; CHECK-DAG: movl $15, %r14
-; CHECK: jmp return_all_tc
- tail call hhvmcc void @return_all_tc(
- i64 1, i64 %b, i64 3, i64 4, i64 5, i64 6, i64 7,
- i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15)
- ret void
-}
-
-declare hhvmcc {i64, i64} @php_short(i64, i64, i64, i64)
-
-define hhvmcc i64 @test_php_short(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_php_short:
-; CHECK-NEXT: {{^#.*}}
-; CHECK-NEXT: movl $42, %r15
-; CHECK-NEXT: callq php_short
-; CHECK-NEXT: leaq (%rbp,%r12), %rbx
-; CHECK-NEXT: retq
- %pair = call hhvmcc {i64, i64} @php_short(i64 %a, i64 %b, i64 %c, i64 42)
- %fp = extractvalue {i64, i64} %pair, 1
- %rv = add i64 %fp, %b
- ret i64 %rv
-}
-
-declare hhvmcc %rettype @php_all(i64, i64, i64, i64, i64, i64, i64,
- i64, i64, i64, i64, i64, i64, i64, i64)
-
-; Check that we can pass 15 arguments in registers.
-; Also check that %r12 (2nd arg) is not spilled.
-define hhvmcc i64 @test_php_all(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_php_all:
-; CHECK-NEXT: {{^#.*}}
-; CHECK-NOT: sub
-; CHECK-NOT: sub
-; CHECK-DAG: movl $1, %ebx
-; CHECK-DAG: movl $3, %ebp
-; CHECK-DAG: movl $4, %r15
-; CHECK-DAG: movl $5, %edi
-; CHECK-DAG: movl $6, %esi
-; CHECK-DAG: movl $7, %edx
-; CHECK-DAG: movl $8, %ecx
-; CHECK-DAG: movl $9, %r8
-; CHECK-DAG: movl $10, %r9
-; CHECK-DAG: movl $11, %eax
-; CHECK-DAG: movl $12, %r10
-; CHECK-DAG: movl $13, %r11
-; CHECK-DAG: movl $14, %r13
-; CHECK-DAG: movl $15, %r14
-; CHECK: callq php_all
- %pair = call hhvmcc %rettype @php_all(
- i64 1, i64 %b, i64 3, i64 4, i64 5, i64 6, i64 7,
- i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15)
- %fp = extractvalue %rettype %pair, 1
- %rv = add i64 %fp, %b
- ret i64 %rv
-}
-
-declare hhvmcc void @svcreq(i64, i64, i64, i64, i64, i64, i64, i64, i64, i64,
- i64, i64)
-
-define hhvmcc void @test_svcreq(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_svcreq:
-; CHECK-DAG: movl $42, %r10
-; CHECK-DAG: movl $1, %edi
-; CHECK-DAG: movl $2, %esi
-; CHECK-DAG: movl $3, %edx
-; CHECK-DAG: movl $4, %ecx
-; CHECK-DAG: movl $5, %r8
-; CHECK-DAG: movl $6, %r9
-; CHECK: jmp svcreq
- tail call hhvmcc void @svcreq(i64 %a, i64 %b, i64 %c, i64 undef, i64 1,
- i64 2, i64 3, i64 4, i64 5, i64 6, i64 undef,
- i64 42)
- ret void
-}
-
-declare hhvm_ccc void @helper_short(i64, i64, i64, i64, i64, i64, i64)
-
-; Pass all arguments in registers and check that we don't adjust stack
-; for the call.
-define hhvmcc void @test_helper_short(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_helper_short:
-; CHECK-NOT: push
-; CHECK-NOT: sub
-; CHECK-DAG: movl $1, %edi
-; CHECK-DAG: movl $2, %esi
-; CHECK-DAG: movl $3, %edx
-; CHECK-DAG: movl $4, %ecx
-; CHECK-DAG: movl $5, %r8
-; CHECK-DAG: movl $6, %r9
-; CHECK: callq helper_short
- call hhvm_ccc void @helper_short(i64 %c, i64 1, i64 2, i64 3, i64 4,
- i64 5, i64 6)
- ret void
-}
-
-declare hhvm_ccc void @helper(i64, i64, i64, i64, i64, i64, i64, i64, i64, i64)
-
-define hhvmcc void @test_helper(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_helper:
-; CHECK-DAG: movl $1, %edi
-; CHECK-DAG: movl $2, %esi
-; CHECK-DAG: movl $3, %edx
-; CHECK-DAG: movl $4, %ecx
-; CHECK-DAG: movl $5, %r8
-; CHECK-DAG: movl $6, %r9
-; CHECK: callq helper
- call hhvm_ccc void @helper(i64 %c, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6,
- i64 7, i64 8, i64 9)
- ret void
-}
-
-; When we enter function with HHVM calling convention, the stack is aligned
-; at 16 bytes. This means we align objects on the stack
diff erently and
-; adjust the stack
diff erently for calls.
-declare hhvm_ccc void @stack_helper(i64, i64, i64)
-declare hhvm_ccc void @stack_helper2(<2 x double>, i64)
-
-define hhvmcc void @test_stack_helper(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_stack_helper:
-; CHECK-NOT: push
-; CHECK: subq $32, %rsp
-; CHECK: movaps 16(%rsp), %xmm0
-; CHECK: callq stack_helper2
- %t1 = alloca <2 x double>, align 16
- %t2 = alloca i64, align 8
- %t3 = alloca i64, align 8
- %load3 = load i64, ptr%t3
- call hhvm_ccc void @stack_helper(i64 %c, i64 %load3, i64 42)
- %load = load <2 x double>, ptr%t1
- %load2 = load i64, ptr%t2
- call hhvm_ccc void @stack_helper2(<2 x double> %load, i64 %load2)
- ret void
-}
-
-; Check that we are not adjusting the stack before calling the helper.
-define hhvmcc void @test_stack_helper2(i64 %a, i64 %b, i64 %c) nounwind {
-entry:
-; CHECK-LABEL: test_stack_helper2:
-; CHECK-NOT: push
-; CHECK-NOT: subq
- call hhvm_ccc void @stack_helper(i64 %c, i64 7, i64 42)
- ret void
-}
-
diff --git a/llvm/test/CodeGen/X86/statepoint-fastregalloc.mir b/llvm/test/CodeGen/X86/statepoint-fastregalloc.mir
index b5cf85f4ac2b8..02c9310673006 100644
--- a/llvm/test/CodeGen/X86/statepoint-fastregalloc.mir
+++ b/llvm/test/CodeGen/X86/statepoint-fastregalloc.mir
@@ -21,7 +21,7 @@ body: |
...
# Same as above but with multiple RegMask operands per instruction.
-# These regmasks have no real meaning and chosen to allow only single register to be assignable ($r12)
+# These regmasks have no real meaning and chosen to allow only single register to be assignable ($rbp)
---
name: test_relocate_multi_regmasks
tracksRegLiveness: true
@@ -29,11 +29,11 @@ body: |
bb.0.entry:
liveins: $rdi
- ; CHECK: renamable $r12 = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, renamable $r12(tied-def 0)
+ ; CHECK: renamable $rbp = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, renamable $rbp(tied-def 0)
%1:gr64 = COPY $rdi
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
- %1:gr64 = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, %1(tied-def 0), 2, 0, 2, 1, 0, 0, csr_64_rt_allregs, csr_64_hhvm, implicit-def $rsp, implicit-def $ssp
+ %1:gr64 = STATEPOINT 0, 0, 0, target-flags(x86-plt) 0, 2, 0, 2, 0, 2, 0, 2, 1, %1(tied-def 0), 2, 0, 2, 1, 0, 0, csr_64_rt_allregs, csr_64_cxx_tls_darwin_pe, implicit-def $rsp, implicit-def $ssp
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
$rax = COPY %1
RET 0, killed $rax
diff --git a/llvm/test/Feature/callingconventions.ll b/llvm/test/Feature/callingconventions.ll
index 7eb77b555cdc8..7304cdf92328c 100644
--- a/llvm/test/Feature/callingconventions.ll
+++ b/llvm/test/Feature/callingconventions.ll
@@ -59,11 +59,4 @@ define void @ghc_caller() {
ret void
}
-declare hhvm_ccc void @hhvm_c_callee()
-
-define hhvmcc void @hhvm_caller() {
- call hhvm_ccc void @hhvm_c_callee()
- ret void
-}
-
declare i32 @__gxx_personality_v0(...)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td
index 7fd27b1820051..654e120b6cc67 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td
@@ -151,8 +151,9 @@ def CConvWin64 : LLVM_EnumAttrCase<"Win64", "win64cc", "Win64", 79>;
def CConvX86_VectorCall : LLVM_EnumAttrCase<"X86_VectorCall",
"x86_vectorcallcc",
"X86_VectorCall", 80>;
-def CConvHHVM : LLVM_EnumAttrCase<"HHVM", "hhvmcc", "HHVM", 81>;
-def CConvHHVM_C : LLVM_EnumAttrCase<"HHVM_C", "hhvm_ccc", "HHVM_C", 82>;
+def CConvHHVM : LLVM_EnumAttrCase<"DUMMY_HHVM", "hhvmcc", "DUMMY_HHVM", 81>;
+def CConvHHVM_C
+ : LLVM_EnumAttrCase<"DUMMY_HHVM_C", "hhvm_ccc", "DUMMY_HHVM_C", 82>;
def CConvX86_INTR : LLVM_EnumAttrCase<"X86_INTR", "x86_intrcc", "X86_INTR", 83>;
def CConvAVR_INTR : LLVM_EnumAttrCase<"AVR_INTR", "avr_intrcc", "AVR_INTR", 84>;
def CConvAVR_SIGNAL : LLVM_EnumAttrCase<"AVR_SIGNAL", "avr_signalcc",
More information about the Mlir-commits
mailing list