From: Igor Breger Date: Wed, 5 Jul 2017 11:11:10 +0000 (+0000) Subject: [GlobalIsel] allow x86_fp80 values to be dumped. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=179b206a6cb40112550a36cbc9cd16dd8d3a0949;p=llvm [GlobalIsel] allow x86_fp80 values to be dumped. Summary: Otherwise the fallback path fails with an assertion on x86_64 targets, when "x86_fp80" is encountered. Reviewers: t.p.northover, zvi, guyblank Reviewed By: zvi Subscribers: rovka, kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D34975 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307140 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index 81c6dace92e..7be3b1a4894 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -447,6 +447,14 @@ void MachineOperand::print(raw_ostream &OS, ModuleSlotTracker &MST, SmallString<16> Str; getFPImm()->getValueAPF().toString(Str); OS << "quad " << Str; + } else if (getFPImm()->getType()->isX86_FP80Ty()) { + APFloat APF = getFPImm()->getValueAPF(); + OS << "x86_fp80 0xK"; + APInt API = APF.bitcastToAPInt(); + OS << format_hex_no_prefix(API.getHiBits(16).getZExtValue(), 4, + /*Upper=*/true); + OS << format_hex_no_prefix(API.getLoBits(64).getZExtValue(), 16, + /*Upper=*/true); } else { OS << getFPImm()->getValueAPF().convertToDouble(); } diff --git a/test/CodeGen/X86/GlobalISel/x86_64-fallback.ll b/test/CodeGen/X86/GlobalISel/x86_64-fallback.ll new file mode 100644 index 00000000000..2743f882b2e --- /dev/null +++ b/test/CodeGen/X86/GlobalISel/x86_64-fallback.ll @@ -0,0 +1,18 @@ +; RUN: llc -O0 -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o %t.out 2> %t.err +; RUN: FileCheck %s --check-prefix=FALLBACK-WITH-REPORT-OUT < %t.out +; RUN: FileCheck %s --check-prefix=FALLBACK-WITH-REPORT-ERR < %t.err +; This file checks that the fallback path to selection dag works. +; The test is fragile in the sense that it must be updated to expose +; something that fails with global-isel. +; When we cannot produce a test case anymore, that means we can remove +; the fallback path. + +; Check that we fallback on invoke translation failures. +; FALLBACK-WITH-REPORT-ERR: remark: :0:0: unable to legalize instruction: %vreg1(s80) = G_FCONSTANT x86_fp80 0xK4002A000000000000000 +; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for test_x86_fp80_dump +; FALLBACK-WITH-REPORT-OUT-LABEL: test_x86_fp80_dump: +define void @test_x86_fp80_dump(x86_fp80* %ptr){ + store x86_fp80 0xK4002A000000000000000, x86_fp80* %ptr, align 16 + ret void +} +