]> granicus.if.org Git - llvm/commitdiff
[GISel][CallLowering] Make isIncomingArgumentHandler a pure virtual method
authorQuentin Colombet <quentin.colombet@gmail.com>
Fri, 18 Oct 2019 20:13:42 +0000 (20:13 +0000)
committerQuentin Colombet <quentin.colombet@gmail.com>
Fri, 18 Oct 2019 20:13:42 +0000 (20:13 +0000)
The default implementation of isIncomingArgumentHandler could lead
to generating incorrect code.
Make it a pure virtual method, so that targets know they have to
override it to produce correct code.

NFC

Differential Revision: https://reviews.llvm.org/D69187

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375277 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/GlobalISel/CallLowering.h
lib/Target/AArch64/AArch64CallLowering.cpp
lib/Target/AMDGPU/AMDGPUCallLowering.cpp
lib/Target/ARM/ARMCallLowering.cpp
lib/Target/X86/X86CallLowering.cpp

index dddb267f0c6743328d048735121262ed3ec9c98e..4901a3748e4adea99b80629880e2abe0f0b10e13 100644 (file)
@@ -118,7 +118,7 @@ public:
 
     /// Returns true if the handler is dealing with incoming arguments,
     /// i.e. those that move values from some physical location to vregs.
-    virtual bool isIncomingArgumentHandler() const { return false; }
+    virtual bool isIncomingArgumentHandler() const = 0;
 
     /// Materialize a VReg containing the address of the specified
     /// stack-based object. This is either based on a FrameIndex or
index 45f07fc2ae835963f1e777ebee4ddb0af61e0634..ed93d02aa6153ba915277f79aa4a75fc1f52d91e 100644 (file)
@@ -136,6 +136,8 @@ struct OutgoingArgHandler : public CallLowering::ValueHandler {
         AssignFnVarArg(AssignFnVarArg), IsTailCall(IsTailCall), FPDiff(FPDiff),
         StackSize(0) {}
 
+  bool isIncomingArgumentHandler() const override { return false; }
+
   Register getStackAddress(uint64_t Size, int64_t Offset,
                            MachinePointerInfo &MPO) override {
     MachineFunction &MF = MIRBuilder.getMF();
index f3ad40ff3ede77da32104d618fa1aee3b70c2ad1..58c44acde1a7fe34929c41e94c4617f4ef7a0f3d 100644 (file)
@@ -37,6 +37,8 @@ struct OutgoingValueHandler : public CallLowering::ValueHandler {
 
   MachineInstrBuilder MIB;
 
+  bool isIncomingArgumentHandler() const override { return false; }
+
   Register getStackAddress(uint64_t Size, int64_t Offset,
                            MachinePointerInfo &MPO) override {
     llvm_unreachable("not implemented");
index 52dba006be04371c1aaf5855c072bf399b417dd6..e465b660f233ee3ae60798926692c6ff1d238ca5 100644 (file)
@@ -90,6 +90,8 @@ struct OutgoingValueHandler : public CallLowering::ValueHandler {
                        MachineInstrBuilder &MIB, CCAssignFn *AssignFn)
       : ValueHandler(MIRBuilder, MRI, AssignFn), MIB(MIB) {}
 
+  bool isIncomingArgumentHandler() const override { return false; }
+
   Register getStackAddress(uint64_t Size, int64_t Offset,
                            MachinePointerInfo &MPO) override {
     assert((Size == 1 || Size == 2 || Size == 4 || Size == 8) &&
index 1dddf7878bca4ac7e3d85ef83263a583a1071eea..7ee637cfd523ff0cf0858e3ccac6dbaab5031d32 100644 (file)
@@ -102,6 +102,8 @@ struct OutgoingValueHandler : public CallLowering::ValueHandler {
         DL(MIRBuilder.getMF().getDataLayout()),
         STI(MIRBuilder.getMF().getSubtarget<X86Subtarget>()) {}
 
+  bool isIncomingArgumentHandler() const override { return false; }
+
   Register getStackAddress(uint64_t Size, int64_t Offset,
                            MachinePointerInfo &MPO) override {
     LLT p0 = LLT::pointer(0, DL.getPointerSizeInBits(0));