bool paramHasStructRetAttr(unsigned i) const;
bool paramHasNestAttr(unsigned i) const;
bool paramHasByValAttr(unsigned i) const;
+ bool paramHasNoAliasAttr(unsigned i) const;
/// @brief Determine whether the call or the callee has the given attribute.
bool paramHasAttr(unsigned i, Attributes attr) const;
bool paramHasStructRetAttr(unsigned i) const;
bool paramHasNestAttr(unsigned i) const;
bool paramHasByValAttr(unsigned i) const;
+ bool paramHasNoAliasAttr(unsigned i) const;
/// @brief Determine whether the call or the callee has the given attribute.
bool paramHasAttr(unsigned i, Attributes attr) const;
bool paramHasByValAttr(unsigned i) const {
CALLSITE_DELEGATE_GETTER(paramHasByValAttr(i));
}
+ bool paramHasNoAliasAttr(unsigned i) const {
+ CALLSITE_DELEGATE_GETTER(paramHasNoAliasAttr(i));
+ }
/// paramHasAttr - whether the call or the callee has the given attribute.
bool paramHasAttr(uint16_t i, Attributes attr) const {
case Instruction::Call:
case Instruction::Invoke: {
CallSite CS(RVI);
- if (CS.paramHasAttr(0, Attribute::NoAlias))
+ if (CS.paramHasNoAliasAttr(0))
break;
if (CS.getCalledFunction() &&
SCCNodes.count(CS.getCalledFunction()))
return false;
}
+bool CallInst::paramHasNoAliasAttr(unsigned i) const {
+ if (AttributeList.getParamAttributes(i).hasNoAliasAttr())
+ return true;
+ if (const Function *F = getCalledFunction())
+ return F->getParamAttributes(i).hasNoAliasAttr();
+ return false;
+}
+
bool CallInst::paramHasAttr(unsigned i, Attributes attr) const {
if (AttributeList.paramHasAttr(i, attr))
return true;
return false;
}
+bool InvokeInst::paramHasNoAliasAttr(unsigned i) const {
+ if (AttributeList.getParamAttributes(i).hasNoAliasAttr())
+ return true;
+ if (const Function *F = getCalledFunction())
+ return F->getParamAttributes(i).hasNoAliasAttr();
+ return false;
+}
+
bool InvokeInst::paramHasAttr(unsigned i, Attributes attr) const {
if (AttributeList.paramHasAttr(i, attr))
return true;