llvm-project/llvm/test/CodeGen/ARM/Windows
Eli Friedman e1687a89e8 [ARM] Adjust AND immediates to make them cheaper to select.
LLVM normally prefers to minimize the number of bits set in an AND
immediate, but that doesn't always match the available ARM instructions.
In Thumb1 mode, prefer uxtb or uxth where possible; otherwise, prefer
a two-instruction sequence movs+ands or movs+bics.

Some potential improvements outlined in
ARMTargetLowering::targetShrinkDemandedConstant, but seems to work
pretty well already.

The ARMISelDAGToDAG fix ensures we don't generate an invalid UBFX
instruction due to a larger-than-expected mask. (It's orthogonal, in
some sense, but as far as I can tell it's either impossible or nearly
impossible to reproduce the bug without this change.)

According to my testing, this seems to consistently improve codesize by
a small amount by forming bic more often for ISD::AND with an immediate.

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

llvm-svn: 339472
2018-08-10 21:21:53 +00:00
..
aapcs.ll
alloca-no-stack-arg-probe.ll [ARM, AArch64] Check the no-stack-arg-probe attribute for dynamic stack probes 2018-03-19 20:06:50 +00:00
alloca.ll [ARM] Adjust AND immediates to make them cheaper to select. 2018-08-10 21:21:53 +00:00
builtin_longjmp.ll
chkstk-movw-movt-isel.ll [ARM] Back up R4 and LR if calling the stack probe function 2018-05-14 21:32:52 +00:00
chkstk-no-stack-arg-probe.ll [ARM, AArch64] Check the no-stack-arg-probe attribute for dynamic stack probes 2018-03-19 20:06:50 +00:00
chkstk.ll
dbzchk.ll [CodeGen] Don't omit any redundant information in -debug output 2018-02-26 15:23:42 +00:00
division-range.ll
division.ll
dllexport.ll [CodeGen] Hoist common AsmPrinter code out of X86, ARM, and AArch64 2018-01-17 23:55:23 +00:00
dllimport.ll
frame-register.ll
global-minsize.ll
hard-float.ll
if-cvt-bundle.ll
libcalls.ll
long-calls.ll
mangling.ll
memset.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
mov32t-bundling.ll
movw-movt-relocations.ll
no-aeabi.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
no-eabi.ll
no-ehabi.ll
no-frame-register.ll
pic.ll
powi.ll
read-only-data.ll
stack-probe-non-default.ll
structors.ll
tls.ll
trivial-gnu-object.ll
vla-cpsr.ll Followup on Proposal to move MIR physical register namespace to '$' sigil. 2018-01-31 22:04:26 +00:00
vla.ll [ARM] Adjust AND immediates to make them cheaper to select. 2018-08-10 21:21:53 +00:00
wineh-basic.ll