[LLVMdev] Instruction::mayThrow not handling invoke's? (original) (raw)
Sanjoy Das sanjoy at playingwithpointers.com
Mon Jul 20 00:00:16 PDT 2015
- Previous message: [LLVMdev] llvm::Linker incorrectly fails to link in all aspects of the source module
- Next message: [LLVMdev] LLVM Weekly - #81, Jul 20th 2015
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [LLVMdev] llvm::Linker incorrectly fails to link in all aspects of the source module
- Next message: [LLVMdev] LLVM Weekly - #81, Jul 20th 2015
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]