1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00
llvm-mirror/test/Transforms/SimplifyCFG
Anna Thomas 23f3f90569 Strip undef implying attributes when moving calls
When hoisting/moving calls to locations, we strip unknown metadata. Such calls are usually marked `speculatable`, i.e. they are guaranteed to not cause undefined behaviour when run anywhere. So, we should strip attributes that can cause immediate undefined behaviour if those attributes are not valid in the context where the call is moved to.

This patch introduces such an API and uses it in relevant passes. See
updated tests.

Fix for PR50744.

Reviewed By: nikic, jdoerfert, lebedev.ri

Differential Revision: https://reviews.llvm.org/D104641
2021-07-27 10:57:05 -04:00
..
AArch64
AMDGPU
ARM [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
Hexagon [SimplifyCFG] SwitchToLookupTable(): don't increase ret count 2021-07-26 23:29:55 +03:00
Mips
PowerPC [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
RISCV
SPARC
X86 [SimplifyCFG] SwitchToLookupTable(): don't increase ret count 2021-07-26 23:29:55 +03:00
1elt-ptr-vec-alignment-crash.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
2002-05-21-PHIElimination.ll
2002-09-24-PHIAssertion.ll
2003-03-07-DominateProblem.ll
2003-08-05-InvokeCrash.ll
2003-08-17-BranchFold.ll
2003-08-17-BranchFoldOrdering.ll
2003-08-17-FoldSwitch-dbg.ll
2003-08-17-FoldSwitch.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
2004-12-10-SimplifyCFGCrash.ll
2005-06-16-PHICrash.ll
2005-08-01-PHIUpdateFail.ll
2005-10-02-InvokeSimplify.ll
2005-12-03-IncorrectPHIFold.ll
2006-02-17-InfiniteUnroll.ll
2006-06-12-InfLoop.ll
2006-08-03-Crash.ll
2006-10-19-UncondDiv.ll
2006-12-08-Ptr-ICmp-Branch.ll
2007-11-22-InvokeNoUnwind.ll
2007-12-21-Crash.ll
2008-01-02-hoist-fp-add.ll
2008-05-16-PHIBlockMerge.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
2008-07-13-InfLoopMiscompile.ll
2008-09-08-MultiplePred.ll
2008-09-17-SpeculativeHoist.ll
2008-10-03-SpeculativelyExecuteBeforePHI.ll
2008-12-06-SingleEntryPhi.ll
2008-12-16-DCECond.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
2009-01-18-PHIPropCrash.ll
2009-05-12-externweak.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
2011-03-08-UnreachableUse.ll
2011-09-05-TrivialLPad.ll
annotations.ll
assume.ll
attr-convergent.ll
attr-noduplicate.ll
basictest.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
bbi-23595.ll
branch-cond-merge.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
branch-cond-prop.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
branch-fold-dbg.ll
branch-fold-test.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
branch-fold-three.ll
branch-fold-threshold.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
branch-fold.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
branch-phi-thread.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
BrUnwind.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
callbr-destinations.ll
change-to-unreachable-matching-successor.ll
clamp.ll
cleanup-phis.ll [SimplifyCFG] Use make_early_inc_range() while deleting instructions 2021-05-26 11:43:11 -07:00
common-code-hoisting.ll [SimplifyCFG] Allow hoisting terminators only with HoistCommonInsts=false. 2021-04-13 10:33:35 +01:00
common-dest-folding.ll
commondest-loopid.ll [SimplifyCFG] Preserve metadata when unconditionalizing branches (same target). 2021-04-26 17:23:01 -05:00
ConditionalTrappingConstantExpr.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
constantexprs.ll
convergent.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
dbginfo.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
dce-cond-after-folding-terminator.ll
DeadSetCC.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
debug-info-thread-phi.ll
div-rem-pairs.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
drop-debug-loc-when-speculating.ll
duplicate-landingpad.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
duplicate-phis.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
empty-catchpad.ll [NFC][SimplifyCFG] Autogenerate checklines in a few tests 2021-07-02 22:35:24 +03:00
EmptyBlockMerge.ll
EqualPHIEdgeBlockMerge.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
extract-cost.ll [SimplifyCFG] SimplifyCondBranchToTwoReturns(): really only deal with different ret blocks 2021-07-23 00:36:59 +03:00
fold-branch-to-common-dest-two-preds-cost.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
fold-branch-to-common-dest.ll Strip undef implying attributes when moving calls 2021-07-27 10:57:05 -04:00
fold-debug-info.ll
fold-debug-location.ll
fold-two-entry-phi-node-with-one-block-profmd.ll [SimplifyCFG] Don't speculatively execute BB[s] if they are predictably not taken 2021-07-26 02:55:15 +03:00
fold-two-entry-phi-node-with-two-blocks-profmd.ll [SimplifyCFG] Don't speculatively execute BB[s] if they are predictably not taken 2021-07-26 02:55:15 +03:00
FoldValueComparisonIntoPredecessors-domtree-preservation-edgecase-2.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
FoldValueComparisonIntoPredecessors-domtree-preservation-edgecase.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
FoldValueComparisonIntoPredecessors-no-new-successors.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
ForwardSwitchConditionToPHI.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
gepcost.ll
guards.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
hoist-common-code.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
hoist-dbgvalue-inlined.ll
hoist-dbgvalue.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
hoist-from-addresstaken-block.ll [SimplifyCFG] FoldTwoEntryPHINode(): don't fold if either block has it's address taken 2021-06-20 12:37:14 +03:00
hoist-with-range.ll
HoistCode.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
implied-and-or.ll
implied-cond-matching-false-dest.ll
implied-cond-matching-imm.ll
implied-cond-matching.ll
implied-cond.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
indirectbr.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
InfLoop.ll
inline-asm-sink.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
invoke_unwind_lifetime.ll
invoke_unwind.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
invoke.ll [Local] Do not introduce a new llvm.trap before unreachable 2021-07-26 23:33:36 -05:00
iterative-simplify.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
lifetime-landingpad.ll
lifetime.ll
merge-cond-stores-2.ll
merge-cond-stores.ll
merge-default.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
merge-duplicate-conditional-ret-val.ll [SimplifyCFG] Drop support for duplicating ret's into uncond predecessors 2021-07-26 23:29:21 +03:00
merge-empty-return-blocks.ll
multiple-phis.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
no_speculative_loads_with_asan.ll [NFC][SimplifyCFG] Autogenerate check lines in few more tests 2021-04-28 00:35:44 +03:00
no_speculative_loads_with_tsan.ll [NFC][SimplifyCFG] Autogenerate check lines in few more tests 2021-04-28 00:35:44 +03:00
no-md-sink.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
nomerge.ll
noreturn-call.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
opt-for-fuzzing.ll
phi-to-select-constexpr-icmp.ll
phi-undef-loadstore.ll
PhiBlockMerge2.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
PhiBlockMerge.ll
PhiEliminate2.ll
PhiEliminate3.ll
PhiEliminate.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
PHINode.ll
PhiNoEliminate.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
poison-merge.ll
pr33605.ll
pr34131.ll
pr35774.ll
pr39807.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
pr46638.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
pr48778-sdiv-speculation.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
pr50060-constantfold-loopid.ll Revert "[NFC] remove explicit default value for strboolattr attribute in tests" 2021-05-24 19:43:40 +02:00
PR9946.ll
PR16069.ll
PR17073.ll [SimplifyCFG] SimplifyCondBranchToTwoReturns(): really only deal with different ret blocks 2021-07-23 00:36:59 +03:00
PR25267.ll
PR27615-simplify-cond-br.ll
preserve-branchweights-partial.ll
preserve-branchweights-switch-create.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
preserve-branchweights.ll [SimplifyCFG] Fold branch to common dest: if branch is unpredictable, prefer to speculate 2021-07-26 02:57:19 +03:00
preserve-llvm-loop-metadata.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
preserve-load-metadata-2.ll
preserve-load-metadata-3.ll
preserve-load-metadata.ll
preserve-make-implicit-on-switch-to-br.ll
preserve-store-alignment.ll [NFC][SimplifyCFG] Autogenerate check lines in few more tests 2021-04-28 00:35:44 +03:00
rangereduce.ll [SimplifyCFG] SwitchToLookupTable(): don't increase ret count 2021-07-26 23:29:55 +03:00
return-merge.ll [SimplifyCFG] Drop support for duplicating ret's into uncond predecessors 2021-07-26 23:29:21 +03:00
safe-abs.ll
seh-nounwind.ll
select-gep.ll
signbit-like-value-extension.ll
SimplifyEqualityComparisonWithOnlyPredecessor-domtree-preservation-edgecase.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
SimplifyTerminatorOnSelect-domtree-preservation-edgecase.ll
simplifyUnreachable-degenerate-conditional-branch-with-matching-destinations.ll [SimplifyCFG] simplifyUnreachable(): erase instructions iff they are guaranteed to transfer execution to unreachable 2021-07-03 10:45:44 +03:00
sink-inf-loop.ll
speculate-call.ll Strip undef implying attributes when moving calls 2021-07-27 10:57:05 -04:00
speculate-dbgvalue.ll
speculate-math.ll
speculate-store.ll [SimplifyCFG] Improve store speculation check 2021-07-26 15:01:00 +02:00
speculate-vector-ops-inseltpoison.ll
speculate-vector-ops.ll
speculate-with-offset.ll
speculatively-execute-block-profmd.ll [SimplifyCFG] Don't speculatively execute BB if it's predictably not taken 2021-07-26 02:55:14 +03:00
statepoint-invoke-unwind.ll
suppress-zero-branch-weights.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
switch_create-custom-dl.ll [SimplifyCFG] Fix SimplifyBranchOnICmpChain to be undef/poison safe. 2021-07-13 15:35:18 +09:00
switch_create.ll [SimplifyCFG] Fix SimplifyBranchOnICmpChain to be undef/poison safe. 2021-07-13 15:35:18 +09:00
switch_msan.ll [SimplifyCFG] Fix SimplifyBranchOnICmpChain to be undef/poison safe. 2021-07-13 15:35:18 +09:00
switch_switch_fold.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
switch_thread.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
switch_undef.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
switch-dead-default.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
switch-masked-bits.ll [NFCI-ish][SimplifyCFGPass] Rework and generalize ret block tail-merging 2021-06-23 14:33:18 +03:00
switch-on-const-select.ll [SimplifyCFG] Tail-merging all blocks with ret terminator 2021-06-24 13:15:39 +03:00
switch-profmd.ll
switch-range-to-icmp.ll [SimplifyCFG] simplifyUnreachable(): erase instructions iff they are guaranteed to transfer execution to unreachable 2021-07-03 10:45:44 +03:00
switch-simplify-crash.ll
switch-to-br.ll
switch-to-icmp.ll
switch-to-select-multiple-edge-per-block-phi.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
switch-to-select-two-case.ll
switchToSelect-domtree-preservation-edgecase.ll
tail-merge-assert.ll [NFC][SimplifyCFG] Precommit SimplifyCFG tests from D29428 2021-04-28 00:35:44 +03:00
tail-merge-noreturn.ll [NFC][SimplifyCFG] Precommit SimplifyCFG tests from D29428 2021-04-28 00:35:44 +03:00
tail-merge-resume.ll [SimplifyCFG] Tail-merging all blocks with resume terminator 2021-06-24 21:25:06 +03:00
trap-debugloc.ll [Local] Do not introduce a new llvm.trap before unreachable 2021-07-26 23:33:36 -05:00
trap-no-null-opt-debugloc.ll
trapping-load-unreachable.ll [Local] Do not introduce a new llvm.trap before unreachable 2021-07-26 23:33:36 -05:00
two-entry-phi-fold-crash.ll
two-entry-phi-node.ll [SimplifyCFG] FoldTwoEntryPHINode(): bailout on inverted logical and/or (PR51149) 2021-07-22 22:19:34 +03:00
two-entry-phi-return.ll [SimplifyCFG] avoid crash on degenerate loop 2021-06-11 09:37:06 -04:00
UncondBranchToHeader.ll
UncondBranchToReturn.ll [NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep 2021-06-21 23:56:54 +03:00
unprofitable-pr.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
unreachable_assume.ll
unreachable-cleanuppad.ll
unreachable-matching-successor.ll
unreachable-selfloop.ll
UnreachableEliminate.ll [SimplifyCFG] Look for control flow changes instead of side effects. 2021-05-03 13:32:22 -07:00
unsigned-multiplication-will-overflow.ll
volatile-phioper.ll [NFC][SimplifyCFG] Autogenerate check lines in many test files 2021-04-27 22:05:42 +03:00
wc-widen-block.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
wineh-unreachable.ll [NFC][SimplifyCFG] Autogenerate checklines in a few tests 2021-07-02 22:35:24 +03:00