[llvm] [LegalizeTypes][MSP430] Soften FAKE_USE operand (PR #142714)

Acthink Yang via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 4 04:17:01 PDT 2025


https://github.com/Acthink-Yang updated https://github.com/llvm/llvm-project/pull/142714

>From 511d75d0bedadce2389f2687dd140186760d3b16 Mon Sep 17 00:00:00 2001
From: QiYue <yangzhh at mail.ustc.edu.cn>
Date: Wed, 4 Jun 2025 11:00:25 +0800
Subject: [PATCH 1/2] [LegalizeTypes][MSP430] Soften FAKE_USE operand

Adds support for softening FAKE_USE operands.
Adds MSP430 tests that exercise the new softening code.

Fixes #137572
---
 .../SelectionDAG/LegalizeFloatTypes.cpp       |  9 ++++++
 llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h |  1 +
 llvm/test/CodeGen/MSP430/fake_use_float.ll    | 31 +++++++++++++++++++
 3 files changed, 41 insertions(+)
 create mode 100644 llvm/test/CodeGen/MSP430/fake_use_float.ll

diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
index 41e85521b41ea..81f7c8059760e 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
@@ -1143,6 +1143,9 @@ bool DAGTypeLegalizer::SoftenFloatOperand(SDNode *N, unsigned OpNo) {
     Res = SoftenFloatOp_ATOMIC_STORE(N, OpNo);
     break;
   case ISD::FCOPYSIGN:   Res = SoftenFloatOp_FCOPYSIGN(N); break;
+  case ISD::FAKE_USE:
+    Res = SoftenFloatOp_FAKE_USE(N);
+    break;
   }
 
   // If the result is null, the sub-method took care of registering results etc.
@@ -1477,6 +1480,12 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_LLRINT(SDNode *N) {
                                              RTLIB::LLRINT_PPCF128));
 }
 
+SDValue DAGTypeLegalizer::SoftenFloatOp_FAKE_USE(SDNode *N) {
+  SDValue Op1 = BitConvertToInteger(N->getOperand(1));
+  return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0),
+                     N->getOperand(0), Op1);
+}
+
 //===----------------------------------------------------------------------===//
 //  Float Result Expansion
 //===----------------------------------------------------------------------===//
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
index dd9af47da5287..a541833684f38 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h
@@ -651,6 +651,7 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
   SDValue SoftenFloatOp_STORE(SDNode *N, unsigned OpNo);
   SDValue SoftenFloatOp_ATOMIC_STORE(SDNode *N, unsigned OpNo);
   SDValue SoftenFloatOp_FCOPYSIGN(SDNode *N);
+  SDValue SoftenFloatOp_FAKE_USE(SDNode *N);
 
   //===--------------------------------------------------------------------===//
   // Float Expansion Support: LegalizeFloatTypes.cpp
diff --git a/llvm/test/CodeGen/MSP430/fake_use_float.ll b/llvm/test/CodeGen/MSP430/fake_use_float.ll
new file mode 100644
index 0000000000000..3983cea0f5939
--- /dev/null
+++ b/llvm/test/CodeGen/MSP430/fake_use_float.ll
@@ -0,0 +1,31 @@
+; RUN: llc -stop-after=finalize-isel -filetype=asm -o - < %s | FileCheck %s
+target datalayout = "e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16"
+target triple = "msp430"
+
+; CHECK:       bb.0.entry:
+; CHECK:       %0:gr16 = MOV16ri
+; CHECK-DAG:   FAKE_USE killed %0
+; CHECK:       %1:gr16 = MOV16ri
+; CHECK-DAG:   FAKE_USE killed %1
+; CHECK:       %2:gr16 = MOV16ri
+; CHECK-DAG:   FAKE_USE killed %2
+; CHECK:       %3:gr16 = MOV16ri
+; CHECK-DAG:   FAKE_USE killed %3
+; CHECK:       RET
+define void @test-double() {
+entry:
+  call void (...) @llvm.fake.use(double -8.765430e+02)
+  ret void
+}
+
+; CHECK:       bb.0.entry:
+; CHECK:       %0:gr16 = MOV16ri
+; CHECK-DAG:   FAKE_USE killed %0
+; CHECK:       %1:gr16 = MOV16ri
+; CHECK-DAG:   FAKE_USE killed %1
+; CHECK:       RET
+define void @test-float() {
+entry:
+  call void (...) @llvm.fake.use(float -8.76e+02)
+  ret void
+}

>From 0b43a02fb4864b67ffbd6498eb348447e8a1f5a9 Mon Sep 17 00:00:00 2001
From: Acthink Yang <yangzhh at mail.ustc.edu.cn>
Date: Wed, 4 Jun 2025 19:16:53 +0800
Subject: [PATCH 2/2] Update llvm/test/CodeGen/MSP430/fake_use_float.ll

Co-authored-by: Matt Arsenault <arsenm2 at gmail.com>
---
 llvm/test/CodeGen/MSP430/fake_use_float.ll | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/test/CodeGen/MSP430/fake_use_float.ll b/llvm/test/CodeGen/MSP430/fake_use_float.ll
index 3983cea0f5939..c2e6d989ecaee 100644
--- a/llvm/test/CodeGen/MSP430/fake_use_float.ll
+++ b/llvm/test/CodeGen/MSP430/fake_use_float.ll
@@ -1,4 +1,4 @@
-; RUN: llc -stop-after=finalize-isel -filetype=asm -o - < %s | FileCheck %s
+; RUN: llc < %s | FileCheck %s
 target datalayout = "e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16"
 target triple = "msp430"
 



More information about the llvm-commits mailing list