[llvm] r366957 - [AArch64][GlobalISel] Don't try to use GISel if subtarget doesn't have neon or fp.

Amara Emerson via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 24 16:00:04 PDT 2019


Author: aemerson
Date: Wed Jul 24 16:00:04 2019
New Revision: 366957

URL: http://llvm.org/viewvc/llvm-project?rev=366957&view=rev
Log:
[AArch64][GlobalISel] Don't try to use GISel if subtarget doesn't have neon or fp.

Throughout the legalizerinfo we currently make the assumption that the target
has neon and FP target features available. Fixing it will require a refactor of
the whole thing, so until then make sure we fall back.

Works around PR42734

Differential Revision: https://reviews.llvm.org/D65244

Added:
    llvm/trunk/test/CodeGen/AArch64/GlobalISel/no-neon-no-fp.ll
Modified:
    llvm/trunk/lib/Target/AArch64/AArch64LegalizerInfo.cpp

Modified: llvm/trunk/lib/Target/AArch64/AArch64LegalizerInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64LegalizerInfo.cpp?rev=366957&r1=366956&r2=366957&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64LegalizerInfo.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64LegalizerInfo.cpp Wed Jul 24 16:00:04 2019
@@ -52,6 +52,12 @@ AArch64LegalizerInfo::AArch64LegalizerIn
   const LLT v2s64 = LLT::vector(2, 64);
   const LLT v2p0 = LLT::vector(2, p0);
 
+  // FIXME: support subtargets which have neon/fp-armv8 disabled.
+  if (!ST.hasNEON() || !ST.hasFPARMv8()) {
+    computeTables();
+    return;
+  }
+
   getActionDefinitionsBuilder(G_IMPLICIT_DEF)
     .legalFor({p0, s1, s8, s16, s32, s64, v4s32, v2s64})
     .clampScalar(0, s1, s64)

Added: llvm/trunk/test/CodeGen/AArch64/GlobalISel/no-neon-no-fp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/no-neon-no-fp.ll?rev=366957&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/GlobalISel/no-neon-no-fp.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/no-neon-no-fp.ll Wed Jul 24 16:00:04 2019
@@ -0,0 +1,13 @@
+; RUN: not llc -o - -verify-machineinstrs -global-isel -global-isel-abort=1 -stop-after=legalizer %s 2>&1 | FileCheck %s
+target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+target triple = "aarch64-unknown-unknown"
+
+; CHECK: unable to legalize instruction: G_STORE %1:_(s128), %0:_(p0) :: (store 16 into %ir.ptr) (in function: foo)
+define void @foo(i128 *%ptr) #0 align 2 {
+entry:
+  store i128 0, i128* %ptr, align 16
+  ret void
+}
+
+attributes #0 = { "use-soft-float"="false" "target-features"="-fp-armv8,-neon" }
+




More information about the llvm-commits mailing list