@@ -2046,27 +2046,6 @@ static bool DetermineNoUndef(QualType QTy, CodeGenTypes &Types,
2046
2046
return false ;
2047
2047
}
2048
2048
2049
- // / Check if the argument of a function has maybe_undef attribute.
2050
- static bool IsArgumentMaybeUndef (const Decl *TargetDecl,
2051
- unsigned NumRequiredArgs, unsigned ArgNo) {
2052
- const auto *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl);
2053
- if (!FD)
2054
- return false ;
2055
-
2056
- // Assume variadic arguments do not have maybe_undef attribute.
2057
- if (ArgNo >= NumRequiredArgs)
2058
- return false ;
2059
-
2060
- // Check if argument has maybe_undef attribute.
2061
- if (ArgNo < FD->getNumParams ()) {
2062
- const ParmVarDecl *Param = FD->getParamDecl (ArgNo);
2063
- if (Param && Param->hasAttr <MaybeUndefAttr>())
2064
- return true ;
2065
- }
2066
-
2067
- return false ;
2068
- }
2069
-
2070
2049
// / Construct the IR attribute list of a function or call.
2071
2050
// /
2072
2051
// / When adding an attribute, please consider where it should be handled:
@@ -4842,9 +4821,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
4842
4821
unsigned FirstIRArg, NumIRArgs;
4843
4822
std::tie (FirstIRArg, NumIRArgs) = IRFunctionArgs.getIRArgs (ArgNo);
4844
4823
4845
- bool ArgHasMaybeUndefAttr =
4846
- IsArgumentMaybeUndef (TargetDecl, CallInfo.getNumRequiredArgs (), ArgNo);
4847
-
4848
4824
switch (ArgInfo.getKind ()) {
4849
4825
case ABIArgInfo::InAlloca: {
4850
4826
assert (NumIRArgs == 0 );
@@ -4903,11 +4879,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
4903
4879
// Make a temporary alloca to pass the argument.
4904
4880
Address Addr = CreateMemTempWithoutCast (
4905
4881
I->Ty , ArgInfo.getIndirectAlign (), " indirect-arg-temp" );
4906
-
4907
- llvm::Value *Val = Addr.getPointer ();
4908
- if (ArgHasMaybeUndefAttr)
4909
- Val = Builder.CreateFreeze (Addr.getPointer ());
4910
- IRCallArgs[FirstIRArg] = Val;
4882
+ IRCallArgs[FirstIRArg] = Addr.getPointer ();
4911
4883
4912
4884
I->copyInto (*this , Addr);
4913
4885
} else {
@@ -4965,10 +4937,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
4965
4937
// Create an aligned temporary, and copy to it.
4966
4938
Address AI = CreateMemTempWithoutCast (
4967
4939
I->Ty , ArgInfo.getIndirectAlign (), " byval-temp" );
4968
- llvm::Value *Val = AI.getPointer ();
4969
- if (ArgHasMaybeUndefAttr)
4970
- Val = Builder.CreateFreeze (AI.getPointer ());
4971
- IRCallArgs[FirstIRArg] = Val;
4940
+ IRCallArgs[FirstIRArg] = AI.getPointer ();
4972
4941
4973
4942
// Emit lifetime markers for the temporary alloca.
4974
4943
llvm::TypeSize ByvalTempElementSize =
@@ -4987,13 +4956,9 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
4987
4956
auto *T = llvm::PointerType::getWithSamePointeeType (
4988
4957
cast<llvm::PointerType>(V->getType ()),
4989
4958
CGM.getDataLayout ().getAllocaAddrSpace ());
4990
-
4991
- llvm::Value *Val = getTargetHooks ().performAddrSpaceCast (
4959
+ IRCallArgs[FirstIRArg] = getTargetHooks ().performAddrSpaceCast (
4992
4960
*this , V, LangAS::Default, CGM.getASTAllocaAddressSpace (), T,
4993
4961
true );
4994
- if (ArgHasMaybeUndefAttr)
4995
- Val = Builder.CreateFreeze (Val);
4996
- IRCallArgs[FirstIRArg] = Val;
4997
4962
}
4998
4963
}
4999
4964
break ;
@@ -5047,8 +5012,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
5047
5012
V->getType () != IRFuncTy->getParamType (FirstIRArg))
5048
5013
V = Builder.CreateBitCast (V, IRFuncTy->getParamType (FirstIRArg));
5049
5014
5050
- if (ArgHasMaybeUndefAttr)
5051
- V = Builder.CreateFreeze (V);
5052
5015
IRCallArgs[FirstIRArg] = V;
5053
5016
break ;
5054
5017
}
@@ -5093,8 +5056,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
5093
5056
for (unsigned i = 0 , e = STy->getNumElements (); i != e; ++i) {
5094
5057
Address EltPtr = Builder.CreateStructGEP (Src, i);
5095
5058
llvm::Value *LI = Builder.CreateLoad (EltPtr);
5096
- if (ArgHasMaybeUndefAttr)
5097
- LI = Builder.CreateFreeze (LI);
5098
5059
IRCallArgs[FirstIRArg + i] = LI;
5099
5060
}
5100
5061
} else {
@@ -5111,9 +5072,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
5111
5072
if (ATy != nullptr && isa<RecordType>(I->Ty .getCanonicalType ()))
5112
5073
Load = EmitCMSEClearRecord (Load, ATy, I->Ty );
5113
5074
}
5114
-
5115
- if (ArgHasMaybeUndefAttr)
5116
- Load = Builder.CreateFreeze (Load);
5117
5075
IRCallArgs[FirstIRArg] = Load;
5118
5076
}
5119
5077
@@ -5159,8 +5117,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
5159
5117
if (ABIArgInfo::isPaddingForCoerceAndExpand (eltType)) continue ;
5160
5118
Address eltAddr = Builder.CreateStructGEP (addr, i);
5161
5119
llvm::Value *elt = Builder.CreateLoad (eltAddr);
5162
- if (ArgHasMaybeUndefAttr)
5163
- elt = Builder.CreateFreeze (elt);
5164
5120
IRCallArgs[IRArgPos++] = elt;
5165
5121
}
5166
5122
assert (IRArgPos == FirstIRArg + NumIRArgs);
0 commit comments