[llvm] 22596e7 - [Statepoint] Use early return to reduce nesting and clarify comments [NFC]
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 7 16:19:16 PDT 2020
Author: Philip Reames
Date: 2020-07-07T16:19:05-07:00
New Revision: 22596e7b2f3e22b99b828f8dc17434c53f1f67e7
URL: https://github.com/llvm/llvm-project/commit/22596e7b2f3e22b99b828f8dc17434c53f1f67e7
DIFF: https://github.com/llvm/llvm-project/commit/22596e7b2f3e22b99b828f8dc17434c53f1f67e7.diff
LOG: [Statepoint] Use early return to reduce nesting and clarify comments [NFC]
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
index c3a23d67306b..2cb57c1d1ccc 100644
--- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
@@ -913,36 +913,38 @@ SelectionDAGBuilder::LowerStatepoint(const GCStatepointInst &I,
// Export the result value if needed
const GCResultInst *GCResult = I.getGCResult();
Type *RetTy = I.getActualReturnType();
- if (!RetTy->isVoidTy() && GCResult) {
- if (GCResult->getParent() != I.getParent()) {
- // Result value will be used in a
diff erent basic block so we need to
- // export it now. Default exporting mechanism will not work here because
- // statepoint call has a
diff erent type than the actual call. It means
- // that by default llvm will create export register of the wrong type
- // (always i32 in our case). So instead we need to create export register
- // with correct type manually.
- // TODO: To eliminate this problem we can remove gc.result intrinsics
- // completely and make statepoint call to return a tuple.
- unsigned Reg = FuncInfo.CreateRegs(RetTy);
- RegsForValue RFV(*DAG.getContext(), DAG.getTargetLoweringInfo(),
- DAG.getDataLayout(), Reg, RetTy,
- I.getCallingConv());
- SDValue Chain = DAG.getEntryNode();
-
- RFV.getCopyToRegs(ReturnValue, DAG, getCurSDLoc(), Chain, nullptr);
- PendingExports.push_back(Chain);
- FuncInfo.ValueMap[&I] = Reg;
- } else {
- // Result value will be used in a same basic block. Don't export it or
- // perform any explicit register copies.
- // We'll replace the actuall call node shortly. gc_result will grab
- // this value.
- setValue(&I, ReturnValue);
- }
- } else {
- // The token value is never used from here on, just generate a poison value
+
+ if (RetTy->isVoidTy() || !GCResult) {
+ // The return value is not needed, just generate a poison value.
setValue(&I, DAG.getIntPtrConstant(-1, getCurSDLoc()));
+ return;
}
+
+ if (GCResult->getParent() == I.getParent()) {
+ // Result value will be used in a same basic block. Don't export it or
+ // perform any explicit register copies. The gc_result will simply grab
+ // this value.
+ setValue(&I, ReturnValue);
+ return;
+ }
+
+ // Result value will be used in a
diff erent basic block so we need to export
+ // it now. Default exporting mechanism will not work here because statepoint
+ // call has a
diff erent type than the actual call. It means that by default
+ // llvm will create export register of the wrong type (always i32 in our
+ // case). So instead we need to create export register with correct type
+ // manually.
+ // TODO: To eliminate this problem we can remove gc.result intrinsics
+ // completely and make statepoint call to return a tuple.
+ unsigned Reg = FuncInfo.CreateRegs(RetTy);
+ RegsForValue RFV(*DAG.getContext(), DAG.getTargetLoweringInfo(),
+ DAG.getDataLayout(), Reg, RetTy,
+ I.getCallingConv());
+ SDValue Chain = DAG.getEntryNode();
+
+ RFV.getCopyToRegs(ReturnValue, DAG, getCurSDLoc(), Chain, nullptr);
+ PendingExports.push_back(Chain);
+ FuncInfo.ValueMap[&I] = Reg;
}
void SelectionDAGBuilder::LowerCallSiteWithDeoptBundleImpl(
More information about the llvm-commits
mailing list