Skip to content

Commit 5939cb1

Browse files
committed
[LegalizeTypes][MSP430] Soften FAKE_USE operand
Adds support for softening FAKE_USE operands. Adds MSP430 tests that exercise the new softening code. Fixes #137572
1 parent 9ab4c16 commit 5939cb1

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,9 @@ bool DAGTypeLegalizer::SoftenFloatOperand(SDNode *N, unsigned OpNo) {
11431143
Res = SoftenFloatOp_ATOMIC_STORE(N, OpNo);
11441144
break;
11451145
case ISD::FCOPYSIGN: Res = SoftenFloatOp_FCOPYSIGN(N); break;
1146+
case ISD::FAKE_USE:
1147+
Res = SoftenFloatOp_FAKE_USE(N);
1148+
break;
11461149
}
11471150

11481151
// If the result is null, the sub-method took care of registering results etc.
@@ -1477,6 +1480,12 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_LLRINT(SDNode *N) {
14771480
RTLIB::LLRINT_PPCF128));
14781481
}
14791482

1483+
SDValue DAGTypeLegalizer::SoftenFloatOp_FAKE_USE(SDNode *N) {
1484+
SDValue Op1 = BitConvertToInteger(N->getOperand(1));
1485+
return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0),
1486+
N->getOperand(0), Op1);
1487+
}
1488+
14801489
//===----------------------------------------------------------------------===//
14811490
// Float Result Expansion
14821491
//===----------------------------------------------------------------------===//

llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,7 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
651651
SDValue SoftenFloatOp_STORE(SDNode *N, unsigned OpNo);
652652
SDValue SoftenFloatOp_ATOMIC_STORE(SDNode *N, unsigned OpNo);
653653
SDValue SoftenFloatOp_FCOPYSIGN(SDNode *N);
654+
SDValue SoftenFloatOp_FAKE_USE(SDNode *N);
654655

655656
//===--------------------------------------------------------------------===//
656657
// Float Expansion Support: LegalizeFloatTypes.cpp
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
; RUN: llc -stop-after=finalize-isel -filetype=asm -o - < %s | FileCheck %s
2+
target datalayout = "e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16"
3+
target triple = "msp430"
4+
5+
; CHECK: bb.0.entry:
6+
; CHECK: %0:gr16 = MOV16ri
7+
; CHECK-DAG: FAKE_USE killed %0
8+
; CHECK: %1:gr16 = MOV16ri
9+
; CHECK-DAG: FAKE_USE killed %1
10+
; CHECK: %2:gr16 = MOV16ri
11+
; CHECK-DAG: FAKE_USE killed %2
12+
; CHECK: %3:gr16 = MOV16ri
13+
; CHECK-DAG: FAKE_USE killed %3
14+
; CHECK: RET
15+
define void @test-double() {
16+
entry:
17+
call void (...) @llvm.fake.use(double -8.765430e+02)
18+
ret void
19+
}
20+
21+
; CHECK: bb.0.entry:
22+
; CHECK: %0:gr16 = MOV16ri
23+
; CHECK-DAG: FAKE_USE killed %0
24+
; CHECK: %1:gr16 = MOV16ri
25+
; CHECK-DAG: FAKE_USE killed %1
26+
; CHECK: RET
27+
define void @test-float() {
28+
entry:
29+
call void (...) @llvm.fake.use(float -8.76e+02)
30+
ret void
31+
}

0 commit comments

Comments
 (0)