[LLVMdev] Instruction::mayThrow not handling invoke's?
Daniel Berlin
dberlin at dberlin.org
Wed Mar 25 12:36:04 PDT 2015
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/bd33d933/attachment.html>
More information about the llvm-dev
mailing list