forked from OSchip/llvm-project
Extend the `uwtable` attribute with unwind table kind
We have the `clang -cc1` command-line option `-funwind-tables=1|2` and the codegen option `VALUE_CODEGENOPT(UnwindTables, 2, 0) ///< Unwind tables (1) or asynchronous unwind tables (2)`. However, this is encoded in LLVM IR by the presence or the absence of the `uwtable` attribute, i.e. we lose the information whether to generate want just some unwind tables or asynchronous unwind tables. Asynchronous unwind tables take more space in the runtime image, I'd estimate something like 80-90% more, as the difference is adding roughly the same number of CFI directives as for prologues, only a bit simpler (e.g. `.cfi_offset reg, off` vs. `.cfi_restore reg`). Or even more, if you consider tail duplication of epilogue blocks. Asynchronous unwind tables could also restrict code generation to having only a finite number of frame pointer adjustments (an example of *not* having a finite number of `SP` adjustments is on AArch64 when untagging the stack (MTE) in some cases the compiler can modify `SP` in a loop). Having the CFI precise up to an instruction generally also means one cannot bundle together CFI instructions once the prologue is done, they need to be interspersed with ordinary instructions, which means extra `DW_CFA_advance_loc` commands, further increasing the unwind tables size. That is to say, async unwind tables impose a non-negligible overhead, yet for the most common use cases (like C++ exceptions), they are not even needed. This patch extends the `uwtable` attribute with an optional value: - `uwtable` (default to `async`) - `uwtable(sync)`, synchronous unwind tables - `uwtable(async)`, asynchronous (instruction precise) unwind tables Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D114543
This commit is contained in:
parent
48f1884333
commit
6398903ac8
|
@ -3188,7 +3188,7 @@ static void emitCheckHandlerCall(CodeGenFunction &CGF,
|
|||
B.addAttribute(llvm::Attribute::NoReturn)
|
||||
.addAttribute(llvm::Attribute::NoUnwind);
|
||||
}
|
||||
B.addAttribute(llvm::Attribute::UWTable);
|
||||
B.addUWTableAttr(llvm::UWTableKind::Default);
|
||||
|
||||
llvm::FunctionCallee Fn = CGF.CGM.CreateRuntimeFunction(
|
||||
FnType, FnName,
|
||||
|
|
|
@ -828,7 +828,7 @@ void CodeGenModule::Release() {
|
|||
if (CodeGenOpts.NoPLT)
|
||||
getModule().setRtLibUseGOT();
|
||||
if (CodeGenOpts.UnwindTables)
|
||||
getModule().setUwtable();
|
||||
getModule().setUwtable(llvm::UWTableKind(CodeGenOpts.UnwindTables));
|
||||
|
||||
switch (CodeGenOpts.getFramePointer()) {
|
||||
case CodeGenOptions::FramePointerKind::None:
|
||||
|
@ -1839,7 +1839,7 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
|
|||
llvm::AttrBuilder B(F->getContext());
|
||||
|
||||
if (CodeGenOpts.UnwindTables)
|
||||
B.addAttribute(llvm::Attribute::UWTable);
|
||||
B.addUWTableAttr(llvm::UWTableKind(CodeGenOpts.UnwindTables));
|
||||
|
||||
if (CodeGenOpts.StackClashProtector)
|
||||
B.addAttribute("probe-stack", "inline-asm");
|
||||
|
|
|
@ -48,7 +48,7 @@ void func() {
|
|||
// RUN: %clang_cc1 -emit-llvm -fsanitize=address -funwind-tables=2 -o - %s | FileCheck %s --check-prefixes=UWTABLE
|
||||
// UWTABLE: define internal void @asan.module_dtor() #[[#ATTR:]] {
|
||||
// UWTABLE: attributes #[[#ATTR]] = { nounwind uwtable }
|
||||
// UWTABLE: ![[#]] = !{i32 7, !"uwtable", i32 1}
|
||||
// UWTABLE: ![[#]] = !{i32 7, !"uwtable", i32 2}
|
||||
|
||||
// CHECK: !llvm.asan.globals = !{![[EXTRA_GLOBAL:[0-9]+]], ![[GLOBAL:[0-9]+]], ![[DYN_INIT_GLOBAL:[0-9]+]], ![[ATTR_GLOBAL:[0-9]+]], ![[IGNORELISTED_GLOBAL:[0-9]+]], ![[SECTIONED_GLOBAL:[0-9]+]], ![[SPECIAL_GLOBAL:[0-9]+]], ![[STATIC_VAR:[0-9]+]], ![[LITERAL:[0-9]+]]}
|
||||
// CHECK: ![[EXTRA_GLOBAL]] = !{{{.*}} ![[EXTRA_GLOBAL_LOC:[0-9]+]], !"extra_global", i1 false, i1 false}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// Test that function and modules attributes react on the command-line options,
|
||||
// it does not state the current behaviour makes sense in all cases (it does not).
|
||||
|
||||
// RUN: %clang -S -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,DEFAULT
|
||||
// RUN: %clang -S -emit-llvm -o - %s -funwind-tables -fno-asynchronous-unwind-tables | FileCheck %s -check-prefixes=CHECK,TABLES
|
||||
// RUN: %clang -S -emit-llvm -o - %s -fno-unwind-tables -fno-asynchronous-unwind-tables | FileCheck %s -check-prefixes=CHECK,NO_TABLES
|
||||
|
||||
// RUN: %clang -S -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,DEFAULT
|
||||
// RUN: %clang -S -emit-llvm -o - -x c++ %s -funwind-tables -fno-asynchronous-unwind-tables | FileCheck %s -check-prefixes=CHECK,TABLES
|
||||
// RUN: %clang -S -emit-llvm -o - -x c++ %s -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables | FileCheck %s -check-prefixes=CHECK,NO_TABLES
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" void g(void);
|
||||
struct S { ~S(); };
|
||||
extern "C" int f() { S s; g(); return 0;};
|
||||
#else
|
||||
void g(void);
|
||||
int f() { g(); return 0; };
|
||||
#endif
|
||||
|
||||
// CHECK: define {{.*}} @f() #[[#F:]]
|
||||
// CHECK: declare {{.*}} @g() #[[#]]
|
||||
|
||||
// DEFAULT: attributes #[[#F]] = { {{.*}} uwtable{{ }}{{.*}} }
|
||||
// DEFAULT: ![[#]] = !{i32 7, !"uwtable", i32 2}
|
||||
|
||||
// TABLES: attributes #[[#F]] = { {{.*}} uwtable(sync){{.*}} }
|
||||
// TABLES: ![[#]] = !{i32 7, !"uwtable", i32 1}
|
||||
|
||||
// NO_TABLES-NOT: uwtable
|
|
@ -83,7 +83,6 @@ func TestAttributes(t *testing.T) {
|
|||
"sspstrong",
|
||||
"sanitize_thread",
|
||||
"sanitize_memory",
|
||||
"uwtable",
|
||||
"zeroext",
|
||||
"cold",
|
||||
"nocf_check",
|
||||
|
|
|
@ -2108,12 +2108,15 @@ example:
|
|||
function with a tail call. The prototype of a thunk should not be used for
|
||||
optimization purposes. The caller is expected to cast the thunk prototype to
|
||||
match the thunk target prototype.
|
||||
``uwtable``
|
||||
``uwtable[(sync|async)]``
|
||||
This attribute indicates that the ABI being targeted requires that
|
||||
an unwind table entry be produced for this function even if we can
|
||||
show that no exceptions passes by it. This is normally the case for
|
||||
the ELF x86-64 abi, but it can be disabled for some compilation
|
||||
units.
|
||||
units. The optional parameter describes what kind of unwind tables
|
||||
to generate: ``sync`` for normal unwind tables, ``async`` for asynchronous
|
||||
(instruction precise) unwind tables. Without the parameter, the attribute
|
||||
``uwtable`` is equivalent to ``uwtable(async)``.
|
||||
``nocf_check``
|
||||
This attribute indicates that no control-flow check will be performed on
|
||||
the attributed entity. It disables -fcf-protection=<> for a specific
|
||||
|
@ -7215,8 +7218,9 @@ functions is small.
|
|||
- "frame-pointer": **Max**. The value can be 0, 1, or 2. A synthesized function
|
||||
will get the "frame-pointer" function attribute, with value being "none",
|
||||
"non-leaf", or "all", respectively.
|
||||
- "uwtable": **Max**. The value can be 0 or 1. If the value is 1, a synthesized
|
||||
function will get the ``uwtable`` function attribute.
|
||||
- "uwtable": **Max**. The value can be 0, 1, or 2. If the value is 1, a synthesized
|
||||
function will get the ``uwtable(sync)`` function attribute, if the value is 2,
|
||||
a synthesized function will get the ``uwtable(async)`` function attribute.
|
||||
|
||||
Objective-C Garbage Collection Module Flags Metadata
|
||||
----------------------------------------------------
|
||||
|
|
|
@ -263,6 +263,7 @@ namespace llvm {
|
|||
bool parseOptionalAlignment(MaybeAlign &Alignment,
|
||||
bool AllowParens = false);
|
||||
bool parseOptionalDerefAttrBytes(lltok::Kind AttrKind, uint64_t &Bytes);
|
||||
bool parseOptionalUWTableKind(UWTableKind &Kind);
|
||||
bool parseScopeAndOrdering(bool IsAtomic, SyncScope::ID &SSID,
|
||||
AtomicOrdering &Ordering);
|
||||
bool parseScope(SyncScope::ID &SSID);
|
||||
|
|
|
@ -252,6 +252,8 @@ enum Kind {
|
|||
kw_immarg,
|
||||
kw_byref,
|
||||
kw_mustprogress,
|
||||
kw_sync,
|
||||
kw_async,
|
||||
|
||||
kw_type,
|
||||
kw_opaque,
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Config/llvm-config.h"
|
||||
#include "llvm/Support/Alignment.h"
|
||||
#include "llvm/Support/CodeGen.h"
|
||||
#include "llvm/Support/PointerLikeTypeTraits.h"
|
||||
#include <bitset>
|
||||
#include <cassert>
|
||||
|
@ -130,6 +131,7 @@ public:
|
|||
static Attribute getWithByRefType(LLVMContext &Context, Type *Ty);
|
||||
static Attribute getWithPreallocatedType(LLVMContext &Context, Type *Ty);
|
||||
static Attribute getWithInAllocaType(LLVMContext &Context, Type *Ty);
|
||||
static Attribute getWithUWTableKind(LLVMContext &Context, UWTableKind Kind);
|
||||
|
||||
/// For a typed attribute, return the equivalent attribute with the type
|
||||
/// changed to \p ReplacementTy.
|
||||
|
@ -223,6 +225,9 @@ public:
|
|||
/// unknown.
|
||||
Optional<unsigned> getVScaleRangeMax() const;
|
||||
|
||||
// Returns the unwind table kind.
|
||||
UWTableKind getUWTableKind() const;
|
||||
|
||||
/// The Attribute is converted to a string of equivalent mnemonic. This
|
||||
/// is, presumably, for writing out the mnemonics for the assembly writer.
|
||||
std::string getAsString(bool InAttrGrp = false) const;
|
||||
|
@ -353,6 +358,7 @@ public:
|
|||
std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
|
||||
unsigned getVScaleRangeMin() const;
|
||||
Optional<unsigned> getVScaleRangeMax() const;
|
||||
UWTableKind getUWTableKind() const;
|
||||
std::string getAsString(bool InAttrGrp = false) const;
|
||||
|
||||
/// Return true if this attribute set belongs to the LLVMContext.
|
||||
|
@ -841,6 +847,9 @@ public:
|
|||
/// arg.
|
||||
uint64_t getParamDereferenceableOrNullBytes(unsigned ArgNo) const;
|
||||
|
||||
/// Get the unwind table kind requested for the function.
|
||||
UWTableKind getUWTableKind() const;
|
||||
|
||||
/// Return the attributes at the index as a string.
|
||||
std::string getAsString(unsigned Index, bool InAttrGrp = false) const;
|
||||
|
||||
|
@ -1190,6 +1199,10 @@ public:
|
|||
/// Attribute.getIntValue().
|
||||
AttrBuilder &addVScaleRangeAttrFromRawRepr(uint64_t RawVScaleRangeRepr);
|
||||
|
||||
/// This turns the unwind table kind into the form used internally in
|
||||
/// Attribute.
|
||||
AttrBuilder &addUWTableAttr(UWTableKind Kind);
|
||||
|
||||
ArrayRef<Attribute> attrs() const { return Attrs; }
|
||||
|
||||
bool operator==(const AttrBuilder &B) const;
|
||||
|
|
|
@ -273,7 +273,7 @@ def SwiftSelf : EnumAttr<"swiftself", [ParamAttr]>;
|
|||
def SwiftAsync : EnumAttr<"swiftasync", [ParamAttr]>;
|
||||
|
||||
/// Function must be in a unwind table.
|
||||
def UWTable : EnumAttr<"uwtable", [FnAttr]>;
|
||||
def UWTable : IntAttr<"uwtable", [FnAttr]>;
|
||||
|
||||
/// Minimum/Maximum vscale value for function.
|
||||
def VScaleRange : IntAttr<"vscale_range", [FnAttr]>;
|
||||
|
|
|
@ -623,15 +623,19 @@ public:
|
|||
bool willReturn() const { return hasFnAttribute(Attribute::WillReturn); }
|
||||
void setWillReturn() { addFnAttr(Attribute::WillReturn); }
|
||||
|
||||
/// Get what kind of unwind table entry to generate for this function.
|
||||
UWTableKind getUWTableKind() const {
|
||||
return AttributeSets.getUWTableKind();
|
||||
}
|
||||
|
||||
/// True if the ABI mandates (or the user requested) that this
|
||||
/// function be in a unwind table.
|
||||
bool hasUWTable() const {
|
||||
return hasFnAttribute(Attribute::UWTable);
|
||||
return getUWTableKind() != UWTableKind::None;
|
||||
}
|
||||
void setHasUWTable() {
|
||||
addFnAttr(Attribute::UWTable);
|
||||
void setUWTableKind(UWTableKind K) {
|
||||
addFnAttr(Attribute::getWithUWTableKind(getContext(), K));
|
||||
}
|
||||
|
||||
/// True if this function needs an unwind table.
|
||||
bool needsUnwindTableEntry() const {
|
||||
return hasUWTable() || !doesNotThrow() || hasPersonalityFn();
|
||||
|
|
|
@ -888,8 +888,8 @@ public:
|
|||
void setRtLibUseGOT();
|
||||
|
||||
/// Get/set whether synthesized functions should get the uwtable attribute.
|
||||
bool getUwtable() const;
|
||||
void setUwtable();
|
||||
UWTableKind getUwtable() const;
|
||||
void setUwtable(UWTableKind Kind);
|
||||
|
||||
/// Get/set whether synthesized functions should get the "frame-pointer"
|
||||
/// attribute.
|
||||
|
|
|
@ -97,6 +97,12 @@ namespace llvm {
|
|||
};
|
||||
} // namespace ZeroCallUsedRegs
|
||||
|
||||
} // end llvm namespace
|
||||
enum class UWTableKind {
|
||||
None = 0, ///< No unwind table requested
|
||||
Sync = 1, ///< "Synchronous" unwind tables
|
||||
Async = 2, ///< "Asynchronous" unwind tables (instr precise)
|
||||
Default = 2,
|
||||
};
|
||||
} // namespace llvm
|
||||
|
||||
#endif
|
||||
|
|
|
@ -708,6 +708,8 @@ lltok::Kind LLLexer::LexIdentifier() {
|
|||
KEYWORD(immarg);
|
||||
KEYWORD(byref);
|
||||
KEYWORD(mustprogress);
|
||||
KEYWORD(sync);
|
||||
KEYWORD(async);
|
||||
|
||||
KEYWORD(type);
|
||||
KEYWORD(opaque);
|
||||
|
|
|
@ -1333,6 +1333,13 @@ bool LLParser::parseEnumAttribute(Attribute::AttrKind Attr, AttrBuilder &B,
|
|||
B.addDereferenceableOrNullAttr(Bytes);
|
||||
return false;
|
||||
}
|
||||
case Attribute::UWTable: {
|
||||
UWTableKind Kind;
|
||||
if (parseOptionalUWTableKind(Kind))
|
||||
return true;
|
||||
B.addUWTableAttr(Kind);
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
B.addAttribute(Attr);
|
||||
Lex.Lex();
|
||||
|
@ -1996,6 +2003,22 @@ bool LLParser::parseOptionalDerefAttrBytes(lltok::Kind AttrKind,
|
|||
return false;
|
||||
}
|
||||
|
||||
bool LLParser::parseOptionalUWTableKind(UWTableKind &Kind) {
|
||||
Lex.Lex();
|
||||
Kind = UWTableKind::Default;
|
||||
if (!EatIfPresent(lltok::lparen))
|
||||
return false;
|
||||
LocTy KindLoc = Lex.getLoc();
|
||||
if (Lex.getKind() == lltok::kw_sync)
|
||||
Kind = UWTableKind::Sync;
|
||||
else if (Lex.getKind() == lltok::kw_async)
|
||||
Kind = UWTableKind::Async;
|
||||
else
|
||||
return error(KindLoc, "expected unwind table kind");
|
||||
Lex.Lex();
|
||||
return parseToken(lltok::rparen, "expected ')'");
|
||||
}
|
||||
|
||||
/// parseOptionalCommaAlign
|
||||
/// ::=
|
||||
/// ::= ',' align 4
|
||||
|
|
|
@ -1628,6 +1628,8 @@ Error BitcodeReader::parseAttributeGroupBlock() {
|
|||
B.addStructRetAttr(nullptr);
|
||||
else if (Kind == Attribute::InAlloca)
|
||||
B.addInAllocaAttr(nullptr);
|
||||
else if (Kind == Attribute::UWTable)
|
||||
B.addUWTableAttr(UWTableKind::Default);
|
||||
else if (Attribute::isEnumAttrKind(Kind))
|
||||
B.addAttribute(Kind);
|
||||
else
|
||||
|
@ -1650,6 +1652,8 @@ Error BitcodeReader::parseAttributeGroupBlock() {
|
|||
B.addAllocSizeAttrFromRawRepr(Record[++i]);
|
||||
else if (Kind == Attribute::VScaleRange)
|
||||
B.addVScaleRangeAttrFromRawRepr(Record[++i]);
|
||||
else if (Kind == Attribute::UWTable)
|
||||
B.addUWTableAttr(UWTableKind(Record[++i]));
|
||||
} else if (Record[i] == 3 || Record[i] == 4) { // String attribute
|
||||
bool HasValue = (Record[i++] == 4);
|
||||
SmallString<64> KindStr;
|
||||
|
|
|
@ -623,6 +623,15 @@ MachineFunction *MachineOutliner::createOutlinedFunction(
|
|||
|
||||
TII.mergeOutliningCandidateAttributes(*F, OF.Candidates);
|
||||
|
||||
// Set uwtable, so we generate eh_frame.
|
||||
UWTableKind UW = std::accumulate(
|
||||
OF.Candidates.cbegin(), OF.Candidates.cend(), UWTableKind::None,
|
||||
[](UWTableKind K, const outliner::Candidate &C) {
|
||||
return std::max(K, C.getMF()->getFunction().getUWTableKind());
|
||||
});
|
||||
if (UW != UWTableKind::None)
|
||||
F->setUWTableKind(UW);
|
||||
|
||||
BasicBlock *EntryBB = BasicBlock::Create(C, "entry", F);
|
||||
IRBuilder<> Builder(EntryBB);
|
||||
Builder.CreateRetVoid();
|
||||
|
|
|
@ -255,6 +255,7 @@ public:
|
|||
std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
|
||||
unsigned getVScaleRangeMin() const;
|
||||
Optional<unsigned> getVScaleRangeMax() const;
|
||||
UWTableKind getUWTableKind() const;
|
||||
std::string getAsString(bool InAttrGrp) const;
|
||||
Type *getAttributeType(Attribute::AttrKind Kind) const;
|
||||
|
||||
|
|
|
@ -205,6 +205,11 @@ Attribute Attribute::getWithInAllocaType(LLVMContext &Context, Type *Ty) {
|
|||
return get(Context, InAlloca, Ty);
|
||||
}
|
||||
|
||||
Attribute Attribute::getWithUWTableKind(LLVMContext &Context,
|
||||
UWTableKind Kind) {
|
||||
return get(Context, UWTable, uint64_t(Kind));
|
||||
}
|
||||
|
||||
Attribute
|
||||
Attribute::getWithAllocSizeArgs(LLVMContext &Context, unsigned ElemSizeArg,
|
||||
const Optional<unsigned> &NumElemsArg) {
|
||||
|
@ -366,6 +371,12 @@ Optional<unsigned> Attribute::getVScaleRangeMax() const {
|
|||
return unpackVScaleRangeArgs(pImpl->getValueAsInt()).second;
|
||||
}
|
||||
|
||||
UWTableKind Attribute::getUWTableKind() const {
|
||||
assert(hasAttribute(Attribute::UWTable) &&
|
||||
"Trying to get unwind table kind from non-uwtable attribute");
|
||||
return UWTableKind(pImpl->getValueAsInt());
|
||||
}
|
||||
|
||||
std::string Attribute::getAsString(bool InAttrGrp) const {
|
||||
if (!pImpl) return {};
|
||||
|
||||
|
@ -426,6 +437,25 @@ std::string Attribute::getAsString(bool InAttrGrp) const {
|
|||
.str();
|
||||
}
|
||||
|
||||
if (hasAttribute(Attribute::UWTable)) {
|
||||
UWTableKind Kind = getUWTableKind();
|
||||
if (Kind != UWTableKind::None) {
|
||||
return Kind == UWTableKind::Default
|
||||
? "uwtable"
|
||||
: ("uwtable(" +
|
||||
Twine(Kind == UWTableKind::Sync ? "sync" : "async") + ")")
|
||||
.str();
|
||||
}
|
||||
|
||||
if (Kind != UWTableKind::None) {
|
||||
if (Kind == UWTableKind::Default)
|
||||
return "uwtable";
|
||||
return ("uwtable(" + Twine(Kind == UWTableKind::Sync ? "sync" : "async") +
|
||||
")")
|
||||
.str();
|
||||
}
|
||||
}
|
||||
|
||||
// Convert target-dependent attributes to strings of the form:
|
||||
//
|
||||
// "kind"
|
||||
|
@ -710,6 +740,10 @@ Optional<unsigned> AttributeSet::getVScaleRangeMax() const {
|
|||
return SetNode ? SetNode->getVScaleRangeMax() : None;
|
||||
}
|
||||
|
||||
UWTableKind AttributeSet::getUWTableKind() const {
|
||||
return SetNode ? SetNode->getUWTableKind() : UWTableKind::None;
|
||||
}
|
||||
|
||||
std::string AttributeSet::getAsString(bool InAttrGrp) const {
|
||||
return SetNode ? SetNode->getAsString(InAttrGrp) : "";
|
||||
}
|
||||
|
@ -876,6 +910,12 @@ Optional<unsigned> AttributeSetNode::getVScaleRangeMax() const {
|
|||
return None;
|
||||
}
|
||||
|
||||
UWTableKind AttributeSetNode::getUWTableKind() const {
|
||||
if (auto A = findEnumAttribute(Attribute::UWTable))
|
||||
return A->getUWTableKind();
|
||||
return UWTableKind::None;
|
||||
}
|
||||
|
||||
std::string AttributeSetNode::getAsString(bool InAttrGrp) const {
|
||||
std::string Str;
|
||||
for (iterator I = begin(), E = end(); I != E; ++I) {
|
||||
|
@ -1428,6 +1468,10 @@ AttributeList::getParamDereferenceableOrNullBytes(unsigned Index) const {
|
|||
return getParamAttrs(Index).getDereferenceableOrNullBytes();
|
||||
}
|
||||
|
||||
UWTableKind AttributeList::getUWTableKind() const {
|
||||
return getFnAttrs().getUWTableKind();
|
||||
}
|
||||
|
||||
std::string AttributeList::getAsString(unsigned Index, bool InAttrGrp) const {
|
||||
return getAttributes(Index).getAsString(InAttrGrp);
|
||||
}
|
||||
|
@ -1649,6 +1693,12 @@ AttrBuilder &AttrBuilder::addVScaleRangeAttrFromRawRepr(uint64_t RawArgs) {
|
|||
return addRawIntAttr(Attribute::VScaleRange, RawArgs);
|
||||
}
|
||||
|
||||
AttrBuilder &AttrBuilder::addUWTableAttr(UWTableKind Kind) {
|
||||
if (Kind == UWTableKind::None)
|
||||
return *this;
|
||||
return addRawIntAttr(Attribute::UWTable, uint64_t(Kind));
|
||||
}
|
||||
|
||||
Type *AttrBuilder::getTypeAttr(Attribute::AttrKind Kind) const {
|
||||
assert(Attribute::isTypeAttrKind(Kind) && "Not a type attribute");
|
||||
Attribute A = getAttribute(Kind);
|
||||
|
|
|
@ -339,8 +339,9 @@ Function *Function::createWithDefaultAttr(FunctionType *Ty,
|
|||
Module *M) {
|
||||
auto *F = new Function(Ty, Linkage, AddrSpace, N, M);
|
||||
AttrBuilder B(F->getContext());
|
||||
if (M->getUwtable())
|
||||
B.addAttribute(Attribute::UWTable);
|
||||
UWTableKind UWTable = M->getUwtable();
|
||||
if (UWTable != UWTableKind::None)
|
||||
B.addUWTableAttr(UWTable);
|
||||
switch (M->getFramePointer()) {
|
||||
case FramePointerKind::None:
|
||||
// 0 ("none") is the default.
|
||||
|
|
|
@ -671,12 +671,15 @@ void Module::setRtLibUseGOT() {
|
|||
addModuleFlag(ModFlagBehavior::Max, "RtLibUseGOT", 1);
|
||||
}
|
||||
|
||||
bool Module::getUwtable() const {
|
||||
auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("uwtable"));
|
||||
return Val && (cast<ConstantInt>(Val->getValue())->getZExtValue() > 0);
|
||||
UWTableKind Module::getUwtable() const {
|
||||
if (auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("uwtable")))
|
||||
return UWTableKind(cast<ConstantInt>(Val->getValue())->getZExtValue());
|
||||
return UWTableKind::None;
|
||||
}
|
||||
|
||||
void Module::setUwtable() { addModuleFlag(ModFlagBehavior::Max, "uwtable", 1); }
|
||||
void Module::setUwtable(UWTableKind Kind) {
|
||||
addModuleFlag(ModFlagBehavior::Max, "uwtable", uint32_t(Kind));
|
||||
}
|
||||
|
||||
FramePointerKind Module::getFramePointer() const {
|
||||
auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("frame-pointer"));
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
|
||||
|
||||
declare void @f0() uwtable
|
||||
declare void @f1() uwtable(sync)
|
||||
declare void @f2() uwtable(async)
|
||||
declare void @f3() uwtable(unsync)
|
||||
; CHECK: :[[#@LINE-1]]:28: error: expected unwind table kind
|
|
@ -0,0 +1,4 @@
|
|||
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
|
||||
|
||||
declare void @f() uwtable(sync x
|
||||
; CHECK: :[[#@LINE-1]]:32: error: expected ')'
|
|
@ -516,6 +516,16 @@ define void @f83(<4 x i8*> align 32 %0, <vscale x 1 x double*> align 64 %1) {
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK: define void @f84() #51
|
||||
define void @f84() uwtable(sync) {
|
||||
ret void;
|
||||
}
|
||||
|
||||
; CHECK: define void @f85() #15
|
||||
define void @f85() uwtable(async) {
|
||||
ret void;
|
||||
}
|
||||
|
||||
; CHECK: attributes #0 = { noreturn }
|
||||
; CHECK: attributes #1 = { nounwind }
|
||||
; CHECK: attributes #2 = { readnone }
|
||||
|
@ -567,4 +577,5 @@ define void @f83(<4 x i8*> align 32 %0, <vscale x 1 x double*> align 64 %1) {
|
|||
; CHECK: attributes #48 = { nosanitize_coverage }
|
||||
; CHECK: attributes #49 = { noprofile }
|
||||
; CHECK: attributes #50 = { disable_sanitizer_instrumentation }
|
||||
; CHECK: attributes #51 = { uwtable(sync) }
|
||||
; CHECK: attributes #[[NOBUILTIN]] = { nobuiltin }
|
||||
|
|
|
@ -137,7 +137,9 @@ attributes #0 = { minsize nofree norecurse nounwind optsize uwtable}
|
|||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
|
||||
; UNWIND-LABEL: FunctionAddress: 0x40
|
||||
; UNWIND: Model: CantUnwind
|
||||
; UNWIND: Opcodes [
|
||||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
|
||||
|
||||
; UNWINND-LABEL: 00000041 {{.*}} OUTLINED_FUNCTION_0
|
||||
; UNWINND-LABEL: 00000001 {{.*}} x
|
||||
|
|
|
@ -154,8 +154,9 @@ attributes #0 = { minsize noinline norecurse nounwind optsize readnone uwtable }
|
|||
; UNWIND-NEXT: 0xAA ; pop {r4, r5, r6, lr}
|
||||
|
||||
; UNWIND-LABEL: FunctionAddress: 0x5C
|
||||
; UNWIND: Model: CantUnwind
|
||||
|
||||
; UNWIND: 0xB4 ; pop ra_auth_code
|
||||
; UNWIND: 0x84 0x00 ; pop {lr}
|
||||
|
||||
; UNWIND-LABEL: 0000005d {{.*}} OUTLINED_FUNCTION_0
|
||||
; UNWIND-LABEL: 00000005 {{.*}} f
|
||||
; UNWIND-LABEL: 00000031 {{.*}} g
|
||||
|
|
|
@ -13,7 +13,7 @@ entry:
|
|||
!llvm.module.flags = !{!0, !1}
|
||||
|
||||
;; Due to -fasynchronous-unwind-tables.
|
||||
!0 = !{i32 7, !"uwtable", i32 1}
|
||||
!0 = !{i32 7, !"uwtable", i32 2}
|
||||
|
||||
;; Due to -fno-omit-frame-pointer.
|
||||
!1 = !{i32 7, !"frame-pointer", i32 2}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define internal fastcc void @no_promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %arg1) #0 {
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@no_promote_avx2
|
||||
; IS________OPM-SAME: (<4 x i64>* nocapture nofree noundef nonnull writeonly align 32 dereferenceable(32) [[ARG:%.*]], <4 x i64>* nocapture nofree noundef nonnull readonly align 32 dereferenceable(32) [[ARG1:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -17,7 +17,7 @@ define internal fastcc void @no_promote_avx2(<4 x i64>* %arg, <4 x i64>* readonl
|
|||
; IS________OPM-NEXT: store <4 x i64> [[TMP]], <4 x i64>* [[ARG]], align 32
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@no_promote_avx2
|
||||
; IS________NPM-SAME: (<4 x i64>* noalias nocapture nofree noundef nonnull writeonly align 32 dereferenceable(32) [[ARG:%.*]], <4 x i64>* noalias nocapture nofree noundef nonnull readonly align 32 dereferenceable(32) [[ARG1:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS________NPM-NEXT: bb:
|
||||
|
@ -32,7 +32,7 @@ bb:
|
|||
}
|
||||
|
||||
define void @no_promote(<4 x i64>* %arg) #1 {
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@no_promote
|
||||
; IS__TUNIT_OPM-SAME: (<4 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -45,7 +45,7 @@ define void @no_promote(<4 x i64>* %arg) #1 {
|
|||
; IS__TUNIT_OPM-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@no_promote
|
||||
; IS__TUNIT_NPM-SAME: (<4 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -58,7 +58,7 @@ define void @no_promote(<4 x i64>* %arg) #1 {
|
|||
; IS__TUNIT_NPM-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly nofree nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@no_promote
|
||||
; IS__CGSCC_OPM-SAME: (<4 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(32) [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -71,7 +71,7 @@ define void @no_promote(<4 x i64>* %arg) #1 {
|
|||
; IS__CGSCC_OPM-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@no_promote
|
||||
; IS__CGSCC_NPM-SAME: (<4 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(32) [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -96,7 +96,7 @@ bb:
|
|||
}
|
||||
|
||||
define internal fastcc void @promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %arg1) #0 {
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@promote_avx2
|
||||
; IS________OPM-SAME: (<4 x i64>* nocapture nofree noundef nonnull writeonly align 32 dereferenceable(32) [[ARG:%.*]], <4 x i64>* nocapture nofree noundef nonnull readonly align 32 dereferenceable(32) [[ARG1:%.*]]) #[[ATTR0]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -104,7 +104,7 @@ define internal fastcc void @promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %
|
|||
; IS________OPM-NEXT: store <4 x i64> [[TMP]], <4 x i64>* [[ARG]], align 32
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@promote_avx2
|
||||
; IS__TUNIT_NPM-SAME: (<4 x i64>* noalias nocapture nofree noundef nonnull writeonly align 32 dereferenceable(32) [[ARG:%.*]], <4 x i64> [[TMP0:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -114,7 +114,7 @@ define internal fastcc void @promote_avx2(<4 x i64>* %arg, <4 x i64>* readonly %
|
|||
; IS__TUNIT_NPM-NEXT: store <4 x i64> [[TMP]], <4 x i64>* [[ARG]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@promote_avx2
|
||||
; IS__CGSCC_NPM-SAME: (<4 x i64>* noalias nocapture nofree noundef nonnull writeonly align 32 dereferenceable(32) [[ARG:%.*]], <4 x i64> [[TMP0:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -131,7 +131,7 @@ bb:
|
|||
}
|
||||
|
||||
define void @promote(<4 x i64>* %arg) #0 {
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@promote
|
||||
; IS__TUNIT_OPM-SAME: (<4 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -144,7 +144,7 @@ define void @promote(<4 x i64>* %arg) #0 {
|
|||
; IS__TUNIT_OPM-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@promote
|
||||
; IS__TUNIT_NPM-SAME: (<4 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -158,7 +158,7 @@ define void @promote(<4 x i64>* %arg) #0 {
|
|||
; IS__TUNIT_NPM-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@promote
|
||||
; IS__CGSCC_OPM-SAME: (<4 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(32) [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -171,7 +171,7 @@ define void @promote(<4 x i64>* %arg) #0 {
|
|||
; IS__CGSCC_OPM-NEXT: store <4 x i64> [[TMP4]], <4 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@promote
|
||||
; IS__CGSCC_NPM-SAME: (<4 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(32) [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -203,14 +203,14 @@ attributes #0 = { inlinehint norecurse nounwind uwtable "target-features"="+avx2
|
|||
attributes #1 = { nounwind uwtable }
|
||||
attributes #2 = { argmemonly nounwind }
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "target-features"="+avx2" }
|
||||
; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "target-features"="+avx2" }
|
||||
; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { nofree nosync nounwind willreturn }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "target-features"="+avx2" }
|
||||
; IS__CGSCC____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "target-features"="+avx2" }
|
||||
; IS__CGSCC____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR3:[0-9]+]] = { willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { nosync nounwind willreturn }
|
||||
|
|
|
@ -11,7 +11,7 @@ target triple = "x86_64-unknown-linux-gnu"
|
|||
; This should promote
|
||||
define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #0 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -19,7 +19,7 @@ define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal5
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -29,7 +29,7 @@ define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal5
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -47,7 +47,7 @@ bb:
|
|||
|
||||
define void @avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>* %arg) #0 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -60,7 +60,7 @@ define void @avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>*
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -74,7 +74,7 @@ define void @avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>*
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -87,7 +87,7 @@ define void @avx512_legal512_prefer512_call_avx512_legal512_prefer512(<8 x i64>*
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer512
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -115,7 +115,7 @@ bb:
|
|||
; This should promote
|
||||
define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #1 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -123,7 +123,7 @@ define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal5
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -133,7 +133,7 @@ define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal5
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -151,7 +151,7 @@ bb:
|
|||
|
||||
define void @avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg) #1 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -164,7 +164,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -178,7 +178,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -191,7 +191,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -219,7 +219,7 @@ bb:
|
|||
; This should promote
|
||||
define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #1 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR1]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -227,7 +227,7 @@ define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal5
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -237,7 +237,7 @@ define internal fastcc void @callee_avx512_legal512_prefer512_call_avx512_legal5
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -255,7 +255,7 @@ bb:
|
|||
|
||||
define void @avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>* %arg) #0 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -268,7 +268,7 @@ define void @avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -282,7 +282,7 @@ define void @avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -295,7 +295,7 @@ define void @avx512_legal512_prefer512_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer512_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -323,7 +323,7 @@ bb:
|
|||
; This should promote
|
||||
define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #0 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR0]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -331,7 +331,7 @@ define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal5
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -341,7 +341,7 @@ define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal5
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -359,7 +359,7 @@ bb:
|
|||
|
||||
define void @avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>* %arg) #1 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -372,7 +372,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>*
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -386,7 +386,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>*
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -399,7 +399,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal512_prefer512(<8 x i64>*
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal512_prefer512
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -427,7 +427,7 @@ bb:
|
|||
; This should not promote
|
||||
define internal fastcc void @callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #1 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR1]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -435,7 +435,7 @@ define internal fastcc void @callee_avx512_legal256_prefer256_call_avx512_legal5
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@callee_avx512_legal256_prefer256_call_avx512_legal512_prefer256
|
||||
; IS________NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS________NPM-NEXT: bb:
|
||||
|
@ -451,7 +451,7 @@ bb:
|
|||
|
||||
define void @avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>* %arg) #2 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx512_legal256_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -464,7 +464,7 @@ define void @avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx512_legal256_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -477,7 +477,7 @@ define void @avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx512_legal256_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -490,7 +490,7 @@ define void @avx512_legal256_prefer256_call_avx512_legal512_prefer256(<8 x i64>*
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx512_legal256_prefer256_call_avx512_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -517,7 +517,7 @@ bb:
|
|||
; This should not promote
|
||||
define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #2 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -525,7 +525,7 @@ define internal fastcc void @callee_avx512_legal512_prefer256_call_avx512_legal2
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@callee_avx512_legal512_prefer256_call_avx512_legal256_prefer256
|
||||
; IS________NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* noalias nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS________NPM-NEXT: bb:
|
||||
|
@ -541,7 +541,7 @@ bb:
|
|||
|
||||
define void @avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>* %arg) #1 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal256_prefer256
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -554,7 +554,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal256_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -567,7 +567,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>*
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal256_prefer256
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -580,7 +580,7 @@ define void @avx512_legal512_prefer256_call_avx512_legal256_prefer256(<8 x i64>*
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx512_legal512_prefer256_call_avx512_legal256_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -607,7 +607,7 @@ bb:
|
|||
; This should promote
|
||||
define internal fastcc void @callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #3 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR3:[0-9]+]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -615,7 +615,7 @@ define internal fastcc void @callee_avx2_legal256_prefer256_call_avx2_legal512_p
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -625,7 +625,7 @@ define internal fastcc void @callee_avx2_legal256_prefer256_call_avx2_legal512_p
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@callee_avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR3:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -643,7 +643,7 @@ bb:
|
|||
|
||||
define void @avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %arg) #4 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -656,7 +656,7 @@ define void @avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %ar
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -670,7 +670,7 @@ define void @avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %ar
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -683,7 +683,7 @@ define void @avx2_legal256_prefer256_call_avx2_legal512_prefer256(<8 x i64>* %ar
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx2_legal256_prefer256_call_avx2_legal512_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -711,7 +711,7 @@ bb:
|
|||
; This should promote
|
||||
define internal fastcc void @callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %arg, <8 x i64>* readonly %arg1) #4 {
|
||||
;
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS________OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64>* nocapture nofree noundef nonnull readonly align 64 dereferenceable(64) [[ARG1:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS________OPM-NEXT: bb:
|
||||
|
@ -719,7 +719,7 @@ define internal fastcc void @callee_avx2_legal512_prefer256_call_avx2_legal256_p
|
|||
; IS________OPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR4]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -729,7 +729,7 @@ define internal fastcc void @callee_avx2_legal512_prefer256_call_avx2_legal256_p
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP]], <8 x i64>* [[ARG]], align 64
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@callee_avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* noalias nocapture nofree noundef nonnull writeonly align 64 dereferenceable(64) [[ARG:%.*]], <8 x i64> [[TMP0:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -747,7 +747,7 @@ bb:
|
|||
|
||||
define void @avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %arg) #3 {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS__TUNIT_OPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR3]] {
|
||||
; IS__TUNIT_OPM-NEXT: bb:
|
||||
|
@ -760,7 +760,7 @@ define void @avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %ar
|
|||
; IS__TUNIT_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS__TUNIT_NPM-SAME: (<8 x i64>* nocapture nofree writeonly [[ARG:%.*]]) #[[ATTR3]] {
|
||||
; IS__TUNIT_NPM-NEXT: bb:
|
||||
|
@ -774,7 +774,7 @@ define void @avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %ar
|
|||
; IS__TUNIT_NPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS__CGSCC_OPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC_OPM-NEXT: bb:
|
||||
|
@ -787,7 +787,7 @@ define void @avx2_legal512_prefer256_call_avx2_legal256_prefer256(<8 x i64>* %ar
|
|||
; IS__CGSCC_OPM-NEXT: store <8 x i64> [[TMP4]], <8 x i64>* [[ARG]], align 2
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@avx2_legal512_prefer256_call_avx2_legal256_prefer256
|
||||
; IS__CGSCC_NPM-SAME: (<8 x i64>* nocapture nofree noundef nonnull writeonly align 2 dereferenceable(64) [[ARG:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
|
@ -822,20 +822,20 @@ attributes #3 = { inlinehint norecurse nounwind uwtable "target-features"="+avx2
|
|||
attributes #4 = { inlinehint norecurse nounwind uwtable "target-features"="+avx2" "min-legal-vector-width"="256" "prefer-vector-width"="256" }
|
||||
attributes #5 = { argmemonly nounwind }
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="512" "target-features"="+avx512vl" }
|
||||
; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="512" "prefer-vector-width"="512" "target-features"="+avx512vl" }
|
||||
; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__TUNIT____: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR6:[0-9]+]] = { willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR7:[0-9]+]] = { nofree nosync nounwind willreturn }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="512" "target-features"="+avx512vl" }
|
||||
; IS__CGSCC____: attributes #[[ATTR1:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__CGSCC____: attributes #[[ATTR2:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__CGSCC____: attributes #[[ATTR3:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__CGSCC____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="512" "prefer-vector-width"="512" "target-features"="+avx512vl" }
|
||||
; IS__CGSCC____: attributes #[[ATTR1:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__CGSCC____: attributes #[[ATTR2:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx512vl" }
|
||||
; IS__CGSCC____: attributes #[[ATTR3:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind willreturn uwtable "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx2" }
|
||||
; IS__CGSCC____: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR6:[0-9]+]] = { willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR7:[0-9]+]] = { nosync nounwind willreturn }
|
||||
|
|
|
@ -18,7 +18,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|||
; CHECK: @[[CND:[a-zA-Z0-9_$"\\.-]+]] = external global i1
|
||||
;.
|
||||
define i32* @test1(i32* align 8 %0) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@test1
|
||||
; CHECK-SAME: (i32* nofree readnone returned align 8 "no-capture-maybe-returned" [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: ret i32* [[TMP0]]
|
||||
|
@ -28,7 +28,7 @@ define i32* @test1(i32* align 8 %0) #0 {
|
|||
|
||||
; TEST 2
|
||||
define i32* @test2(i32* %0) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@test2
|
||||
; CHECK-SAME: (i32* nofree readnone returned "no-capture-maybe-returned" [[TMP0:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret i32* [[TMP0]]
|
||||
|
@ -38,7 +38,7 @@ define i32* @test2(i32* %0) #0 {
|
|||
|
||||
; TEST 3
|
||||
define i32* @test3(i32* align 8 %0, i32* align 4 %1, i1 %2) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@test3
|
||||
; CHECK-SAME: (i32* nofree readnone align 8 "no-capture-maybe-returned" [[TMP0:%.*]], i32* nofree readnone align 4 "no-capture-maybe-returned" [[TMP1:%.*]], i1 [[TMP2:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TMP2]], i32* [[TMP0]], i32* [[TMP1]]
|
||||
|
@ -50,7 +50,7 @@ define i32* @test3(i32* align 8 %0, i32* align 4 %1, i1 %2) #0 {
|
|||
|
||||
; TEST 4
|
||||
define i32* @test4(i32* align 32 %0, i32* align 32 %1, i1 %2) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@test4
|
||||
; CHECK-SAME: (i32* nofree readnone align 32 "no-capture-maybe-returned" [[TMP0:%.*]], i32* nofree readnone align 32 "no-capture-maybe-returned" [[TMP1:%.*]], i1 [[TMP2:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: [[RET:%.*]] = select i1 [[TMP2]], i32* [[TMP0]], i32* [[TMP1]]
|
||||
|
@ -86,12 +86,12 @@ define i32* @test5_2() {
|
|||
; TEST 6
|
||||
; SCC
|
||||
define i32* @test6_1() #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test6_1
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR1:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32* undef
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test6_1
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret i32* undef
|
||||
|
@ -101,12 +101,12 @@ define i32* @test6_1() #0 {
|
|||
}
|
||||
|
||||
define i32* @test6_2() #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test6_2
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR1]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32* undef
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test6_2
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret i32* undef
|
||||
|
@ -135,7 +135,7 @@ define i32* @test6_2() #0 {
|
|||
|
||||
; Function Attrs: nounwind readnone ssp uwtable
|
||||
define internal i8* @f1(i8* readnone %0) local_unnamed_addr #0 {
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS__CGSCC_OPM-SAME: (i8* noalias nocapture nofree nonnull readnone align 8 dereferenceable(1) [[TMP0:%.*]]) local_unnamed_addr #[[ATTR0]] {
|
||||
; IS__CGSCC_OPM-NEXT: br label [[TMP3:%.*]]
|
||||
|
@ -144,7 +144,7 @@ define internal i8* @f1(i8* readnone %0) local_unnamed_addr #0 {
|
|||
; IS__CGSCC_OPM: 3:
|
||||
; IS__CGSCC_OPM-NEXT: ret i8* undef
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS__CGSCC_NPM-SAME: () local_unnamed_addr #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: br label [[TMP2:%.*]]
|
||||
|
@ -242,7 +242,7 @@ define internal i8* @f3(i8* readnone %0) local_unnamed_addr #0 {
|
|||
; TEST 7
|
||||
; Better than IR information
|
||||
define align 4 i8* @test7() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@test7
|
||||
; CHECK-SAME: () #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret i8* @a1
|
||||
|
@ -254,7 +254,7 @@ define align 4 i8* @test7() #0 {
|
|||
; TEST 7b
|
||||
; Function Attrs: nounwind readnone ssp uwtable
|
||||
define internal i8* @f1b(i8* readnone %0) local_unnamed_addr #0 {
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@f1b
|
||||
; IS__CGSCC_OPM-SAME: (i8* noalias nocapture nofree nonnull readnone align 8 dereferenceable(1) [[TMP0:%.*]]) local_unnamed_addr #[[ATTR0]] {
|
||||
; IS__CGSCC_OPM-NEXT: br label [[TMP3:%.*]]
|
||||
|
@ -263,7 +263,7 @@ define internal i8* @f1b(i8* readnone %0) local_unnamed_addr #0 {
|
|||
; IS__CGSCC_OPM: 3:
|
||||
; IS__CGSCC_OPM-NEXT: ret i8* undef
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f1b
|
||||
; IS__CGSCC_NPM-SAME: () local_unnamed_addr #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: br label [[TMP2:%.*]]
|
||||
|
@ -362,7 +362,7 @@ define internal i8* @f3b(i8* readnone %0) local_unnamed_addr #0 {
|
|||
}
|
||||
|
||||
define align 4 i32* @test7b(i32* align 32 %p) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@test7b
|
||||
; CHECK-SAME: (i32* nofree readnone returned align 32 "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret i32* [[P]]
|
||||
|
@ -738,7 +738,7 @@ define void @test12-6(i32* align 4 %p) {
|
|||
}
|
||||
|
||||
define void @test13(i1 %c, i32* align 32 %dst) #0 {
|
||||
; NOT_CGSCC_OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; NOT_CGSCC_OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; NOT_CGSCC_OPM-LABEL: define {{[^@]+}}@test13
|
||||
; NOT_CGSCC_OPM-SAME: (i1 [[C:%.*]], i32* nocapture nofree writeonly align 32 [[DST:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; NOT_CGSCC_OPM-NEXT: br i1 [[C]], label [[TRUEBB:%.*]], label [[FALSEBB:%.*]]
|
||||
|
@ -751,7 +751,7 @@ define void @test13(i1 %c, i32* align 32 %dst) #0 {
|
|||
; NOT_CGSCC_OPM-NEXT: store i32 0, i32* [[PTR]], align 32
|
||||
; NOT_CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@test13
|
||||
; IS__CGSCC_OPM-SAME: (i1 [[C:%.*]], i32* nocapture nofree writeonly align 32 [[DST:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-NEXT: br i1 [[C]], label [[TRUEBB:%.*]], label [[FALSEBB:%.*]]
|
||||
|
@ -1103,41 +1103,41 @@ attributes #0 = { nounwind uwtable noinline }
|
|||
attributes #1 = { uwtable noinline }
|
||||
attributes #2 = { null_pointer_is_valid }
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR2]] = { nounwind }
|
||||
; IS__TUNIT____: attributes #[[ATTR3]] = { nofree nosync nounwind }
|
||||
; IS__TUNIT____: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR5]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR6]] = { nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR7]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR7]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR10]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR11]] = { nofree nosync nounwind readonly willreturn }
|
||||
;.
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { nofree nosync nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR6]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12]] = { readonly willreturn }
|
||||
;.
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree nosync nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6]] = { nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR10]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
|
|
|
@ -57,7 +57,7 @@ define i32 @range_use1() #0 {
|
|||
; CHECK_DISABLED_FUNCTION-NEXT: [[TMP1:%.*]] = call i32 @range_test(i32 123)
|
||||
; CHECK_DISABLED_FUNCTION-NEXT: ret i32 [[TMP1]]
|
||||
;
|
||||
; CHECK_ENABLED_FUNCTION: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK_ENABLED_FUNCTION: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK_ENABLED_FUNCTION-LABEL: define {{[^@]+}}@range_use1
|
||||
; CHECK_ENABLED_FUNCTION-SAME: () #[[ATTR1:[0-9]+]] {
|
||||
; CHECK_ENABLED_FUNCTION-NEXT: ret i32 1
|
||||
|
@ -105,6 +105,6 @@ attributes #0 = { nounwind uwtable noinline }
|
|||
; CHECK_DISABLED_FUNCTION: attributes #[[ATTR0]] = { noinline nounwind uwtable }
|
||||
;.
|
||||
; CHECK_ENABLED_FUNCTION: attributes #[[ATTR0]] = { noinline nounwind readnone uwtable }
|
||||
; CHECK_ENABLED_FUNCTION: attributes #[[ATTR1]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; CHECK_ENABLED_FUNCTION: attributes #[[ATTR1]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; CHECK_ENABLED_FUNCTION: attributes #[[ATTR2]] = { noinline nounwind uwtable }
|
||||
;.
|
||||
|
|
|
@ -154,10 +154,10 @@ attributes #0 = { noinline nounwind sspstrong uwtable}
|
|||
; IS__TUNIT_____: !0 = !{i32 0, i32 101}
|
||||
; IS__TUNIT_____: !1 = !{i32 100, i32 201}
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { readnone willreturn }
|
||||
;.
|
||||
; CHECK: [[RNG0]] = !{i32 0, i32 101}
|
||||
|
|
|
@ -157,10 +157,10 @@ attributes #0 = { noinline nounwind sspstrong uwtable}
|
|||
; IS__TUNIT_____: !0 = !{i32 0, i32 101}
|
||||
; IS__TUNIT_____: !1 = !{i32 100, i32 201}
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone sspstrong willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { readnone willreturn }
|
||||
;.
|
||||
; CHECK: [[RNG0]] = !{i32 0, i32 101}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
||||
|
||||
define dso_local i32 @visible(i32* noalias %A, i32* noalias %B) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@visible
|
||||
; IS__TUNIT____-SAME: (i32* noalias nocapture nofree readonly align 4 [[A:%.*]], i32* noalias nocapture nofree readonly align 4 [[B:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
|
@ -14,7 +14,7 @@ define dso_local i32 @visible(i32* noalias %A, i32* noalias %B) #0 {
|
|||
; IS__TUNIT____-NEXT: [[ADD:%.*]] = add nsw i32 [[CALL1]], [[CALL2]]
|
||||
; IS__TUNIT____-NEXT: ret i32 [[ADD]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@visible
|
||||
; IS__CGSCC____-SAME: (i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -31,7 +31,7 @@ entry:
|
|||
}
|
||||
|
||||
define private i32 @noalias_args(i32* %A, i32* %B) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@noalias_args
|
||||
; IS__TUNIT____-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
|
@ -42,7 +42,7 @@ define private i32 @noalias_args(i32* %A, i32* %B) #0 {
|
|||
; IS__TUNIT____-NEXT: [[ADD2:%.*]] = add nsw i32 [[ADD]], [[CALL]]
|
||||
; IS__TUNIT____-NEXT: ret i32 [[ADD2]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@noalias_args
|
||||
; IS__CGSCC____-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -64,7 +64,7 @@ entry:
|
|||
|
||||
|
||||
define internal i32 @noalias_args_argmem(i32* %A, i32* %B) #1 {
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@noalias_args_argmem
|
||||
; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]], i32* noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -81,7 +81,7 @@ entry:
|
|||
}
|
||||
|
||||
define dso_local i32 @visible_local(i32* %A) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@visible_local
|
||||
; IS__TUNIT____-SAME: (i32* nocapture nofree readonly [[A:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
|
@ -92,7 +92,7 @@ define dso_local i32 @visible_local(i32* %A) #0 {
|
|||
; IS__TUNIT____-NEXT: [[ADD:%.*]] = add nsw i32 [[CALL1]], [[CALL2]]
|
||||
; IS__TUNIT____-NEXT: ret i32 [[ADD]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@visible_local
|
||||
; IS__CGSCC____-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -113,7 +113,7 @@ entry:
|
|||
}
|
||||
|
||||
define internal i32 @noalias_args_argmem_ro(i32* %A, i32* %B) #1 {
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@noalias_args_argmem_ro
|
||||
; IS__CGSCC____-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: ret i32 undef
|
||||
|
@ -144,7 +144,7 @@ define i32 @visible_local_2() {
|
|||
}
|
||||
|
||||
define internal i32 @noalias_args_argmem_rn(i32* %A, i32* %B) #1 {
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@noalias_args_argmem_rn
|
||||
; CHECK-SAME: (i32* noalias nocapture nofree noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; CHECK-NEXT: [[T0:%.*]] = load i32, i32* [[B]], align 4
|
||||
|
@ -182,15 +182,15 @@ define i32 @visible_local_3() {
|
|||
attributes #0 = { noinline nounwind uwtable willreturn }
|
||||
attributes #1 = { argmemonly noinline nounwind uwtable willreturn}
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR3]] = { nofree nosync nounwind readonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR4]] = { nofree nosync nounwind willreturn }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR2]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR2]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR4]] = { nounwind readonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { nosync nounwind readonly }
|
||||
|
|
|
@ -71,13 +71,13 @@ define internal i32 @dead_internal_func(i32 %0) {
|
|||
}
|
||||
|
||||
define i32 @volatile_load(i32*) norecurse nounwind uwtable {
|
||||
; NOT_CGSCC_NPM: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@volatile_load
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree align 4 [[TMP0:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP2:%.*]] = load volatile i32, i32* [[TMP0]], align 4
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32 [[TMP2]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@volatile_load
|
||||
; IS__CGSCC____-SAME: (i32* nofree align 4 [[TMP0:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: [[TMP2:%.*]] = load volatile i32, i32* [[TMP0]], align 4
|
||||
|
@ -88,7 +88,7 @@ define i32 @volatile_load(i32*) norecurse nounwind uwtable {
|
|||
}
|
||||
|
||||
define internal i32 @internal_load(i32*) norecurse nounwind uwtable {
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@internal_load
|
||||
; IS__CGSCC____-SAME: () #[[ATTR8:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: ret i32 undef
|
||||
|
@ -2666,7 +2666,7 @@ declare void @llvm.lifetime.end.p0i8(i64 %0, i8* %1)
|
|||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { noreturn nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { noreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR5]] = { nosync readnone }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6]] = { argmemonly nofree norecurse nounwind uwtable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6]] = { argmemonly nofree norecurse nounwind willreturn uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR7:[0-9]+]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR8]] = { nofree norecurse noreturn nosync nounwind readnone }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9]] = { nofree nosync nounwind readnone willreturn }
|
||||
|
@ -2683,8 +2683,8 @@ declare void @llvm.lifetime.end.p0i8(i64 %0, i8* %1)
|
|||
; IS__CGSCC____: attributes #[[ATTR4]] = { noreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { nosync readnone }
|
||||
; IS__CGSCC____: attributes #[[ATTR6]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR7]] = { argmemonly nofree norecurse nounwind uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR7]] = { argmemonly nofree norecurse nounwind willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR9]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR10]] = { nofree norecurse noreturn nosync nounwind readnone }
|
||||
; IS__CGSCC____: attributes #[[ATTR11]] = { nofree nosync nounwind readnone willreturn }
|
||||
|
|
|
@ -18,7 +18,7 @@ declare i32* @unknown()
|
|||
;
|
||||
; no-capture is missing on %p because it is not dereferenceable
|
||||
define i32 @is_null_return(i32* %p) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@is_null_return
|
||||
; CHECK-SAME: (i32* nofree readnone [[P:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -44,7 +44,7 @@ entry:
|
|||
;
|
||||
; no-capture is missing on %p because it is not dereferenceable
|
||||
define i32 @is_null_control(i32* %p) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@is_null_control
|
||||
; CHECK-SAME: (i32* nofree [[P:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -101,7 +101,7 @@ return: ; preds = %if.end3, %if.then2,
|
|||
; }
|
||||
;
|
||||
define double* @srec0(double* %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@srec0
|
||||
; CHECK-SAME: (double* nocapture nofree readnone [[A:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -126,7 +126,7 @@ entry:
|
|||
; Other arguments are possible here due to the no-return behavior.
|
||||
;
|
||||
define i32* @srec16(i32* %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@srec16
|
||||
; CHECK-SAME: (i32* nocapture nofree readnone [[A:%.*]]) #[[ATTR1]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -362,7 +362,7 @@ declare i32 @printf(i8* nocapture, ...)
|
|||
;
|
||||
; There should *not* be a no-capture attribute on %a
|
||||
define i64* @not_captured_but_returned_0(i64* %a) #0 {
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@not_captured_but_returned_0
|
||||
; CHECK-SAME: (i64* nofree noundef nonnull returned writeonly align 8 dereferenceable(8) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -383,7 +383,7 @@ entry:
|
|||
;
|
||||
; There should *not* be a no-capture attribute on %a
|
||||
define i64* @not_captured_but_returned_1(i64* %a) #0 {
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; CHECK: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@not_captured_but_returned_1
|
||||
; CHECK-SAME: (i64* nofree nonnull writeonly align 8 dereferenceable(16) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR4]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -405,7 +405,7 @@ entry:
|
|||
; }
|
||||
;
|
||||
define void @test_not_captured_but_returned_calls(i64* %a) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@test_not_captured_but_returned_calls
|
||||
; IS__TUNIT____-SAME: (i64* nocapture nofree writeonly align 8 [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
|
@ -413,7 +413,7 @@ define void @test_not_captured_but_returned_calls(i64* %a) #0 {
|
|||
; IS__TUNIT____-NEXT: [[CALL1:%.*]] = call i64* @not_captured_but_returned_1(i64* nofree writeonly align 8 "no-capture-maybe-returned" [[A]]) #[[ATTR9]]
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@test_not_captured_but_returned_calls
|
||||
; IS__CGSCC____-SAME: (i64* nocapture nofree noundef nonnull writeonly align 8 dereferenceable(16) [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -435,14 +435,14 @@ entry:
|
|||
;
|
||||
; There should *not* be a no-capture attribute on %a
|
||||
define i64* @negative_test_not_captured_but_returned_call_0a(i64* %a) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_0a
|
||||
; IS__TUNIT____-SAME: (i64* nofree returned writeonly align 8 "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
; IS__TUNIT____-NEXT: [[CALL:%.*]] = call i64* @not_captured_but_returned_0(i64* nofree writeonly align 8 "no-capture-maybe-returned" [[A]]) #[[ATTR9]]
|
||||
; IS__TUNIT____-NEXT: ret i64* [[A]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_0a
|
||||
; IS__CGSCC____-SAME: (i64* nofree noundef nonnull returned writeonly align 8 dereferenceable(8) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -462,7 +462,7 @@ entry:
|
|||
;
|
||||
; There should *not* be a no-capture attribute on %a
|
||||
define void @negative_test_not_captured_but_returned_call_0b(i64* %a) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_0b
|
||||
; IS__TUNIT____-SAME: (i64* nofree writeonly align 8 [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
|
@ -471,7 +471,7 @@ define void @negative_test_not_captured_but_returned_call_0b(i64* %a) #0 {
|
|||
; IS__TUNIT____-NEXT: store i64 [[TMP0]], i64* [[A]], align 8
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_0b
|
||||
; IS__CGSCC____-SAME: (i64* nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -495,14 +495,14 @@ entry:
|
|||
;
|
||||
; There should *not* be a no-capture attribute on %a
|
||||
define i64* @negative_test_not_captured_but_returned_call_1a(i64* %a) #0 {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_1a
|
||||
; IS__TUNIT____-SAME: (i64* nofree writeonly align 8 "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
; IS__TUNIT____-NEXT: [[CALL:%.*]] = call noundef nonnull align 8 dereferenceable(8) i64* @not_captured_but_returned_1(i64* nofree writeonly align 8 "no-capture-maybe-returned" [[A]]) #[[ATTR9]]
|
||||
; IS__TUNIT____-NEXT: ret i64* [[CALL]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_1a
|
||||
; IS__CGSCC____-SAME: (i64* nofree noundef nonnull writeonly align 8 dereferenceable(16) "no-capture-maybe-returned" [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -522,7 +522,7 @@ entry:
|
|||
;
|
||||
; There should *not* be a no-capture attribute on %a
|
||||
define void @negative_test_not_captured_but_returned_call_1b(i64* %a) #0 {
|
||||
; IS__TUNIT____: Function Attrs: nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_1b
|
||||
; IS__TUNIT____-SAME: (i64* nofree writeonly align 8 [[A:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
|
@ -531,7 +531,7 @@ define void @negative_test_not_captured_but_returned_call_1b(i64* %a) #0 {
|
|||
; IS__TUNIT____-NEXT: store i64 [[TMP0]], i64* [[CALL]], align 8
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@negative_test_not_captured_but_returned_call_1b
|
||||
; IS__CGSCC____-SAME: (i64* nofree noundef nonnull writeonly align 8 dereferenceable(16) [[A:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -725,23 +725,23 @@ entry:
|
|||
|
||||
attributes #0 = { noinline nounwind uwtable }
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR2]] = { nofree nosync nounwind readnone }
|
||||
; IS__TUNIT____: attributes #[[ATTR3]] = { noinline nounwind uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR4]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR5]] = { nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR4]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR5]] = { nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR6]] = { readonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR7]] = { noinline nounwind readonly uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR8]] = { nounwind readonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR9]] = { nofree nosync nounwind willreturn writeonly }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR2]] = { nofree nosync nounwind readnone }
|
||||
; IS__CGSCC____: attributes #[[ATTR3]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR4]] = { argmemonly nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { nofree noinline norecurse nosync nounwind uwtable willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR4]] = { argmemonly nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { nofree noinline norecurse nosync nounwind willreturn writeonly uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR6]] = { readonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR7]] = { noinline nounwind readonly uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR8]] = { nounwind readonly }
|
||||
|
|
|
@ -17,7 +17,7 @@ declare void @_ZdaPv(i8*) local_unnamed_addr #2
|
|||
|
||||
; TEST 1 (positive case)
|
||||
define void @only_return() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@only_return
|
||||
; CHECK-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; CHECK-NEXT: ret void
|
||||
|
@ -106,12 +106,12 @@ end:
|
|||
|
||||
|
||||
define void @mutual_recursion1() #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@mutual_recursion1
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@mutual_recursion1
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
|
@ -121,12 +121,12 @@ define void @mutual_recursion1() #0 {
|
|||
}
|
||||
|
||||
define void @mutual_recursion2() #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@mutual_recursion2
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@mutual_recursion2
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
|
@ -189,12 +189,12 @@ define noalias i8* @call_realloc(i8* nocapture %0, i64 %1) local_unnamed_addr #0
|
|||
declare void @nofree_function() nofree readnone #0
|
||||
|
||||
define void @call_nofree_function() #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@call_nofree_function
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@call_nofree_function
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR5:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
|
@ -247,12 +247,12 @@ define void @call_both() #0 {
|
|||
declare float @llvm.floor.f32(float)
|
||||
|
||||
define void @call_floor(float %a) #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor
|
||||
; NOT_CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor
|
||||
; IS__CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
|
@ -262,13 +262,13 @@ define void @call_floor(float %a) #0 {
|
|||
}
|
||||
|
||||
define float @call_floor2(float %a) #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; NOT_CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR11:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret float [[C]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; IS__CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR11:[0-9]+]]
|
||||
|
@ -282,12 +282,12 @@ define float @call_floor2(float %a) #0 {
|
|||
; Check propagation.
|
||||
|
||||
define void @f1() #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f1
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
|
@ -297,12 +297,12 @@ define void @f1() #0 {
|
|||
}
|
||||
|
||||
define void @f2() #0 {
|
||||
; IS__TUNIT____: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__TUNIT____: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@f2
|
||||
; IS__TUNIT____-SAME: () #[[ATTR4]] {
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@f2
|
||||
; IS__CGSCC____-SAME: () #[[ATTR3]] {
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
|
@ -453,8 +453,8 @@ attributes #2 = { nobuiltin nounwind }
|
|||
; NOT_CGSCC_NPM: attributes #[[ATTR0]] = { nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR1]] = { noinline nounwind uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR2]] = { nobuiltin nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR5:[0-9]+]] = { nofree noinline nounwind readnone uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR7]] = { nofree nounwind }
|
||||
|
@ -467,9 +467,9 @@ attributes #2 = { nobuiltin nounwind }
|
|||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { nobuiltin nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4:[0-9]+]] = { nofree noinline nounwind readnone uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8:[0-9]+]] = { nobuiltin nofree nounwind }
|
||||
|
|
|
@ -17,7 +17,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|||
; }
|
||||
;
|
||||
define void @srec0() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@srec0
|
||||
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -36,7 +36,7 @@ entry:
|
|||
; }
|
||||
;
|
||||
define i32 @srec16(i32 %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline noreturn nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline noreturn nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@srec16
|
||||
; CHECK-SAME: (i32 [[A:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -128,7 +128,7 @@ return: ; No predecessors!
|
|||
; }
|
||||
;
|
||||
define i32 @multiple_noreturn_calls(i32 %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse noreturn nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse noreturn nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@multiple_noreturn_calls
|
||||
; CHECK-SAME: (i32 [[A:%.*]]) #[[ATTR3:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -192,9 +192,9 @@ entry:
|
|||
|
||||
attributes #0 = { noinline nounwind uwtable }
|
||||
;.
|
||||
; CHECK: attributes #[[ATTR0]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; CHECK: attributes #[[ATTR1]] = { nofree noinline noreturn nosync nounwind readnone uwtable willreturn }
|
||||
; CHECK: attributes #[[ATTR0]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; CHECK: attributes #[[ATTR1]] = { nofree noinline noreturn nosync nounwind readnone willreturn uwtable }
|
||||
; CHECK: attributes #[[ATTR2]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; CHECK: attributes #[[ATTR3]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable willreturn }
|
||||
; CHECK: attributes #[[ATTR3]] = { nofree noinline norecurse noreturn nosync nounwind readnone willreturn uwtable }
|
||||
; CHECK: attributes #[[ATTR4]] = { nofree norecurse noreturn nosync nounwind readnone willreturn }
|
||||
;.
|
||||
|
|
|
@ -32,7 +32,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|||
; CHECK: @[[A:[a-zA-Z0-9_$"\\.-]+]] = common global i32 0, align 4
|
||||
;.
|
||||
define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp {
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind optsize readnone ssp uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind optsize readnone ssp willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@foo
|
||||
; CHECK-SAME: (%struct.ST* nofree readnone "no-capture-maybe-returned" [[S:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -52,7 +52,7 @@ entry:
|
|||
; }
|
||||
|
||||
define i32 @load_monotonic(i32* nocapture readonly %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nosync nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@load_monotonic
|
||||
; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[TMP0:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load atomic i32, i32* [[TMP0]] monotonic, align 4
|
||||
|
@ -70,7 +70,7 @@ define i32 @load_monotonic(i32* nocapture readonly %0) norecurse nounwind uwtabl
|
|||
; }
|
||||
|
||||
define void @store_monotonic(i32* nocapture %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nosync nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@store_monotonic
|
||||
; CHECK-SAME: (i32* nocapture nofree noundef nonnull writeonly align 4 dereferenceable(4) [[TMP0:%.*]]) #[[ATTR1]] {
|
||||
; CHECK-NEXT: store atomic i32 10, i32* [[TMP0]] monotonic, align 4
|
||||
|
@ -88,7 +88,7 @@ define void @store_monotonic(i32* nocapture %0) norecurse nounwind uwtable {
|
|||
; }
|
||||
|
||||
define i32 @load_acquire(i32* nocapture readonly %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@load_acquire
|
||||
; CHECK-SAME: (i32* nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[TMP0:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load atomic i32, i32* [[TMP0]] acquire, align 4
|
||||
|
@ -105,7 +105,7 @@ define i32 @load_acquire(i32* nocapture readonly %0) norecurse nounwind uwtable
|
|||
; }
|
||||
|
||||
define void @load_release(i32* nocapture %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@load_release
|
||||
; CHECK-SAME: (i32* nocapture nofree noundef writeonly align 4 [[TMP0:%.*]]) #[[ATTR2]] {
|
||||
; CHECK-NEXT: store atomic volatile i32 10, i32* [[TMP0]] release, align 4
|
||||
|
@ -118,7 +118,7 @@ define void @load_release(i32* nocapture %0) norecurse nounwind uwtable {
|
|||
; TEST 6 - negative volatile, relaxed atomic
|
||||
|
||||
define void @load_volatile_release(i32* nocapture %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@load_volatile_release
|
||||
; CHECK-SAME: (i32* nocapture nofree noundef writeonly align 4 [[TMP0:%.*]]) #[[ATTR2]] {
|
||||
; CHECK-NEXT: store atomic volatile i32 10, i32* [[TMP0]] release, align 4
|
||||
|
@ -135,7 +135,7 @@ define void @load_volatile_release(i32* nocapture %0) norecurse nounwind uwtable
|
|||
; }
|
||||
|
||||
define void @volatile_store(i32* %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@volatile_store
|
||||
; CHECK-SAME: (i32* nofree noundef align 4 [[TMP0:%.*]]) #[[ATTR2]] {
|
||||
; CHECK-NEXT: store volatile i32 14, i32* [[TMP0]], align 4
|
||||
|
@ -153,7 +153,7 @@ define void @volatile_store(i32* %0) norecurse nounwind uwtable {
|
|||
; }
|
||||
|
||||
define i32 @volatile_load(i32* %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@volatile_load
|
||||
; CHECK-SAME: (i32* nofree noundef align 4 [[TMP0:%.*]]) #[[ATTR2]] {
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load volatile i32, i32* [[TMP0]], align 4
|
||||
|
@ -470,9 +470,9 @@ define float @cos_test2(float %x) {
|
|||
ret float %c
|
||||
}
|
||||
;.
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind optsize readnone ssp uwtable willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind uwtable willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nounwind uwtable willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind optsize readnone ssp willreturn uwtable }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind willreturn uwtable }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nounwind willreturn uwtable }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR3]] = { noinline nosync nounwind uwtable }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR4]] = { noinline nounwind uwtable }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR5]] = { argmemonly nofree noinline nounwind uwtable }
|
||||
|
@ -493,9 +493,9 @@ define float @cos_test2(float %x) {
|
|||
; NOT_CGSCC_OPM: attributes #[[ATTR20]] = { willreturn writeonly }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR21]] = { readnone willreturn }
|
||||
;.
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind optsize readnone ssp uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nounwind uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind optsize readnone ssp willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nounwind willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { noinline nosync nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { argmemonly nofree noinline nounwind uwtable }
|
||||
|
|
|
@ -43,7 +43,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|||
; CHECK: @[[_ZTI1Y:[a-zA-Z0-9_$"\\.-]+]] = external dso_local constant { i8*, i8*, i8* }, align 8
|
||||
;.
|
||||
define i32 @sink_r0(i32 %r) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@sink_r0
|
||||
; CHECK-SAME: (i32 returned [[R:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -61,7 +61,7 @@ define i32 @scc_r1(i32 %a, i32 %r, i32 %b) #0 {
|
|||
; IS__TUNIT____-NEXT: [[CALL1:%.*]] = call i32 @scc_r2(i32 [[R]], i32 [[A]], i32 [[R]]) #[[ATTR10:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: ret i32 [[R]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@scc_r1
|
||||
; IS__CGSCC____-SAME: (i32 [[A:%.*]], i32 returned [[R:%.*]], i32 [[B:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -110,7 +110,7 @@ define i32 @scc_r2(i32 %a, i32 %b, i32 %r) #0 {
|
|||
; IS__TUNIT____-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[R]], [[IF_THEN]] ], [ [[R]], [[IF_THEN3]] ], [ [[COND]], [[COND_END]] ]
|
||||
; IS__TUNIT____-NEXT: ret i32 [[R]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@scc_r2
|
||||
; IS__CGSCC____-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 returned [[R:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -225,7 +225,7 @@ define i32 @scc_rX(i32 %a, i32 %b, i32 %r) #0 {
|
|||
; IS__TUNIT____-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[R]], [[IF_THEN]] ], [ [[B]], [[IF_THEN3]] ], [ [[COND]], [[COND_END]] ]
|
||||
; IS__TUNIT____-NEXT: ret i32 [[RETVAL_0]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@scc_rX
|
||||
; IS__CGSCC____-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32 [[R:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -318,7 +318,7 @@ return: ; preds = %cond.end, %if.then3
|
|||
; return a == b ? r : ptr_scc_r2(a, b, r);
|
||||
; }
|
||||
define double* @ptr_sink_r0(double* %r) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@ptr_sink_r0
|
||||
; CHECK-SAME: (double* nofree readnone returned "no-capture-maybe-returned" [[R:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -501,13 +501,13 @@ entry:
|
|||
; }
|
||||
;
|
||||
define i32* @rt1(i32* %a) #0 {
|
||||
; IS__TUNIT____: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__TUNIT____: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@rt1
|
||||
; IS__TUNIT____-SAME: (i32* nocapture nofree nonnull readnone align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
; IS__TUNIT____-NEXT: ret i32* undef
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@rt1
|
||||
; IS__CGSCC____-SAME: (i32* nocapture nofree nonnull readnone align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
|
@ -784,7 +784,7 @@ entry:
|
|||
; }
|
||||
;
|
||||
define double @select_and_phi(double %b) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@select_and_phi
|
||||
; CHECK-SAME: (double returned [[B:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -870,7 +870,7 @@ if.end: ; preds = %if.then, %entry
|
|||
; }
|
||||
;
|
||||
define double* @bitcast(i32* %b) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@bitcast
|
||||
; CHECK-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[B:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -893,7 +893,7 @@ entry:
|
|||
; }
|
||||
;
|
||||
define double* @bitcasts_select_and_phi(i32* %b) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@bitcasts_select_and_phi
|
||||
; CHECK-SAME: (i32* nofree readnone [[B:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -943,7 +943,7 @@ if.end: ; preds = %if.then, %entry
|
|||
; }
|
||||
;
|
||||
define double* @ret_arg_arg_undef(i32* %b) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@ret_arg_arg_undef
|
||||
; CHECK-SAME: (i32* nofree readnone [[B:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -991,7 +991,7 @@ ret_undef:
|
|||
; }
|
||||
;
|
||||
define double* @ret_undef_arg_arg(i32* %b) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@ret_undef_arg_arg
|
||||
; CHECK-SAME: (i32* nofree readnone [[B:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -1039,7 +1039,7 @@ ret_arg1:
|
|||
; }
|
||||
;
|
||||
define double* @ret_undef_arg_undef(i32* %b) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@ret_undef_arg_undef
|
||||
; CHECK-SAME: (i32* nofree readnone [[B:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -1172,7 +1172,7 @@ r:
|
|||
; TEST inconsistent IR in dead code.
|
||||
;
|
||||
define i32 @deadblockcall1(i32 %A) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@deadblockcall1
|
||||
; CHECK-SAME: (i32 returned [[A:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -1190,7 +1190,7 @@ unreachableblock:
|
|||
declare i32 @deadblockcall_helper(i32 returned %A);
|
||||
|
||||
define i32 @deadblockcall2(i32 %A) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@deadblockcall2
|
||||
; CHECK-SAME: (i32 returned [[A:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -1211,7 +1211,7 @@ unreachableblock2:
|
|||
}
|
||||
|
||||
define i32 @deadblockphi1(i32 %A) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@deadblockphi1
|
||||
; CHECK-SAME: (i32 returned [[A:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -1237,7 +1237,7 @@ r:
|
|||
}
|
||||
|
||||
define i32 @deadblockphi2(i32 %A) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@deadblockphi2
|
||||
; CHECK-SAME: (i32 returned [[A:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
@ -1404,7 +1404,7 @@ define i32 @exact(i32* align 8 %a, i32* align 8 %b) {
|
|||
|
||||
@G = external global i8
|
||||
define i32* @ret_const() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@ret_const
|
||||
; CHECK-SAME: () #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret i32* bitcast (i8* @G to i32*)
|
||||
|
@ -1413,7 +1413,7 @@ define i32* @ret_const() #0 {
|
|||
ret i32* %bc
|
||||
}
|
||||
define i32* @use_const() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@use_const
|
||||
; CHECK-SAME: () #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret i32* bitcast (i8* @G to i32*)
|
||||
|
@ -1422,7 +1422,7 @@ define i32* @use_const() #0 {
|
|||
ret i32* %c
|
||||
}
|
||||
define i32* @dont_use_const() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@dont_use_const
|
||||
; CHECK-SAME: () #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret i32* bitcast (i8* @G to i32*)
|
||||
|
@ -1476,11 +1476,11 @@ declare dso_local i8* @__dynamic_cast(i8*, i8*, i8*, i64)
|
|||
|
||||
attributes #0 = { noinline nounwind uwtable }
|
||||
;.
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR2]] = { nofree noinline norecurse nosync nounwind readnone uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR3]] = { argmemonly nofree noinline nosync nounwind readonly uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR4]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR4]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR5]] = { noinline nounwind uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR6]] = { noinline norecurse nounwind uwtable }
|
||||
; IS__TUNIT____: attributes #[[ATTR7]] = { noreturn }
|
||||
|
@ -1491,8 +1491,8 @@ attributes #0 = { noinline nounwind uwtable }
|
|||
; IS__TUNIT____: attributes #[[ATTR12]] = { nounwind }
|
||||
; IS__TUNIT____: attributes #[[ATTR13:[0-9]+]] = { nounwind readnone }
|
||||
;.
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR2]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR3]] = { argmemonly nofree noinline nosync nounwind readonly uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR4]] = { noinline nounwind uwtable }
|
||||
|
|
|
@ -3816,7 +3816,7 @@ entry:
|
|||
}
|
||||
|
||||
define internal fastcc void @nested_memory_callee(%struct.STy* nocapture readonly %S) nofree norecurse nounwind uwtable {
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@nested_memory_callee
|
||||
; IS__TUNIT_OPM-SAME: () #[[ATTR12:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: entry:
|
||||
|
@ -3830,7 +3830,7 @@ define internal fastcc void @nested_memory_callee(%struct.STy* nocapture readonl
|
|||
; IS__TUNIT_OPM-NEXT: store float [[CONV]], float* [[TMP3]], align 4
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS________NPM: Function Attrs: nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@nested_memory_callee
|
||||
; IS________NPM-SAME: () #[[ATTR9:[0-9]+]] {
|
||||
; IS________NPM-NEXT: entry:
|
||||
|
@ -3844,7 +3844,7 @@ define internal fastcc void @nested_memory_callee(%struct.STy* nocapture readonl
|
|||
; IS________NPM-NEXT: store float [[CONV]], float* [[TMP3]], align 4
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind uwtable willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn uwtable
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@nested_memory_callee
|
||||
; IS__CGSCC_OPM-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-NEXT: entry:
|
||||
|
@ -4100,7 +4100,7 @@ for.body7: ; preds = %for.cond4
|
|||
; IS__TUNIT_OPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR10]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR12]] = { nofree norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR12]] = { nofree norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR13]] = { argmemonly nofree nosync nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR14]] = { willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR15]] = { nofree nosync nounwind willreturn writeonly }
|
||||
|
@ -4117,7 +4117,7 @@ for.body7: ; preds = %for.cond4
|
|||
; IS__TUNIT_NPM: attributes #[[ATTR6]] = { argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR7]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR10:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR11]] = { willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR12]] = { nofree nosync nounwind willreturn writeonly }
|
||||
|
@ -4135,7 +4135,7 @@ for.body7: ; preds = %for.cond4
|
|||
; IS__CGSCC_OPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { nofree norecurse nosync nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12]] = { argmemonly nofree nosync nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR13]] = { willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR14]] = { nounwind willreturn writeonly }
|
||||
|
@ -4151,7 +4151,7 @@ for.body7: ; preds = %for.cond4
|
|||
; IS__CGSCC_NPM: attributes #[[ATTR6]] = { argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind uwtable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind willreturn uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR10:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR11]] = { willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR12]] = { nounwind willreturn writeonly }
|
||||
|
|
|
@ -12,7 +12,7 @@ target datalayout = "e-m:e-i54:64-f80:128-n8:16:32:64-S128"
|
|||
|
||||
; TEST 1 (positive case)
|
||||
define void @only_return() #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@only_return
|
||||
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: ret void
|
||||
|
@ -150,7 +150,7 @@ define i32 @fact_loop(i32 %0) local_unnamed_addr #0 {
|
|||
; IS________OPM-NEXT: [[TMP10:%.*]] = icmp eq i32 [[TMP6]], [[TMP0]]
|
||||
; IS________OPM-NEXT: br i1 [[TMP10]], label [[TMP3]], label [[TMP5]]
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS________NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@fact_loop
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]]) local_unnamed_addr #[[ATTR0]] {
|
||||
; IS________NPM-NEXT: [[TMP2:%.*]] = icmp slt i32 [[TMP0]], 1
|
||||
|
@ -317,7 +317,7 @@ define void @conditional_exit(i32 %0, i32* nocapture readonly %1) local_unnamed_
|
|||
declare float @llvm.floor.f32(float)
|
||||
|
||||
define void @call_floor(float %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@call_floor
|
||||
; CHECK-SAME: (float [[A:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; CHECK-NEXT: ret void
|
||||
|
@ -327,13 +327,13 @@ define void @call_floor(float %a) #0 {
|
|||
}
|
||||
|
||||
define float @call_floor2(float %a) #0 {
|
||||
; IS________OPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS________OPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; IS________OPM-SAME: (float [[A:%.*]]) #[[ATTR9]] {
|
||||
; IS________OPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR27:[0-9]+]]
|
||||
; IS________OPM-NEXT: ret float [[C]]
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree noinline nosync nounwind readnone uwtable willreturn
|
||||
; IS________NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; IS________NPM-SAME: (float [[A:%.*]]) #[[ATTR9]] {
|
||||
; IS________NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR29:[0-9]+]]
|
||||
|
@ -378,13 +378,13 @@ define void @call_maybe_noreturn() #0 {
|
|||
declare void @will_return() willreturn norecurse
|
||||
|
||||
define void @f1() #0 {
|
||||
; IS________OPM: Function Attrs: noinline nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS________OPM-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; IS________OPM-NEXT: tail call void @will_return() #[[ATTR29:[0-9]+]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: noinline nounwind uwtable willreturn
|
||||
; IS________NPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS________NPM-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; IS________NPM-NEXT: tail call void @will_return() #[[ATTR31:[0-9]+]]
|
||||
|
@ -395,7 +395,7 @@ define void @f1() #0 {
|
|||
}
|
||||
|
||||
define void @f2() #0 {
|
||||
; CHECK: Function Attrs: noinline nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@f2
|
||||
; CHECK-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; CHECK-NEXT: tail call void @f1() #[[ATTR13:[0-9]+]]
|
||||
|
@ -432,7 +432,7 @@ label2:
|
|||
; TEST 10 (positive case)
|
||||
; invoke a function with willreturn
|
||||
|
||||
; CHECK: Function Attrs: noinline uwtable willreturn
|
||||
; CHECK: Function Attrs: noinline willreturn uwtable
|
||||
; CHECK-NEXT: declare i1 @maybe_raise_exception()
|
||||
declare i1 @maybe_raise_exception() #1 willreturn
|
||||
|
||||
|
@ -501,7 +501,7 @@ define i32 @loop_constant_trip_count(i32* nocapture readonly %0) #0 {
|
|||
; IS________OPM-NEXT: [[TMP10:%.*]] = icmp eq i64 [[TMP9]], 10
|
||||
; IS________OPM-NEXT: br i1 [[TMP10]], label [[TMP2:%.*]], label [[TMP3]]
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@loop_constant_trip_count
|
||||
; IS________NPM-SAME: (i32* nocapture nofree nonnull readonly dereferenceable(4) [[TMP0:%.*]]) #[[ATTR14:[0-9]+]] {
|
||||
; IS________NPM-NEXT: br label [[TMP3:%.*]]
|
||||
|
@ -636,7 +636,7 @@ define i32 @loop_trip_dec(i32 %0, i32* nocapture readonly %1) local_unnamed_addr
|
|||
; IS________OPM-NEXT: [[TMP15:%.*]] = phi i32 [ 0, [[TMP2:%.*]] ], [ [[TMP11]], [[TMP6]] ]
|
||||
; IS________OPM-NEXT: ret i32 [[TMP15]]
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@loop_trip_dec
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]], i32* nocapture nofree readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR14]] {
|
||||
; IS________NPM-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[TMP0]], -1
|
||||
|
@ -683,7 +683,7 @@ define i32 @loop_trip_dec(i32 %0, i32* nocapture readonly %1) local_unnamed_addr
|
|||
; multiple return
|
||||
|
||||
define i32 @multiple_return(i32 %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@multiple_return
|
||||
; CHECK-SAME: (i32 [[A:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: [[B:%.*]] = icmp eq i32 [[A]], 0
|
||||
|
@ -707,7 +707,7 @@ f:
|
|||
|
||||
; 15.1 (positive case)
|
||||
define void @unreachable_exit_positive1() #0 {
|
||||
; IS________OPM: Function Attrs: noinline nounwind uwtable willreturn
|
||||
; IS________OPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@unreachable_exit_positive1
|
||||
; IS________OPM-SAME: () #[[ATTR11]] {
|
||||
; IS________OPM-NEXT: tail call void @will_return() #[[ATTR29]]
|
||||
|
@ -715,7 +715,7 @@ define void @unreachable_exit_positive1() #0 {
|
|||
; IS________OPM: unreachable_label:
|
||||
; IS________OPM-NEXT: unreachable
|
||||
;
|
||||
; IS________NPM: Function Attrs: noinline nounwind uwtable willreturn
|
||||
; IS________NPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@unreachable_exit_positive1
|
||||
; IS________NPM-SAME: () #[[ATTR11]] {
|
||||
; IS________NPM-NEXT: tail call void @will_return() #[[ATTR31]]
|
||||
|
@ -750,7 +750,7 @@ define i32 @unreachable_exit_positive2(i32) local_unnamed_addr #0 {
|
|||
; IS________OPM: unreachable_label:
|
||||
; IS________OPM-NEXT: unreachable
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone uwtable willreturn
|
||||
; IS________NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@unreachable_exit_positive2
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]]) local_unnamed_addr #[[ATTR0]] {
|
||||
; IS________NPM-NEXT: [[TMP2:%.*]] = icmp slt i32 [[TMP0]], 1
|
||||
|
@ -1555,7 +1555,7 @@ define void @willreturn_mustprogress_callee_4() {
|
|||
attributes #0 = { nounwind uwtable noinline }
|
||||
attributes #1 = { uwtable noinline }
|
||||
;.
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR2]] = { nofree noinline norecurse nosync nounwind readnone uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR3:[0-9]+]] = { nofree nosync nounwind willreturn }
|
||||
|
@ -1564,10 +1564,10 @@ attributes #1 = { uwtable noinline }
|
|||
; IS__TUNIT_OPM: attributes #[[ATTR6]] = { noinline noreturn nounwind uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR7]] = { noinline nounwind uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR8:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR10:[0-9]+]] = { norecurse willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR11]] = { noinline nounwind uwtable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR12:[0-9]+]] = { noinline uwtable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR11]] = { noinline nounwind willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR12:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR15]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
|
@ -1586,7 +1586,7 @@ attributes #1 = { uwtable noinline }
|
|||
; IS__TUNIT_OPM: attributes #[[ATTR28]] = { nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR29]] = { willreturn }
|
||||
;.
|
||||
; IS________NPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
; IS________NPM: attributes #[[ATTR2]] = { nofree noinline norecurse nosync nounwind readnone uwtable }
|
||||
; IS________NPM: attributes #[[ATTR3:[0-9]+]] = { nofree nosync nounwind willreturn }
|
||||
|
@ -1595,12 +1595,12 @@ attributes #1 = { uwtable noinline }
|
|||
; IS________NPM: attributes #[[ATTR6]] = { noinline noreturn nounwind uwtable }
|
||||
; IS________NPM: attributes #[[ATTR7]] = { noinline nounwind uwtable }
|
||||
; IS________NPM: attributes #[[ATTR8:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR10:[0-9]+]] = { norecurse willreturn }
|
||||
; IS________NPM: attributes #[[ATTR11]] = { noinline nounwind uwtable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR12:[0-9]+]] = { noinline uwtable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR11]] = { noinline nounwind willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR12:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR15]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS________NPM: attributes #[[ATTR16]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS________NPM: attributes #[[ATTR17:[0-9]+]] = { noreturn nounwind }
|
||||
|
@ -1619,7 +1619,7 @@ attributes #1 = { uwtable noinline }
|
|||
; IS________NPM: attributes #[[ATTR30]] = { nounwind }
|
||||
; IS________NPM: attributes #[[ATTR31]] = { willreturn }
|
||||
;.
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { nofree noinline norecurse nosync nounwind readnone uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR3:[0-9]+]] = { nofree nosync nounwind willreturn }
|
||||
|
@ -1628,10 +1628,10 @@ attributes #1 = { uwtable noinline }
|
|||
; IS__CGSCC_OPM: attributes #[[ATTR6]] = { noinline noreturn nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10:[0-9]+]] = { norecurse willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { noinline nounwind uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12:[0-9]+]] = { noinline uwtable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { noinline nounwind willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR15]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
|
|
|
@ -20,5 +20,5 @@ entry:
|
|||
ret i32 %r
|
||||
}
|
||||
|
||||
; CHECK: attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone ssp uwtable willreturn }
|
||||
; CHECK: attributes #1 = { mustprogress nofree norecurse nounwind ssp uwtable willreturn }
|
||||
; CHECK: attributes #0 = { mustprogress nofree norecurse nosync nounwind readnone ssp willreturn uwtable }
|
||||
; CHECK: attributes #1 = { mustprogress nofree norecurse nounwind ssp willreturn uwtable }
|
||||
|
|
|
@ -12,7 +12,7 @@ declare void @_ZdaPv(i8*) local_unnamed_addr #2
|
|||
|
||||
|
||||
; TEST 1 (positive case)
|
||||
; FNATTR: Function Attrs: mustprogress nofree noinline norecurse nosync nounwind readnone uwtable
|
||||
; FNATTR: Function Attrs: mustprogress nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; FNATTR-NEXT: define void @only_return()
|
||||
define void @only_return() #0 {
|
||||
ret void
|
||||
|
|
|
@ -36,7 +36,7 @@ entry:
|
|||
declare void @free(i8* nocapture) local_unnamed_addr #2
|
||||
|
||||
define i32 @_Z4foo3Pi(i32* nocapture readonly %a) local_unnamed_addr #3 {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind readonly uwtable willreturn
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind readonly willreturn uwtable
|
||||
; CHECK-LABEL: @_Z4foo3Pi(
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[A:%.*]], align 4
|
||||
|
|
|
@ -104,7 +104,7 @@ define void @test9(i8* %p) {
|
|||
|
||||
; atomic load with monotonic ordering
|
||||
define i32 @load_monotonic(i32* nocapture readonly %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: @load_monotonic(
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load atomic i32, i32* [[TMP0:%.*]] monotonic, align 4
|
||||
; CHECK-NEXT: ret i32 [[TMP2]]
|
||||
|
@ -115,7 +115,7 @@ define i32 @load_monotonic(i32* nocapture readonly %0) norecurse nounwind uwtabl
|
|||
|
||||
; atomic store with monotonic ordering.
|
||||
define void @store_monotonic(i32* nocapture %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: @store_monotonic(
|
||||
; CHECK-NEXT: store atomic i32 10, i32* [[TMP0:%.*]] monotonic, align 4
|
||||
; CHECK-NEXT: ret void
|
||||
|
@ -127,7 +127,7 @@ define void @store_monotonic(i32* nocapture %0) norecurse nounwind uwtable {
|
|||
; negative, should not deduce nosync
|
||||
; atomic load with acquire ordering.
|
||||
define i32 @load_acquire(i32* nocapture readonly %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: @load_acquire(
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load atomic i32, i32* [[TMP0:%.*]] acquire, align 4
|
||||
; CHECK-NEXT: ret i32 [[TMP2]]
|
||||
|
@ -137,7 +137,7 @@ define i32 @load_acquire(i32* nocapture readonly %0) norecurse nounwind uwtable
|
|||
}
|
||||
|
||||
define i32 @load_unordered(i32* nocapture readonly %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind readonly uwtable willreturn
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind readonly willreturn uwtable
|
||||
; CHECK-LABEL: @load_unordered(
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load atomic i32, i32* [[TMP0:%.*]] unordered, align 4
|
||||
; CHECK-NEXT: ret i32 [[TMP2]]
|
||||
|
@ -148,7 +148,7 @@ define i32 @load_unordered(i32* nocapture readonly %0) norecurse nounwind uwtabl
|
|||
|
||||
; atomic store with unordered ordering.
|
||||
define void @store_unordered(i32* nocapture %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind uwtable willreturn writeonly
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly uwtable
|
||||
; CHECK-LABEL: @store_unordered(
|
||||
; CHECK-NEXT: store atomic i32 10, i32* [[TMP0:%.*]] unordered, align 4
|
||||
; CHECK-NEXT: ret void
|
||||
|
@ -195,7 +195,7 @@ define void @volatile_store(i32* %0) norecurse nounwind uwtable {
|
|||
; negative, should not deduce nosync
|
||||
; volatile load.
|
||||
define i32 @volatile_load(i32* %0) norecurse nounwind uwtable {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind uwtable willreturn
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn uwtable
|
||||
; CHECK-LABEL: @volatile_load(
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = load volatile i32, i32* [[TMP0:%.*]], align 4
|
||||
; CHECK-NEXT: ret i32 [[TMP2]]
|
||||
|
@ -211,7 +211,7 @@ declare void @nosync_function() noinline nounwind uwtable nosync
|
|||
define void @call_nosync_function() nounwind uwtable noinline {
|
||||
; CHECK: Function Attrs: noinline nosync nounwind uwtable
|
||||
; CHECK-LABEL: @call_nosync_function(
|
||||
; CHECK-NEXT: tail call void @nosync_function() #[[ATTR8:[0-9]+]]
|
||||
; CHECK-NEXT: tail call void @nosync_function() #[[ATTR9:[0-9]+]]
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
tail call void @nosync_function() noinline nounwind uwtable
|
||||
|
@ -225,7 +225,7 @@ declare void @might_sync() noinline nounwind uwtable
|
|||
define void @call_might_sync() nounwind uwtable noinline {
|
||||
; CHECK: Function Attrs: noinline nounwind uwtable
|
||||
; CHECK-LABEL: @call_might_sync(
|
||||
; CHECK-NEXT: tail call void @might_sync() #[[ATTR8]]
|
||||
; CHECK-NEXT: tail call void @might_sync() #[[ATTR9]]
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
tail call void @might_sync() noinline nounwind uwtable
|
||||
|
|
|
@ -22,7 +22,7 @@ entry:
|
|||
!8 = !DILocation(line: 2, column: 1, scope: !5)
|
||||
|
||||
;; Due to -fasynchronous-unwind-tables.
|
||||
!9 = !{i32 7, !"uwtable", i32 1}
|
||||
!9 = !{i32 7, !"uwtable", i32 2}
|
||||
|
||||
;; Due to -fno-omit-frame-pointer.
|
||||
!10 = !{i32 7, !"frame-pointer", i32 2}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
%struct.ST = type { i32, double, %struct.RT }
|
||||
|
||||
define i32* @foo(%struct.ST* %s) nounwind uwtable readnone optsize ssp {
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind optsize readnone ssp uwtable willreturn
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind optsize readnone ssp willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@foo
|
||||
; CHECK-SAME: (%struct.ST* nofree readnone [[S:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: entry:
|
||||
|
|
|
@ -99,7 +99,8 @@ TEST(VerifierTest, InvalidRetAttribute) {
|
|||
FunctionType *FTy = FunctionType::get(Type::getInt32Ty(C), /*isVarArg=*/false);
|
||||
Function *F = Function::Create(FTy, Function::ExternalLinkage, "foo", M);
|
||||
AttributeList AS = F->getAttributes();
|
||||
F->setAttributes(AS.addRetAttribute(C, Attribute::UWTable));
|
||||
F->setAttributes(AS.addRetAttribute(
|
||||
C, Attribute::getWithUWTableKind(C, UWTableKind::Default)));
|
||||
|
||||
std::string Error;
|
||||
raw_string_ostream ErrorOS(Error);
|
||||
|
|
Loading…
Reference in New Issue