@@ -1742,10 +1742,16 @@ struct Attributor {
1742
1742
1743
1743
Function *AssociatedFn = IRP.getAssociatedFunction ();
1744
1744
1745
- // Check if we require a callee but there is none.
1746
- if (!AssociatedFn && AAType::requiresCalleeForCallBase () &&
1747
- IRP.isAnyCallSitePosition ())
1748
- return false ;
1745
+ if (IRP.isAnyCallSitePosition ()) {
1746
+ // Check if we require a callee but there is none.
1747
+ if (!AssociatedFn && AAType::requiresCalleeForCallBase ())
1748
+ return false ;
1749
+
1750
+ // Check if we require non-asm but it is inline asm.
1751
+ if (AAType::requiresNonAsmForCallBase () &&
1752
+ cast<CallBase>(IRP.getAnchorValue ()).isInlineAsm ())
1753
+ return false ;
1754
+ }
1749
1755
1750
1756
// Check if we require a calles but we can't see all.
1751
1757
if (AAType::requiresCallersForArgOrFunction ())
@@ -3291,6 +3297,9 @@ struct AbstractAttribute : public IRPosition, public AADepGraphNode {
3291
3297
// / a call site positon. Default is optimistic to minimize AAs.
3292
3298
static bool requiresCalleeForCallBase () { return true ; }
3293
3299
3300
+ // / Return true if this AA requires non-asm "callee" for a call site positon.
3301
+ static bool requiresNonAsmForCallBase () { return true ; }
3302
+
3294
3303
// / Return true if this AA requires all callees for an argument or function
3295
3304
// / positon.
3296
3305
static bool requiresCallersForArgOrFunction () { return false ; }
@@ -5476,6 +5485,9 @@ struct AACallEdges : public StateWrapper<BooleanState, AbstractAttribute>,
5476
5485
// / unknown callees.
5477
5486
static bool requiresCalleeForCallBase () { return false ; }
5478
5487
5488
+ // / See AbstractAttribute::requiresNonAsmForCallBase.
5489
+ static bool requiresNonAsmForCallBase () { return false ; }
5490
+
5479
5491
// / Get the optimistic edges.
5480
5492
virtual const SetVector<Function *> &getOptimisticEdges () const = 0;
5481
5493
0 commit comments