From 30bd36e3fc17dcc05a9cfc30f24eb714ba8e9a01 Mon Sep 17 00:00:00 2001 From: Tim Northover Date: Fri, 26 Aug 2016 17:46:19 +0000 Subject: [PATCH] GlobalISel: mark G_FCMP legal on float & double. llvm-svn: 279844 --- .../lib/Target/AArch64/AArch64MachineLegalizer.cpp | 4 +++ .../CodeGen/AArch64/GlobalISel/legalize-fcmp.mir | 35 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 llvm/test/CodeGen/AArch64/GlobalISel/legalize-fcmp.mir diff --git a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp index fef98c9..ec5f591 100644 --- a/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp +++ b/llvm/lib/Target/AArch64/AArch64MachineLegalizer.cpp @@ -97,6 +97,10 @@ AArch64MachineLegalizer::AArch64MachineLegalizer() { setAction({G_ICMP, 1, Ty}, WidenScalar); } + setAction({G_FCMP, s1}, Legal); + setAction({G_FCMP, 1, s32}, Legal); + setAction({G_FCMP, 1, s64}, Legal); + // Extensions for (auto Ty : { s1, s8, s16, s32, s64 }) { setAction({G_ZEXT, Ty}, Legal); diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fcmp.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fcmp.mir new file mode 100644 index 0000000..9a6e90b --- /dev/null +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fcmp.mir @@ -0,0 +1,35 @@ +# RUN: llc -O0 -run-pass=legalize-mir -global-isel %s -o - 2>&1 | FileCheck %s + +--- | + target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" + target triple = "aarch64-apple-ios" + define void @test_icmp() { + entry: + ret void + } +... + +--- +name: test_icmp +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } + - { id: 4, class: _ } + - { id: 5, class: _ } +body: | + bb.0.entry: + liveins: %x0, %x1, %x2, %x3 + %0(64) = COPY %x0 + %1(64) = COPY %x0 + + %2(8) = G_TRUNC { s32, s64 } %0 + %3(8) = G_TRUNC { s32, s64 } %1 + + ; CHECK: %4(1) = G_FCMP { s1, s64 } floatpred(oge), %0, %1 + %4(1) = G_FCMP { s1, s64 } floatpred(oge), %0, %1 + + ; CHECK: %5(1) = G_FCMP { s1, s32 } floatpred(uno), %2, %3 + %5(1) = G_FCMP { s1, s32 } floatpred(uno), %2, %3 +... -- 2.7.4