[llvm] 70511e6 - [M68k] Fix CConvs for pointer type return values

Min-Yih Hsu via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 24 11:08:04 PDT 2023


Author: Min-Yih Hsu
Date: 2023-03-24T11:00:35-07:00
New Revision: 70511e61761eb7d1c4fb5ff1a8383ced18843753

URL: https://github.com/llvm/llvm-project/commit/70511e61761eb7d1c4fb5ff1a8383ced18843753
DIFF: https://github.com/llvm/llvm-project/commit/70511e61761eb7d1c4fb5ff1a8383ced18843753.diff

LOG: [M68k] Fix CConvs for pointer type return values

Put the value into A0 instead of data registers. And remove the
redundant `RetCC_M68kCommon` as there aren't many rules shared between
existing CCs other than the pointer one.
This change is tested by existing tests.

Added: 
    

Modified: 
    llvm/lib/Target/M68k/M68kCallingConv.td
    llvm/test/CodeGen/M68k/CodeModel/medium-pic.ll
    llvm/test/CodeGen/M68k/CodeModel/medium-static.ll
    llvm/test/CodeGen/M68k/CodeModel/small-pic.ll
    llvm/test/CodeGen/M68k/CodeModel/small-static.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/M68k/M68kCallingConv.td b/llvm/lib/Target/M68k/M68kCallingConv.td
index 360f2199cf6fc..523f08e646151 100644
--- a/llvm/lib/Target/M68k/M68kCallingConv.td
+++ b/llvm/lib/Target/M68k/M68kCallingConv.td
@@ -22,18 +22,13 @@ class CCIfSubtarget<string F, CCAction A>
 // Return Value Calling Conventions
 //===----------------------------------------------------------------------===//
 
-/// Return-value conventions common to all M68k CC's.
-def RetCC_M68kCommon : CallingConv<[
-]>;
-
 /// M68k C return convention.
-/// TODO: Return via address register
 def RetCC_M68k_C : CallingConv<[
+  CCIfPtr<CCAssignToReg<[A0]>>,
   CCIfType<[i1],   CCPromoteToType<i8>>,
   CCIfType<[i8],   CCAssignToReg<[BD0, BD1]>>,
   CCIfType<[i16],  CCAssignToReg<[WD0, WD1]>>,
   CCIfType<[i32],  CCAssignToReg<[D0, D1]>>,
-  CCDelegateTo<RetCC_M68kCommon>
 ]>;
 
 /// M68k fastcc return convention.
@@ -41,11 +36,11 @@ def RetCC_M68k_C : CallingConv<[
 /// split among 16 1-byte values or used for a single 16-byte value.
 /// TODO: Verify its functionality and write tests
 def RetCC_M68k_Fast : CallingConv<[
+  CCIfPtr<CCAssignToReg<[A0]>>,
   CCIfType<[i1],   CCPromoteToType<i8>>,
   CCIfType<[i8],   CCAssignToReg<[BD0, BD1]>>,
   CCIfType<[i16],  CCAssignToReg<[WD0, WD1, WA0, WA1]>>,
   CCIfType<[i32],  CCAssignToReg<[D0, D1, A0, A1]>>,
-  CCDelegateTo<RetCC_M68kCommon>
 ]>;
 
 /// This is the root return-value convention for the M68k backend.

diff  --git a/llvm/test/CodeGen/M68k/CodeModel/medium-pic.ll b/llvm/test/CodeGen/M68k/CodeModel/medium-pic.ll
index 2f59442acffd5..b82bee277522a 100644
--- a/llvm/test/CodeGen/M68k/CodeModel/medium-pic.ll
+++ b/llvm/test/CodeGen/M68k/CodeModel/medium-pic.ll
@@ -66,7 +66,6 @@ define void @test3() nounwind {
 ; CHECK:       ; %bb.0: ; %entry
 ; CHECK-NEXT:    suba.l #4, %sp
 ; CHECK-NEXT:    jsr (afoo at PLT,%pc)
-; CHECK-NEXT:    move.l %d0, %a0
 ; CHECK-NEXT:    move.l (pfoo at GOTPCREL,%pc), %a1
 ; CHECK-NEXT:    move.l %a0, (%a1)
 ; CHECK-NEXT:    jsr (%a0)

diff  --git a/llvm/test/CodeGen/M68k/CodeModel/medium-static.ll b/llvm/test/CodeGen/M68k/CodeModel/medium-static.ll
index 7b27e480481b6..35d60c4c84919 100644
--- a/llvm/test/CodeGen/M68k/CodeModel/medium-static.ll
+++ b/llvm/test/CodeGen/M68k/CodeModel/medium-static.ll
@@ -61,7 +61,6 @@ define void @test3() nounwind {
 ; CHECK:       ; %bb.0: ; %entry
 ; CHECK-NEXT:    suba.l #4, %sp
 ; CHECK-NEXT:    jsr afoo at PLT
-; CHECK-NEXT:    move.l %d0, %a0
 ; CHECK-NEXT:    move.l %a0, pfoo
 ; CHECK-NEXT:    jsr (%a0)
 ; CHECK-NEXT:    adda.l #4, %sp

diff  --git a/llvm/test/CodeGen/M68k/CodeModel/small-pic.ll b/llvm/test/CodeGen/M68k/CodeModel/small-pic.ll
index 1fbd8ff4875c5..f1d1c2a18008f 100644
--- a/llvm/test/CodeGen/M68k/CodeModel/small-pic.ll
+++ b/llvm/test/CodeGen/M68k/CodeModel/small-pic.ll
@@ -66,7 +66,6 @@ define void @test3() nounwind {
 ; CHECK:       ; %bb.0: ; %entry
 ; CHECK-NEXT:    suba.l #4, %sp
 ; CHECK-NEXT:    jsr (afoo at PLT,%pc)
-; CHECK-NEXT:    move.l %d0, %a0
 ; CHECK-NEXT:    move.l (pfoo at GOTPCREL,%pc), %a1
 ; CHECK-NEXT:    move.l %a0, (%a1)
 ; CHECK-NEXT:    jsr (%a0)

diff  --git a/llvm/test/CodeGen/M68k/CodeModel/small-static.ll b/llvm/test/CodeGen/M68k/CodeModel/small-static.ll
index 934f9d8f2204d..9c020a054f878 100644
--- a/llvm/test/CodeGen/M68k/CodeModel/small-static.ll
+++ b/llvm/test/CodeGen/M68k/CodeModel/small-static.ll
@@ -62,7 +62,6 @@ define void @test3() nounwind {
 ; CHECK:       ; %bb.0: ; %entry
 ; CHECK-NEXT:    suba.l #4, %sp
 ; CHECK-NEXT:    jsr afoo at PLT
-; CHECK-NEXT:    move.l %d0, %a0
 ; CHECK-NEXT:    move.l %a0, (pfoo,%pc)
 ; CHECK-NEXT:    jsr (%a0)
 ; CHECK-NEXT:    adda.l #4, %sp


        


More information about the llvm-commits mailing list