[LLVMdev] Instruction::mayThrow not handling invoke's? (original) (raw)

Sanjoy Das sanjoy at playingwithpointers.com
Mon Jul 20 00:00:16 PDT 2015


Here is an interesting spin on this topic -- https://llvm.org/bugs/show_bug.cgi?id=24185

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

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 ; :1 [#uses=0] Cont: ; preds = %0 ret i32 0 Other: ; preds = %0 %exn = landingpad {i8*, i32} personality i32 (...)* _@gxxpersonalityv0 cleanup ret i32 1 } _declare i32 @gxxpersonalityv0(...) Instruction:: mayThrow returns false for the invoke. This is because ... bool Instruction::mayThrow() const { if (const CallInst *CI = dyncast(this)) return !CI->doesNotThrow(); return isa(this); } CallInst != InvokeInst, and invokeinst is not derived from callinst. Am I missing something, or should this function also have: if (const InvokeInst *II = dyncast(this)) return !II->doesNotThrow(); ?


LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev



More information about the llvm-dev mailing list