mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
[FunctionAttrs] Annotate "willreturn" for AssumeLikeInst
Summary: In D37215, AssumeLikeInstruction are regarded as `willreturn`. In this patch, annotation is added to those which don't have `willreturn` now(`sideeffect, object_size, experimental_widenable_condition`). Reviewers: jdoerfert, nikic, sstefan1 Reviewed By: nikic Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D65455 llvm-svn: 367342
This commit is contained in:
parent
a23b637475
commit
dcb5313427
@ -576,7 +576,7 @@ def int_siglongjmp : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrNoReturn]>;
|
||||
def int_objectsize : Intrinsic<[llvm_anyint_ty],
|
||||
[llvm_anyptr_ty, llvm_i1_ty,
|
||||
llvm_i1_ty, llvm_i1_ty],
|
||||
[IntrNoMem, IntrSpeculatable, ImmArg<1>, ImmArg<2>, ImmArg<3>]>,
|
||||
[IntrNoMem, IntrSpeculatable, IntrWillReturn, ImmArg<1>, ImmArg<2>, ImmArg<3>]>,
|
||||
GCCBuiltin<"__builtin_object_size">;
|
||||
|
||||
//===--------------- Constrained Floating Point Intrinsics ----------------===//
|
||||
@ -1013,7 +1013,7 @@ def int_experimental_guard : Intrinsic<[], [llvm_i1_ty, llvm_vararg_ty],
|
||||
|
||||
// Supports widenable conditions for guards represented as explicit branches.
|
||||
def int_experimental_widenable_condition : Intrinsic<[llvm_i1_ty], [],
|
||||
[IntrInaccessibleMemOnly]>;
|
||||
[IntrInaccessibleMemOnly, IntrWillReturn]>;
|
||||
|
||||
// NOP: calls/invokes to this intrinsic are removed by codegen
|
||||
def int_donothing : Intrinsic<[], [], [IntrNoMem, IntrWillReturn]>;
|
||||
@ -1022,7 +1022,7 @@ def int_donothing : Intrinsic<[], [], [IntrNoMem, IntrWillReturn]>;
|
||||
// has having opaque side effects. This may be inserted into loops to ensure
|
||||
// that they are not removed even if they turn out to be empty, for languages
|
||||
// which specify that infinite loops must be preserved.
|
||||
def int_sideeffect : Intrinsic<[], [], [IntrInaccessibleMemOnly]>;
|
||||
def int_sideeffect : Intrinsic<[], [], [IntrInaccessibleMemOnly, IntrWillReturn]>;
|
||||
|
||||
// Intrisics to support half precision floating point format
|
||||
let IntrProperties = [IntrNoMem, IntrWillReturn] in {
|
||||
|
@ -4264,10 +4264,7 @@ bool llvm::isGuaranteedToTransferExecutionToSuccessor(const Instruction *I) {
|
||||
|
||||
// FIXME: This isn't aggressive enough; a call which only writes to a global
|
||||
// is guaranteed to return.
|
||||
return CS.onlyReadsMemory() || CS.onlyAccessesArgMemory() ||
|
||||
match(I, m_Intrinsic<Intrinsic::assume>()) ||
|
||||
match(I, m_Intrinsic<Intrinsic::sideeffect>()) ||
|
||||
match(I, m_Intrinsic<Intrinsic::experimental_widenable_condition>());
|
||||
return CS.onlyReadsMemory() || CS.onlyAccessesArgMemory();
|
||||
}
|
||||
|
||||
// Other instructions return normally.
|
||||
|
Loading…
Reference in New Issue
Block a user