[llvm] [LegalizeTypes][MSP430] Soften FAKE_USE operand (PR #142714)
Acthink Yang via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 3 21:46:06 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] [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
+}
More information about the llvm-commits
mailing list