]> granicus.if.org Git - llvm/commitdiff
[FastISel][AArch64] Use the proper FMOV instruction to materialize a +0.0.
authorJuergen Ributzka <juergen@apple.com>
Wed, 20 Aug 2014 01:10:36 +0000 (01:10 +0000)
committerJuergen Ributzka <juergen@apple.com>
Wed, 20 Aug 2014 01:10:36 +0000 (01:10 +0000)
Use FMOVWSr/FMOVXDr instead of FMOVSr/FMOVDr, which have the proper register
class to be used with the zero register. This makes the MachineInstruction
verifier happy again.

This is related to <rdar://problem/18027157>.

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

lib/Target/AArch64/AArch64FastISel.cpp
test/CodeGen/AArch64/arm64-fast-isel-materialize.ll

index 9f59f884dee30ea47b438b211d6f9b9bbc965606..90c509d4ce072fcc16a873973058163e7a12b66e 100644 (file)
@@ -291,7 +291,7 @@ unsigned AArch64FastISel::AArch64MaterializeFP(const ConstantFP *CFP, MVT VT) {
     // register, because the immediate version of fmov cannot encode zero.
     if (Val.isPosZero()) {
       unsigned ZReg = Is64Bit ? AArch64::XZR : AArch64::WZR;
-      unsigned Opc = Is64Bit ? AArch64::FMOVDr : AArch64::FMOVSr;
+      unsigned Opc = Is64Bit ? AArch64::FMOVXDr : AArch64::FMOVWSr;
       BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc), ResultReg)
         .addReg(ZReg, getKillRegState(true));
       return ResultReg;
index 14dc0dd93b9e2bb23dc41088e4de78c4ae5278a6..1dea5d944be08b24a74fbf0655ec4d899c5d67a3 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llc -O0 -fast-isel-abort -mtriple=arm64-apple-darwin < %s | FileCheck %s
+; RUN: llc -O0 -fast-isel-abort -verify-machineinstrs -mtriple=arm64-apple-darwin < %s | FileCheck %s
 
 ; Materialize using fmov
 define float @fmov_float1() {