diff options
author | Amy Kwan <amy.kwan1@ibm.com> | 2022-07-29 13:16:37 -0500 |
---|---|---|
committer | Amy Kwan <amy.kwan1@ibm.com> | 2022-07-29 13:28:48 -0500 |
commit | 4e1fe968c9de73507a1bf0c8aa57e06be457816e (patch) | |
tree | e3d05af6e7ede8d696e4c5d676310c9a1a0847b7 /clang/lib/CodeGen/CGCall.cpp | |
parent | cea1b790f6efa9ac225454aad98a576a4916d376 (diff) | |
download | llvm-4e1fe968c9de73507a1bf0c8aa57e06be457816e.zip llvm-4e1fe968c9de73507a1bf0c8aa57e06be457816e.tar.gz llvm-4e1fe968c9de73507a1bf0c8aa57e06be457816e.tar.bz2 |
Revert "[Clang][Attribute] Introduce maybe_undef attribute for function arguments which accepts undef values"
This reverts commit a35c64ce23b7c7e4972c89b224b9363639dddea2.
Reverting this commit as it causes various failures on LE and BE PPC bots.
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 50 |
1 files changed, 3 insertions, 47 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index ee37e76..7853695 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -2046,27 +2046,6 @@ static bool DetermineNoUndef(QualType QTy, CodeGenTypes &Types, return false; } -/// Check if the argument of a function has maybe_undef attribute. -static bool IsArgumentMaybeUndef(const Decl *TargetDecl, - unsigned NumRequiredArgs, unsigned ArgNo) { - const auto *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl); - if (!FD) - return false; - - // Assume variadic arguments do not have maybe_undef attribute. - if (ArgNo >= NumRequiredArgs) - return false; - - // Check if argument has maybe_undef attribute. - if (ArgNo < FD->getNumParams()) { - const ParmVarDecl *Param = FD->getParamDecl(ArgNo); - if (Param && Param->hasAttr<MaybeUndefAttr>()) - return true; - } - - return false; -} - /// Construct the IR attribute list of a function or call. /// /// When adding an attribute, please consider where it should be handled: @@ -4842,9 +4821,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, unsigned FirstIRArg, NumIRArgs; std::tie(FirstIRArg, NumIRArgs) = IRFunctionArgs.getIRArgs(ArgNo); - bool ArgHasMaybeUndefAttr = - IsArgumentMaybeUndef(TargetDecl, CallInfo.getNumRequiredArgs(), ArgNo); - switch (ArgInfo.getKind()) { case ABIArgInfo::InAlloca: { assert(NumIRArgs == 0); @@ -4903,11 +4879,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, // Make a temporary alloca to pass the argument. Address Addr = CreateMemTempWithoutCast( I->Ty, ArgInfo.getIndirectAlign(), "indirect-arg-temp"); - - llvm::Value *Val = Addr.getPointer(); - if (ArgHasMaybeUndefAttr) - Val = Builder.CreateFreeze(Addr.getPointer()); - IRCallArgs[FirstIRArg] = Val; + IRCallArgs[FirstIRArg] = Addr.getPointer(); I->copyInto(*this, Addr); } else { @@ -4965,10 +4937,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, // Create an aligned temporary, and copy to it. Address AI = CreateMemTempWithoutCast( I->Ty, ArgInfo.getIndirectAlign(), "byval-temp"); - llvm::Value *Val = AI.getPointer(); - if (ArgHasMaybeUndefAttr) - Val = Builder.CreateFreeze(AI.getPointer()); - IRCallArgs[FirstIRArg] = Val; + IRCallArgs[FirstIRArg] = AI.getPointer(); // Emit lifetime markers for the temporary alloca. llvm::TypeSize ByvalTempElementSize = @@ -4987,13 +4956,9 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, auto *T = llvm::PointerType::getWithSamePointeeType( cast<llvm::PointerType>(V->getType()), CGM.getDataLayout().getAllocaAddrSpace()); - - llvm::Value *Val = getTargetHooks().performAddrSpaceCast( + IRCallArgs[FirstIRArg] = getTargetHooks().performAddrSpaceCast( *this, V, LangAS::Default, CGM.getASTAllocaAddressSpace(), T, true); - if (ArgHasMaybeUndefAttr) - Val = Builder.CreateFreeze(Val); - IRCallArgs[FirstIRArg] = Val; } } break; @@ -5047,8 +5012,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, V->getType() != IRFuncTy->getParamType(FirstIRArg)) V = Builder.CreateBitCast(V, IRFuncTy->getParamType(FirstIRArg)); - if (ArgHasMaybeUndefAttr) - V = Builder.CreateFreeze(V); IRCallArgs[FirstIRArg] = V; break; } @@ -5093,8 +5056,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) { Address EltPtr = Builder.CreateStructGEP(Src, i); llvm::Value *LI = Builder.CreateLoad(EltPtr); - if (ArgHasMaybeUndefAttr) - LI = Builder.CreateFreeze(LI); IRCallArgs[FirstIRArg + i] = LI; } } else { @@ -5111,9 +5072,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, if (ATy != nullptr && isa<RecordType>(I->Ty.getCanonicalType())) Load = EmitCMSEClearRecord(Load, ATy, I->Ty); } - - if (ArgHasMaybeUndefAttr) - Load = Builder.CreateFreeze(Load); IRCallArgs[FirstIRArg] = Load; } @@ -5159,8 +5117,6 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, if (ABIArgInfo::isPaddingForCoerceAndExpand(eltType)) continue; Address eltAddr = Builder.CreateStructGEP(addr, i); llvm::Value *elt = Builder.CreateLoad(eltAddr); - if (ArgHasMaybeUndefAttr) - elt = Builder.CreateFreeze(elt); IRCallArgs[IRArgPos++] = elt; } assert(IRArgPos == FirstIRArg + NumIRArgs); |