[LLVMdev] Instruction::mayThrow not handling invoke's?

Daniel Berlin dberlin at dberlin.org
Wed Mar 25 13:43:27 PDT 2015


After talking with Nick (the real reason i asked is because
mayHaveSideEffects returns false for this invoke), we don't consider the
control flow change of invoke to be a side effects.

On Wed, Mar 25, 2015 at 12:36 PM, Daniel Berlin <dberlin at dberlin.org> wrote:

> While improving ADCE, i notice that for
>
>
> declare i32 @strlen(i8*) readnone
>
> define i32 @test() {
> ; invoke of pure function should not be deleted!
> invoke i32 @strlen( i8* null ) readnone
> to label %Cont unwind label %Other ; <i32>:1 [#uses=0]
>
> Cont: ; preds = %0
> ret i32 0
>
> Other: ; preds = %0
>          %exn = landingpad {i8*, i32} personality i32 (...)*
> @__gxx_personality_v0
>                   cleanup
> ret i32 1
> }
>
> declare i32 @__gxx_personality_v0(...)
>
> Instruction:: mayThrow returns false for the invoke.
>
> This is because ...
>
>
>  bool Instruction::mayThrow() const {
>    if (const CallInst *CI = dyn_cast<CallInst>(this))
>      return !CI->doesNotThrow();
>    return isa<ResumeInst>(this);
>  }
>
> CallInst != InvokeInst, and invokeinst is not derived from callinst.
>
> Am I missing something, or should this function also have:
>
>  if (const InvokeInst *II = dyn_cast<InvokeInst>(this))
>  return !II->doesNotThrow();
>
> ?
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150325/b62af55a/attachment.html>


More information about the llvm-dev mailing list