[llvm] f0ae3c2 - [ARM] in LowerConstantFP, make sure we cover armv6-m execute-only

Ties Stuij via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 11 02:42:28 PDT 2023


Author: Ties Stuij
Date: 2023-07-11T10:42:15+01:00
New Revision: f0ae3c23b5852cb021d1c779f8884e2c94aea7a5

URL: https://github.com/llvm/llvm-project/commit/f0ae3c23b5852cb021d1c779f8884e2c94aea7a5
DIFF: https://github.com/llvm/llvm-project/commit/f0ae3c23b5852cb021d1c779f8884e2c94aea7a5.diff

LOG: [ARM] in LowerConstantFP, make sure we cover armv6-m execute-only

Currently in LowerConstantFP, when we compile for execute-only (XO) we don't
check what architecture we're compiling for (v6m=< or >v6m). We shouldn't get
here for v6m, so put in an assert.

Reviewed By: simonwallis2, dmgreen

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

Added: 
    llvm/test/CodeGen/ARM/float-ops-xo.ll

Modified: 
    llvm/lib/Target/ARM/ARMISelLowering.cpp

Removed: 
    llvm/test/CodeGen/Thumb2/float-ops-vmovsr-nofp-xo.ll


################################################################################
diff  --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index a12fd783fb9985..7420b90ef831df 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -7070,6 +7070,10 @@ SDValue ARMTargetLowering::LowerConstantFP(SDValue Op, SelectionDAG &DAG,
   // Prevent floating-point constants from using literal loads
   // when execute-only is enabled.
   if (ST->genExecuteOnly()) {
+    // We shouldn't trigger this for v6m execute-only
+    assert((!ST->isThumb1Only() || ST->hasV8MBaselineOps()) &&
+           "Unexpected architecture");
+
     // If we can represent the constant as an immediate, don't lower it
     if (isFPImmLegal(FPVal, VT))
       return Op;

diff  --git a/llvm/test/CodeGen/Thumb2/float-ops-vmovsr-nofp-xo.ll b/llvm/test/CodeGen/ARM/float-ops-xo.ll
similarity index 59%
rename from llvm/test/CodeGen/Thumb2/float-ops-vmovsr-nofp-xo.ll
rename to llvm/test/CodeGen/ARM/float-ops-xo.ll
index a71cd44063ae7e..6ff85ad0b6f767 100644
--- a/llvm/test/CodeGen/Thumb2/float-ops-vmovsr-nofp-xo.ll
+++ b/llvm/test/CodeGen/ARM/float-ops-xo.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
 ; RUN: llc < %s -mtriple=thumbv8.1m.main-none-eabihf -mattr=+mve,+execute-only | FileCheck %s
+; RUN: llc < %s -mtriple=thumbv6m -mattr=+execute-only | FileCheck %s --check-prefix=V6M
 
 declare void @ext_fn(float)
 
@@ -12,6 +13,13 @@ define void @test1() {
 ; CHECK-NEXT:    vmov s0, r0
 ; CHECK-NEXT:    bl ext_fn
 ; CHECK-NEXT:    pop {r7, pc}
+;
+; V6M-LABEL: test1:
+; V6M:       @ %bb.0: @ %entry
+; V6M-NEXT:    push {r7, lr}
+; V6M-NEXT:    movs r0, #0
+; V6M-NEXT:    bl ext_fn
+; V6M-NEXT:    pop {r7, pc}
 entry:
   call void @ext_fn(float 0.000000e+00)
   ret void
@@ -24,6 +32,17 @@ define float @test2() {
 ; CHECK-NEXT:    movt r0, #16673
 ; CHECK-NEXT:    vmov s0, r0
 ; CHECK-NEXT:    bx lr
+;
+; V6M-LABEL: test2:
+; V6M:       @ %bb.0: @ %entry
+; V6M-NEXT:    movs r0, #65
+; V6M-NEXT:    lsls r0, r0, #8
+; V6M-NEXT:    adds r0, #33
+; V6M-NEXT:    lsls r0, r0, #8
+; V6M-NEXT:    adds r0, #249
+; V6M-NEXT:    lsls r0, r0, #8
+; V6M-NEXT:    adds r0, #167
+; V6M-NEXT:    bx lr
 entry:
   ret float 0x40243F34E0000000
 }


        


More information about the llvm-commits mailing list