@@ -2046,27 +2046,6 @@ static bool DetermineNoUndef(QualType QTy, CodeGenTypes &Types,
20462046 return false ;
20472047}
20482048
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-
20702049// / Construct the IR attribute list of a function or call.
20712050// /
20722051// / When adding an attribute, please consider where it should be handled:
@@ -4842,9 +4821,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
48424821 unsigned FirstIRArg, NumIRArgs;
48434822 std::tie (FirstIRArg, NumIRArgs) = IRFunctionArgs.getIRArgs (ArgNo);
48444823
4845- bool ArgHasMaybeUndefAttr =
4846- IsArgumentMaybeUndef (TargetDecl, CallInfo.getNumRequiredArgs (), ArgNo);
4847-
48484824 switch (ArgInfo.getKind ()) {
48494825 case ABIArgInfo::InAlloca: {
48504826 assert (NumIRArgs == 0 );
@@ -4903,11 +4879,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
49034879 // Make a temporary alloca to pass the argument.
49044880 Address Addr = CreateMemTempWithoutCast (
49054881 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 ();
49114883
49124884 I->copyInto (*this , Addr);
49134885 } else {
@@ -4965,10 +4937,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
49654937 // Create an aligned temporary, and copy to it.
49664938 Address AI = CreateMemTempWithoutCast (
49674939 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 ();
49724941
49734942 // Emit lifetime markers for the temporary alloca.
49744943 llvm::TypeSize ByvalTempElementSize =
@@ -4987,13 +4956,9 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
49874956 auto *T = llvm::PointerType::getWithSamePointeeType (
49884957 cast<llvm::PointerType>(V->getType ()),
49894958 CGM.getDataLayout ().getAllocaAddrSpace ());
4990-
4991- llvm::Value *Val = getTargetHooks ().performAddrSpaceCast (
4959+ IRCallArgs[FirstIRArg] = getTargetHooks ().performAddrSpaceCast (
49924960 *this , V, LangAS::Default, CGM.getASTAllocaAddressSpace (), T,
49934961 true );
4994- if (ArgHasMaybeUndefAttr)
4995- Val = Builder.CreateFreeze (Val);
4996- IRCallArgs[FirstIRArg] = Val;
49974962 }
49984963 }
49994964 break ;
@@ -5047,8 +5012,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
50475012 V->getType () != IRFuncTy->getParamType (FirstIRArg))
50485013 V = Builder.CreateBitCast (V, IRFuncTy->getParamType (FirstIRArg));
50495014
5050- if (ArgHasMaybeUndefAttr)
5051- V = Builder.CreateFreeze (V);
50525015 IRCallArgs[FirstIRArg] = V;
50535016 break ;
50545017 }
@@ -5093,8 +5056,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
50935056 for (unsigned i = 0 , e = STy->getNumElements (); i != e; ++i) {
50945057 Address EltPtr = Builder.CreateStructGEP (Src, i);
50955058 llvm::Value *LI = Builder.CreateLoad (EltPtr);
5096- if (ArgHasMaybeUndefAttr)
5097- LI = Builder.CreateFreeze (LI);
50985059 IRCallArgs[FirstIRArg + i] = LI;
50995060 }
51005061 } else {
@@ -5111,9 +5072,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
51115072 if (ATy != nullptr && isa<RecordType>(I->Ty .getCanonicalType ()))
51125073 Load = EmitCMSEClearRecord (Load, ATy, I->Ty );
51135074 }
5114-
5115- if (ArgHasMaybeUndefAttr)
5116- Load = Builder.CreateFreeze (Load);
51175075 IRCallArgs[FirstIRArg] = Load;
51185076 }
51195077
@@ -5159,8 +5117,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
51595117 if (ABIArgInfo::isPaddingForCoerceAndExpand (eltType)) continue ;
51605118 Address eltAddr = Builder.CreateStructGEP (addr, i);
51615119 llvm::Value *elt = Builder.CreateLoad (eltAddr);
5162- if (ArgHasMaybeUndefAttr)
5163- elt = Builder.CreateFreeze (elt);
51645120 IRCallArgs[IRArgPos++] = elt;
51655121 }
51665122 assert (IRArgPos == FirstIRArg + NumIRArgs);
0 commit comments