Skip to content

Commit e9e7b2a

Browse files
authored
[SDAG] Set IsPostTypeLegalization flag in LegalizeDAG (#122278)
This runs after type legalization and as such should set IsPostTypeLegalization when creating libcalls. I don't think this makes any observable difference right now, but I ran into this issue in an upcoming patch.
1 parent 2e6030e commit e9e7b2a

File tree

1 file changed

+3
-8
lines changed

1 file changed

+3
-8
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,6 +2153,7 @@ void SelectionDAGLegalize::ExpandFPLibCall(SDNode* Node,
21532153
EVT RetVT = Node->getValueType(0);
21542154
SmallVector<SDValue, 4> Ops(drop_begin(Node->ops()));
21552155
TargetLowering::MakeLibCallOptions CallOptions;
2156+
CallOptions.IsPostTypeLegalization = true;
21562157
// FIXME: This doesn't support tail calls.
21572158
std::pair<SDValue, SDValue> Tmp = TLI.makeLibCall(DAG, LC, RetVT,
21582159
Ops, CallOptions,
@@ -4342,6 +4343,8 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
43424343
LLVM_DEBUG(dbgs() << "Trying to convert node to libcall\n");
43434344
SmallVector<SDValue, 8> Results;
43444345
SDLoc dl(Node);
4346+
TargetLowering::MakeLibCallOptions CallOptions;
4347+
CallOptions.IsPostTypeLegalization = true;
43454348
// FIXME: Check flags on the node to see if we can use a finite call.
43464349
unsigned Opc = Node->getOpcode();
43474350
switch (Opc) {
@@ -4384,7 +4387,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
43844387
AtomicOrdering Order = cast<AtomicSDNode>(Node)->getMergedOrdering();
43854388
RTLIB::Libcall LC = RTLIB::getOUTLINE_ATOMIC(Opc, Order, VT);
43864389
EVT RetVT = Node->getValueType(0);
4387-
TargetLowering::MakeLibCallOptions CallOptions;
43884390
SmallVector<SDValue, 4> Ops;
43894391
if (TLI.getLibcallName(LC)) {
43904392
// If outline atomic available, prepare its arguments and expand.
@@ -4422,7 +4424,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
44224424
break;
44234425
}
44244426
case ISD::CLEAR_CACHE: {
4425-
TargetLowering::MakeLibCallOptions CallOptions;
44264427
SDValue InputChain = Node->getOperand(0);
44274428
SDValue StartVal = Node->getOperand(1);
44284429
SDValue EndVal = Node->getOperand(2);
@@ -4728,7 +4729,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
47284729
break;
47294730
case ISD::STRICT_BF16_TO_FP:
47304731
if (Node->getValueType(0) == MVT::f32) {
4731-
TargetLowering::MakeLibCallOptions CallOptions;
47324732
std::pair<SDValue, SDValue> Tmp = TLI.makeLibCall(
47334733
DAG, RTLIB::FPEXT_BF16_F32, MVT::f32, Node->getOperand(1),
47344734
CallOptions, SDLoc(Node), Node->getOperand(0));
@@ -4738,7 +4738,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
47384738
break;
47394739
case ISD::STRICT_FP16_TO_FP: {
47404740
if (Node->getValueType(0) == MVT::f32) {
4741-
TargetLowering::MakeLibCallOptions CallOptions;
47424741
std::pair<SDValue, SDValue> Tmp = TLI.makeLibCall(
47434742
DAG, RTLIB::FPEXT_F16_F32, MVT::f32, Node->getOperand(1), CallOptions,
47444743
SDLoc(Node), Node->getOperand(0));
@@ -4793,7 +4792,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
47934792
// Sign/zero extend the argument if the libcall takes a larger type.
47944793
SDValue Op = DAG.getNode(Signed ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND, dl,
47954794
NVT, Node->getOperand(IsStrict ? 1 : 0));
4796-
TargetLowering::MakeLibCallOptions CallOptions;
47974795
CallOptions.setIsSigned(Signed);
47984796
std::pair<SDValue, SDValue> Tmp =
47994797
TLI.makeLibCall(DAG, LC, RVT, Op, CallOptions, dl, Chain);
@@ -4833,7 +4831,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
48334831
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unable to legalize as libcall");
48344832

48354833
SDValue Chain = IsStrict ? Node->getOperand(0) : SDValue();
4836-
TargetLowering::MakeLibCallOptions CallOptions;
48374834
std::pair<SDValue, SDValue> Tmp =
48384835
TLI.makeLibCall(DAG, LC, NVT, Op, CallOptions, dl, Chain);
48394836

@@ -4861,7 +4858,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
48614858
RTLIB::Libcall LC = RTLIB::getFPROUND(Op.getValueType(), VT);
48624859
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unable to legalize as libcall");
48634860

4864-
TargetLowering::MakeLibCallOptions CallOptions;
48654861
std::pair<SDValue, SDValue> Tmp =
48664862
TLI.makeLibCall(DAG, LC, VT, Op, CallOptions, SDLoc(Node), Chain);
48674863
Results.push_back(Tmp.first);
@@ -4890,7 +4886,6 @@ void SelectionDAGLegalize::ConvertNodeToLibcall(SDNode *Node) {
48904886

48914887
assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unable to legalize as libcall");
48924888

4893-
TargetLowering::MakeLibCallOptions CallOptions;
48944889
std::pair<SDValue, SDValue> Tmp =
48954890
TLI.makeLibCall(DAG, LC, Node->getValueType(0), Node->getOperand(1),
48964891
CallOptions, SDLoc(Node), Node->getOperand(0));

0 commit comments

Comments
 (0)