Skip to content

Commit

Permalink
[CallSite Removal] a CallBase is never an IndirectCall for isInlineAsm
Browse files Browse the repository at this point in the history
Summary:
Thanks to Bill Wendling (void) for the report and steps to reproduce.  It looks
like this was missed during r350508's cleanup of the CallSite split into
CallBase, CallInst, and CallBrInst.

This was exposed by running pgo on a callbr, which was creating a ptrtoint to
the inline asm thinking it was an indirect call. The relevant callchain looks
like:

    IndirectCallPromotionPlugin::run()
    -> PGOIndirectCallVisitor::findIndirectCalls()
      -> PGOIndirectCallVisitor::visitCallBase()
        -> CallBase::isIndirectCall()

Reviewers: void, chandlerc

Reviewed By: void

Subscribers: hiraditya, llvm-commits, craig.topper, srhines

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77600
  • Loading branch information
nickdesaulniers committed Apr 6, 2020
1 parent 29beabb commit 41ba801
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
5 changes: 1 addition & 4 deletions llvm/lib/IR/Instructions.cpp
Expand Up @@ -267,10 +267,7 @@ bool CallBase::isIndirectCall() const {
const Value *V = getCalledValue();
if (isa<Function>(V) || isa<Constant>(V))
return false;
if (const CallInst *CI = dyn_cast<CallInst>(this))
if (CI->isInlineAsm())
return false;
return true;
return !isInlineAsm();
}

/// Tests if this call site must be tail call optimized. Only a CallInst can
Expand Down
17 changes: 17 additions & 0 deletions llvm/test/Transforms/PGOProfile/callbr.ll
@@ -0,0 +1,17 @@
; RUN: opt -pgo-instr-gen -S 2>&1 < %s | FileCheck %s

define i32 @a() {
entry:
; CHECK-NOT: ptrtoint void (i8*)* asm sideeffect
; CHECK: callbr void asm sideeffect
%retval = alloca i32, align 4
callbr void asm sideeffect "", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@a, %b)) #1
to label %asm.fallthrough [label %b]

asm.fallthrough:
br label %b

b:
%0 = load i32, i32* %retval, align 4
ret i32 %0
}

0 comments on commit 41ba801

Please sign in to comment.