llvm-project/llvm/test/Transforms/InstSimplify
Sanjay Patel e98ec77a95 [InstSimplify] delete shift-of-zero guard ops around funnel shifts
This is a problem seen in common rotate idioms as noted in:
https://bugs.llvm.org/show_bug.cgi?id=34924

Note that we are not canonicalizing standard IR (shifts and logic) to the intrinsics yet. 
(Although I've written this before...) I think this is the last step before we enable 
that transform. Ie, we could regress code by doing that transform without this 
simplification in place.

In PR34924, I questioned whether this is a valid transform for target-independent IR, 
but I convinced myself this is ok. If we're speculating a funnel shift by turning cmp+br 
into select, then SimplifyCFG has already determined that the transform is justified. 
It's possible that SimplifyCFG is not taking into account profile or other metadata, 
but if that's true, then it's a bug independent of funnel shifts.

Also, we do have CGP code to restore a guard like this around an intrinsic if it can't 
be lowered cheaply. But that isn't necessary for funnel shift because the default 
expansion in SelectionDAGBuilder includes this same cmp+select.

Differential Revision: https://reviews.llvm.org/D54552

llvm-svn: 346960
2018-11-15 14:53:37 +00:00
..
2010-12-20-Boolean.ll
2011-01-14-Thread.ll
2011-02-01-Vector.ll
2011-09-05-InsertExtractValue.ll InstructionSimplify: 'extractelement' with an undef index is undef 2017-12-06 17:51:46 +00:00
2011-10-27-BinOpCrash.ll
2011-11-23-MaskedBitsCrash.ll
2013-04-19-ConstantFoldingCrash.ll
AndOrXor.ll [InstSimplify] fold extracting from std::pair (2/2) 2018-08-03 05:39:48 +00:00
add-mask.ll
add.ll [InstSimplify] simplify add instruction if two operands are negative 2018-07-12 03:06:04 +00:00
addsub.ll
and-icmps-same-ops.ll
and-or-icmp-zero.ll [InstSimplify] fold implied null ptr check (PR35790) 2018-01-13 15:44:44 +00:00
assume.ll [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
bitcast-vector-fold.ll
bitreverse-fold.ll Move tests associated with transforms moved in r321467 2017-12-30 03:13:00 +00:00
bitreverse.ll
bswap.ll
call.ll [InstSimplify] delete shift-of-zero guard ops around funnel shifts 2018-11-15 14:53:37 +00:00
cast-unsigned-icmp-cmp-0.ll [PatternMatch] allow undef elements when matching a vector zero 2018-04-22 17:07:44 +00:00
cast.ll
compare.ll llvm: Add support for "-fno-delete-null-pointer-checks" 2018-07-09 22:27:23 +00:00
constantfold-add-nuw-allones-to-allones.ll [InstSimplify] add nuw %x, -1 -> -1 fold. 2018-06-08 15:44:47 +00:00
constantfold-shl-nuw-C-to-C.ll [NFC][InstSimplify] One more negative test for shl nuw C, %x -> C fold. 2018-06-07 21:19:45 +00:00
dead-code-removal.ll
div.ll [InstSimplify] fold div/rem of zexted bool 2018-06-25 18:51:21 +00:00
exact-nsw-nuw.ll
extract-element.ll [instsimplify] consistently handle undef and out of bound indices for insertelement and extractelement 2017-12-30 05:54:22 +00:00
fast-math.ll [FPEnv] PatternMatcher support for checking FNEG ignoring signed zeros 2018-10-09 21:48:00 +00:00
fcmp-select.ll [InstSimplify] fold select (fcmp X, Y), X, Y 2018-11-05 21:51:39 +00:00
fdiv.ll [InstSimplify] add tests for FP with undef operand; NFC 2018-02-27 20:17:18 +00:00
floating-point-arithmetic.ll [InstCombine] InstCombine and InstSimplify for minimum and maximum 2018-10-19 19:01:26 +00:00
floating-point-compare.ll [InstSimplify] fold 'fcmp nnan ult X, 0.0' when X is not negative 2018-10-31 15:35:46 +00:00
fold-builtin-fma.ll
fold-intrinsics.ll Move tests associated with transforms moved in r321467 2017-12-30 03:13:00 +00:00
fp-nan.ll [InstSimplify] fp_binop X, NaN --> NaN 2018-03-21 19:31:53 +00:00
fp-undef.ll [InstSimplify] fp_binop X, undef --> NaN 2018-03-10 16:51:28 +00:00
gep.ll [InstSimplify] regenerate checks, move tests; NFC 2018-03-23 15:31:31 +00:00
icmp-abs-nabs.ll [InstSimplify] fold icmp based on range of abs/nabs (2nd try) 2018-11-01 14:07:39 +00:00
icmp-bool-constant.ll [PatternMatch] enhance m_One() to ignore undef elements in vectors 2018-02-17 16:00:42 +00:00
icmp-constant.ll
icmp-ranges.ll
implies.ll
insertelement.ll [instsimplify] consistently handle undef and out of bound indices for insertelement and extractelement 2017-12-30 05:54:22 +00:00
known-never-nan.ll [InstSimplify] use isKnownNeverNaN to fold more fcmp ord/uno 2018-08-21 14:45:13 +00:00
load-relative-32.ll
load-relative.ll
load.ll
log-exp-intrinsic.ll [InstSimplify] allow exp/log simplifications with only 'reassoc' FMF 2018-02-12 23:51:23 +00:00
logic-of-fcmps.ll
maxmin.ll
mul.ll [PatternMatch] allow undef elements when matching a vector zero 2018-04-22 17:07:44 +00:00
negate.ll [PatternMatch] allow undef elements when matching a vector zero 2018-04-22 17:07:44 +00:00
noalias-ptr.ll
or-icmps-same-ops.ll
or.ll [PatternMatch, InstSimplify] enhance m_AllOnes() to ignore undef elements in vectors 2018-02-18 18:05:08 +00:00
past-the-end.ll
phi.ll
pr28725.ll Reintroduce r320049, r320014 and r319894. 2017-12-13 11:21:18 +00:00
pr33957.ll
ptr_diff.ll
reassociate.ll [InstSimplify] regenerate checks and add tests for commutes; NFC 2018-01-18 23:11:24 +00:00
rem.ll [InstSimplify] fold srem with sext bool divisor 2018-06-26 15:32:54 +00:00
require-dominator.ll
returned.ll
sdiv.ll [InstrSimplify] fold sdiv if two operands are negated and non-overflow 2018-07-21 12:27:54 +00:00
select-and-cmp.ll [InstSimplify] Fold another Select with And/Or pattern 2018-07-31 14:17:15 +00:00
select-or-cmp.ll [InstSimplify] Fold another Select with And/Or pattern 2018-07-31 14:17:15 +00:00
select.ll Reland r301880(!): "[InstSimplify] Handle selects of GEPs with 0 offset" 2018-04-24 00:25:01 +00:00
shift-128-kb.ll
shift-knownbits.ll
shift.ll [InstSimplify] fold extracting from std::pair (1/2) 2018-08-01 04:40:32 +00:00
shr-nop.ll [InstSimplify] move tests for shifts; NFC 2018-04-21 16:58:00 +00:00
shufflevector.ll
signed-div-rem.ll
simplify-nested-bitcast.ll
srem.ll [InstSimplify] fold srem instruction if its two operands are negated. 2018-07-20 13:00:47 +00:00
sub.ll [InstCombine] move/add tests for sub/neg; NFC 2018-10-19 17:26:22 +00:00
undef.ll
vec-cmp.ll
vector_gep.ll [ConstantFolding, InstSimplify] Handle more vector GEPs 2018-03-15 16:00:29 +00:00
vector_ptr_bitcast.ll