]> granicus.if.org Git - llvm/commitdiff
[ARM] GlobalISel: Assert that we don't use the FPR bank if we don't have VFP
authorDiana Picus <diana.picus@linaro.org>
Thu, 16 Feb 2017 11:25:09 +0000 (11:25 +0000)
committerDiana Picus <diana.picus@linaro.org>
Thu, 16 Feb 2017 11:25:09 +0000 (11:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295308 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMRegisterBankInfo.cpp
test/CodeGen/ARM/GlobalISel/arm-regbankselect.mir

index 193a85502e639a05f7f8288eafc0ccabd3f6bae8..f15a8b6cfcc0bbcc9d855a1d779a0b1952cff286 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "ARMRegisterBankInfo.h"
 #include "ARMInstrInfo.h" // For the register classes
+#include "ARMSubtarget.h"
 #include "llvm/CodeGen/GlobalISel/RegisterBank.h"
 #include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
 #include "llvm/CodeGen/MachineRegisterInfo.h"
@@ -173,6 +174,17 @@ ARMRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
     return InstructionMapping{};
   }
 
+#ifndef NDEBUG
+  for (unsigned i = 0; i < NumOperands; i++) {
+    for (const auto &Mapping : OperandsMapping[i]) {
+      assert(
+          (Mapping.RegBank->getID() != ARM::FPRRegBankID ||
+           MF.getSubtarget<ARMSubtarget>().hasVFP2()) &&
+          "Trying to use floating point register bank on target without vfp");
+    }
+  }
+#endif
+
   return InstructionMapping{DefaultMappingID, /*Cost=*/1, OperandsMapping,
                             NumOperands};
 }
index cc80634abd118661bf8f74abfac3aadbf502624f..4ed778a5939cb6d6a2870f89f473422f3386da66 100644 (file)
@@ -5,12 +5,14 @@
   define void @test_add_s8() { ret void }
   define void @test_add_s1() { ret void }
 
-  define void @test_loads() { ret void }
+  define void @test_loads() #0 { ret void }
 
-  define void @test_fadd_s32() { ret void }
-  define void @test_fadd_s64() { ret void }
+  define void @test_fadd_s32() #0 { ret void }
+  define void @test_fadd_s64() #0 { ret void }
 
-  define void @test_soft_fp_s64() { ret void }
+  define void @test_soft_fp_s64() #0 { ret void }
+
+  attributes #0 = { "target-features"="+vfp2"}
 ...
 ---
 name:            test_add_s32