-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[LegalizeTypes][MSP430] Soften FAKE_USE operand #142714
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-backend-msp430 Author: Acthink Yang (Acthink-Yang) ChangesAdds support for softening FAKE_USE operands. Fixes #137572 Full diff: https://github.com/llvm/llvm-project/pull/142714.diff 3 Files Affected:
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
+}
|
@llvm/pr-subscribers-llvm-selectiondag Author: Acthink Yang (Acthink-Yang) ChangesAdds support for softening FAKE_USE operands. Fixes #137572 Full diff: https://github.com/llvm/llvm-project/pull/142714.diff 3 Files Affected:
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
+}
|
5b3c6f5
to
511d75d
Compare
a6f993b
to
d4a180d
Compare
Adds support for softening FAKE_USE operands. Adds MSP430 tests that exercise the new softening code. Fixes llvm#137572
Co-authored-by: Matt Arsenault <arsenm2@gmail.com>
Co-authored-by: Matt Arsenault <arsenm2@gmail.com>
d4a180d
to
bec195c
Compare
Adds support for softening FAKE_USE operands.
Adds MSP430 tests that exercise the new softening code.
Fixes #137572