[PATCH] D65886: [Mips][Codegen] Fix fast-isel mixing of FGR64 and AFGR64 registers

Mirko Brkusanin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 7 08:35:50 PDT 2019


mbrkusanin created this revision.
mbrkusanin added reviewers: atanasyan, petarj, sdardis, mstojanovic.
mbrkusanin added a project: LLVM.
Herald added a subscriber: arichardson.

Fast-isel was picking AFGR64 register class for processing call arguments when 
+fp64 options was used. We simply check is option +fp64 is used and pick 
appropriate register.


https://reviews.llvm.org/D65886

Files:
  lib/Target/Mips/MipsFastISel.cpp
  test/CodeGen/Mips/copy-fp64.ll


Index: test/CodeGen/Mips/copy-fp64.ll
===================================================================
--- /dev/null
+++ test/CodeGen/Mips/copy-fp64.ll
@@ -0,0 +1,29 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+
+; RUN: llc -march=mips -mcpu=mips32r2 -O0 -relocation-model=pic -mattr=+fp64 \
+; RUN:   -stop-before=prologepilog %s -o - | FileCheck %s
+
+declare double @bar(double)
+
+define  double @foo(double %self) {
+  ; CHECK-LABEL: name: foo
+  ; CHECK: bb.0.start:
+  ; CHECK:   successors: %bb.1(0x80000000)
+  ; CHECK:   liveins: $d12_64, $t9, $v0
+  ; CHECK:   renamable $at = ADDu killed $v0, killed $t9
+  ; CHECK:   ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
+  ; CHECK:   $d6_64 = COPY killed renamable $d12_64
+  ; CHECK:   renamable $t9 = LW killed renamable $at, target-flags(mips-got) @bar
+  ; CHECK:   dead $ra = JALR killed $t9, csr_o32_fp64, target-flags(mips-jalr) <mcsymbol bar>, implicit-def dead $ra, implicit killed $d6_64, implicit-def $d0_64
+  ; CHECK:   ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
+  ; CHECK:   SDC164 killed $d0_64, %stack.0, 0 :: (store 8 into %stack.0)
+  ; CHECK: bb.1.bb1:
+  ; CHECK:   $d0_64 = LDC164 %stack.0, 0 :: (load 8 from %stack.0)
+  ; CHECK:   RetRA implicit killed $d0_64
+start:
+  %0 = call double @bar(double %self)
+  br label %bb1
+
+bb1:
+  ret double %0
+}
Index: lib/Target/Mips/MipsFastISel.cpp
===================================================================
--- lib/Target/Mips/MipsFastISel.cpp
+++ lib/Target/Mips/MipsFastISel.cpp
@@ -1162,14 +1162,20 @@
       if (ArgVT == MVT::f32) {
         VA.convertToReg(Mips::F12);
       } else if (ArgVT == MVT::f64) {
-        VA.convertToReg(Mips::D6);
+        if (Subtarget->isFP64bit())
+          VA.convertToReg(Mips::D6_64);
+        else
+          VA.convertToReg(Mips::D6);
       }
     } else if (i == 1) {
       if ((firstMVT == MVT::f32) || (firstMVT == MVT::f64)) {
         if (ArgVT == MVT::f32) {
           VA.convertToReg(Mips::F14);
         } else if (ArgVT == MVT::f64) {
-          VA.convertToReg(Mips::D7);
+          if (Subtarget->isFP64bit())
+            VA.convertToReg(Mips::D7_64);
+          else
+            VA.convertToReg(Mips::D7);
         }
       }
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65886.213901.patch
Type: text/x-patch
Size: 2287 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190807/d1c63a0e/attachment.bin>


More information about the llvm-commits mailing list