llvm-6502/test/CodeGen/ARM
Arnold Schwaighofer c46e2df74c DAGCombiner: Fold pointless truncate, bitcast, buildvector series
(2xi32) (truncate ((2xi64) bitcast (buildvector i32 a, i32 x, i32 b, i32 y)))
can be folded into a (2xi32) (buildvector i32 a, i32 b).

Such a DAG would cause uneccessary vdup instructions followed by vmovn
instructions.

We generate this code on ARM NEON for a setcc olt, 2xf64, 2xf64. For example, in
the vectorized version of the code below.

double A[N];
double B[N];

void test_double_compare_to_double() {
  int i;
  for(i=0;i<N;i++)
    A[i] = (double)(A[i] < B[i]);
}

radar://13191881

Fixes bug 15283.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175670 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-20 21:33:32 +00:00
..
2006-11-10-CycleInDAG.ll
2007-01-19-InfiniteLoop.ll
2007-03-07-CombinerCrash.ll
2007-03-13-InstrSched.ll
2007-03-21-JoinIntervalsCrash.ll
2007-03-27-RegScavengerAssert.ll
2007-03-30-RegScavengerAssert.ll
2007-04-02-RegScavengerAssert.ll
2007-04-03-PEIBug.ll
2007-04-03-UndefinedSymbol.ll
2007-04-30-CombinerCrash.ll
2007-05-03-BadPostIndexedLd.ll
2007-05-07-tailmerge-1.ll
2007-05-09-tailmerge-2.ll
2007-05-14-InlineAsmCstCrash.ll
2007-05-14-RegScavengerAssert.ll
2007-05-22-tailmerge-3.ll
2007-05-23-BadPreIndexedStore.ll
2007-08-15-ReuseBug.ll
2008-02-04-LocalRegAllocBug.ll
2008-02-29-RegAllocLocal.ll
2008-03-05-SxtInRegBug.ll
2008-03-07-RegScavengerAssert.ll
2008-04-04-ScavengerAssert.ll
2008-04-10-ScavengerAssert.ll
2008-04-11-PHIofImpDef.ll
2008-05-19-LiveIntervalsBug.ll
2008-05-19-ScavengerAssert.ll
2008-07-17-Fdiv.ll
2008-07-24-CodeGenPrepCrash.ll
2008-08-07-AsmPrintBug.ll
2008-09-17-CoalescerBug.ll
2008-11-18-ScavengerAssert.ll
2009-02-16-SpillerBug.ll
2009-02-22-SoftenFloatVaArg.ll
2009-02-27-SpillerBug.ll
2009-03-07-SpillerBug.ll
2009-03-09-AddrModeBug.ll
2009-04-06-AsmModifier.ll
2009-04-08-AggregateAddr.ll
2009-04-08-FloatUndef.ll
2009-04-08-FREM.ll
2009-04-09-RegScavengerAsm.ll
2009-05-05-DAGCombineBug.ll
2009-05-07-RegAllocLocal.ll
2009-05-11-CodePlacementCrash.ll
2009-05-18-InlineAsmMem.ll
2009-06-02-ISelCrash.ll
2009-06-04-MissingLiveIn.ll
2009-06-15-RegScavengerAssert.ll
2009-06-19-RegScavengerAssert.ll
2009-06-22-CoalescerBug.ll
2009-06-30-RegScavengerAssert2.ll
2009-06-30-RegScavengerAssert3.ll
2009-06-30-RegScavengerAssert4.ll
2009-06-30-RegScavengerAssert5.ll
2009-06-30-RegScavengerAssert.ll
2009-07-01-CommuteBug.ll
2009-07-09-asm-p-constraint.ll
2009-07-18-RewriterBug.ll
2009-07-22-ScavengerAssert.ll
2009-07-22-SchedulerAssert.ll
2009-07-29-VFP3Registers.ll
2009-08-02-RegScavengerAssert-Neon.ll
2009-08-04-RegScavengerAssert-2.ll
2009-08-04-RegScavengerAssert.ll
2009-08-15-RegScavenger-EarlyClobber.ll
2009-08-15-RegScavengerAssert.ll
2009-08-21-PostRAKill2.ll
2009-08-21-PostRAKill3.ll
2009-08-21-PostRAKill.ll
2009-08-23-linkerprivate.ll
2009-08-26-ScalarToVector.ll
2009-08-27-ScalarToVector.ll
2009-08-29-ExtractEltf32.ll
2009-08-29-TooLongSplat.ll
2009-08-31-LSDA-Name.ll
2009-08-31-TwoRegShuffle.ll
2009-09-09-AllOnes.ll
2009-09-09-fpcmp-ole.ll
2009-09-10-postdec.ll
2009-09-13-InvalidSubreg.ll
2009-09-13-InvalidSuperReg.ll
2009-09-20-LiveIntervalsBug.ll
2009-09-21-LiveVariablesBug.ll
2009-09-22-LiveVariablesBug.ll
2009-09-23-LiveVariablesBug.ll
2009-09-24-spill-align.ll
2009-09-27-CoalescerBug.ll
2009-09-28-LdStOptiBug.ll
2009-10-02-NEONSubregsBug.ll
2009-10-16-Scope.ll
2009-10-21-InvalidFNeg.ll
2009-10-27-double-align.ll
2009-10-30.ll
2009-11-01-NeonMoves.ll
2009-11-02-NegativeLane.ll
2009-11-07-SubRegAsmPrinting.ll
2009-11-13-CoalescerCrash.ll
2009-11-13-ScavengerAssert2.ll
2009-11-13-ScavengerAssert.ll
2009-11-13-VRRewriterCrash.ll
2009-11-30-LiveVariablesBug.ll
2009-12-02-vtrn-undef.ll
2010-03-04-eabi-fp-spill.ll
2010-03-04-stm-undef-addr.ll
2010-03-18-ldm-rtrn.ll
2010-04-07-DbgValueOtherTargets.ll
2010-04-09-NeonSelect.ll
2010-04-13-v2f64SplitArg.ll
2010-04-14-SplitVector.ll
2010-04-15-ScavengerDebugValue.ll
2010-05-14-IllegalType.ll
2010-05-17-FastAllocCrash.ll
2010-05-18-LocalAllocCrash.ll
2010-05-18-PostIndexBug.ll
2010-05-19-Shuffles.ll
2010-05-20-NEONSpillCrash.ll
2010-05-21-BuildVector.ll
2010-06-11-vmovdrr-bitcast.ll
2010-06-21-LdStMultipleBug.ll
2010-06-21-nondarwin-tc.ll
2010-06-25-Thumb2ITInvalidIterator.ll
2010-06-29-PartialRedefFastAlloc.ll
2010-06-29-SubregImpDefs.ll
2010-07-26-GlobalMerge.ll
2010-08-04-EHCrash.ll
2010-08-04-StackVariable.ll
2010-09-21-OptCmpBug.ll
2010-09-29-mc-asm-header-test.ll
2010-10-19-mc-elf-objheader.ll
2010-10-25-ifcvt-ldm.ll
2010-11-15-SpillEarlyClobber.ll
2010-11-29-PrologueBug.ll
2010-11-30-reloc-movt.ll Added Mapping Symbols for ARM ELF 2012-12-07 16:50:23 +00:00
2010-12-07-PEIBug.ll
2010-12-08-tpsoft.ll
2010-12-15-elf-lcomm.ll Never use .lcomm on platforms where it does not accept an alignment 2012-11-27 16:11:16 +00:00
2010-12-17-LocalStackSlotCrash.ll
2011-01-19-MergedGlobalDbg.ll Attempt to recover gdb bot after r174445. 2013-02-06 00:59:41 +00:00
2011-02-04-AntidepMultidef.ll
2011-02-07-AntidepClobber.ll
2011-03-10-DAGCombineCrash.ll
2011-03-15-LdStMultipleBug.ll
2011-03-23-PeepholeBug.ll
2011-04-07-schediv.ll
2011-04-11-MachineLICMBug.ll
2011-04-12-AlignBug.ll
2011-04-12-FastRegAlloc.ll
2011-04-15-AndVFlagPeepholeBug.ll
2011-04-15-RegisterCmpPeephole.ll
2011-04-26-SchedTweak.ll
2011-04-27-IfCvtBug.ll
2011-05-04-MultipleLandingPadSuccs.ll
2011-06-09-TailCallByVal.ll
2011-06-16-TailCallByVal.ll
2011-06-29-MergeGlobalsAlign.ll
2011-07-10-GlobalMergeBug.ll
2011-08-02-MergedGlobalDbg.ll Attempt to recover gdb bot after r174445. 2013-02-06 00:59:41 +00:00
2011-08-12-vmovqqqq-pseudo.ll
2011-08-25-ldmia_ret.ll
2011-08-29-ldr_pre_imm.ll
2011-08-29-SchedCycle.ll
2011-09-09-OddVectorDivision.ll
2011-09-19-cpsr.ll
2011-09-28-CMovCombineBug.ll
2011-10-26-ExpandUnalignedLoadCrash.ll
2011-10-26-memset-inline.ll
2011-10-26-memset-with-neon.ll Some enhancements for memcpy / memset inline expansion. 2012-12-10 23:21:26 +00:00
2011-11-07-PromoteVectorLoadStore.ll
2011-11-09-BitcastVectorDouble.ll
2011-11-09-IllegalVectorFPIntConvert.ll
2011-11-14-EarlyClobber.ll
2011-11-28-DAGCombineBug.ll
2011-11-29-128bitArithmetics.ll
2011-11-30-MergeAlignment.ll
2011-12-14-machine-sink.ll
2011-12-19-sjlj-clobber.ll
2012-01-23-PostRA-LICM.ll
2012-01-24-RegSequenceLiveRange.ll
2012-01-26-CoalescerBug.ll
2012-01-26-CopyPropKills.ll
2012-02-01-CoalescerBug.ll
2012-03-05-FPSCR-bug.ll
2012-03-13-DAGCombineBug.ll
2012-03-26-FoldImmBug.ll
2012-04-02-TwoAddrInstrCrash.ll
2012-04-10-DAGCombine.ll
2012-04-24-SplitEHCriticalEdge.ll
2012-05-04-vmov.ll
2012-05-10-PreferVMOVtoVDUP32.ll
2012-05-29-TailDupBug.ll
2012-06-12-SchedMemLatency.ll
2012-08-04-DtripleSpillReload.ll
2012-08-08-legalize-unaligned.ll
2012-08-09-neon-extload.ll
2012-08-13-bfi.ll
2012-08-23-legalize-vmull.ll Codegen failure for vmull with small vectors 2012-11-30 19:08:04 +00:00
2012-08-27-CopyPhysRegCrash.ll
2012-08-30-select.ll
2012-09-18-ARMv4ISelBug.ll
2012-09-25-InlineAsmScalarToVectorConv2.ll
2012-09-25-InlineAsmScalarToVectorConv.ll
2012-10-04-AAPCS-byval-align8.ll
2012-10-04-FixedFrame-vs-byval.ll
2012-10-04-LDRB_POST_IMM-Crash.ll
2012-10-18-PR14099-ByvalFrameAddress.ll
2012-11-14-subs_carry.ll
2013-01-21-PR14992.ll PR14992 - Tablegen incorrectly converts ARM tLDMIA_UPD pseudo to tLDMIA 2013-02-13 19:21:47 +00:00
a15-mla.ll
a15.ll
addrmode.ll
aliases.ll
align.ll
alloc-no-stack-realign.ll Revert 172027 and 174336. Remove diagnostics about over-aligned stack objects. 2013-02-08 20:35:15 +00:00
alloca.ll
argaddr.ll
arguments2.ll
arguments3.ll
arguments4.ll
arguments5.ll
arguments6.ll
arguments7.ll
arguments8.ll
arguments_f64_backfill.ll
arguments-nosplit-double.ll
arguments-nosplit-i64.ll
arguments.ll
arm-and-tst-peephole.ll
arm-asm.ll
arm-frameaddr.ll
arm-modifier.ll Re-apply r175088 for bug fix 13622: Add paired register support for 2013-02-14 18:10:21 +00:00
arm-negative-stride.ll
arm-returnaddr.ll
arm-ttype-target2.ll
armv4.ll
atomic-64bit.ll Fix 64-bit atomic operations in Thumb mode. 2013-01-29 09:06:13 +00:00
atomic-cmp.ll
atomic-load-store.ll
atomic-op.ll
atomicrmw_minmax.ll
available_externally.ll
avoid-cpsr-rmw.ll Disable ARM partial flag dependency optimization at -Oz 2012-12-18 22:47:16 +00:00
bfc.ll
bfi.ll
bfx.ll LLVM sdisel normalize bit extraction of the form: 2012-12-19 20:16:09 +00:00
bic.ll
bicZext.ll
bits.ll
bswap-inline-asm.ll
bx_fold.ll
call_nolink.ll
call-noret-minsize.ll
call-noret.ll
call-tc.ll
call.ll
carry.ll
clz.ll
cmn.ll
coalesce-subregs.ll Avoid rewriting instructions twice. 2012-11-29 00:26:11 +00:00
code-placement.ll
commute-movcc.ll
compare-call.ll
constants.ll
crash-greedy-v6.ll
crash-greedy.ll
crash-O0.ll
crash-shufflevector.ll
crash.ll Handle the situation where CodeGenPrepare removes a reference to a BB that has 2012-11-29 19:38:06 +00:00
cse-call.ll
cse-libcalls.ll
ctor_order.ll
ctors_dtors.ll
ctz.ll
dagcombine-anyexttozeroext.ll
darwin-section-order.ll
data-in-code-annotations.ll
debug-info-arg.ll
debug-info-blocks.ll
debug-info-branch-folding.ll Use the 'count' attribute to calculate the upper bound of an array. 2012-12-04 21:34:03 +00:00
debug-info-d16-reg.ll
debug-info-qreg.ll Use the 'count' attribute to calculate the upper bound of an array. 2012-12-04 21:34:03 +00:00
debug-info-s16-reg.ll
debug-info-sreg2.ll
deps-fix.ll
div.ll
divmod.ll
domain-conv-vmovs.ll Fix typos in CHECK lines. 2012-12-06 21:24:47 +00:00
dyn-stackalloc.ll
eh-resume-darwin.ll
ehabi-filters.ll
ehabi-mc-cantunwind.ll Add missing header and test cases for r173939. 2013-01-30 15:48:50 +00:00
ehabi-mc-section-group.ll Add missing header and test cases for r173939. 2013-01-30 15:48:50 +00:00
ehabi-mc-section.ll Add missing header and test cases for r173939. 2013-01-30 15:48:50 +00:00
ehabi-mc-sh_link.ll Link .ARM.exidx with corresponding text section. 2013-02-05 14:18:59 +00:00
ehabi-mc.ll Add missing header and test cases for r173939. 2013-01-30 15:48:50 +00:00
ehabi-no-landingpad.ll
ehabi-unwind.ll
elf-lcomm-align.ll Never use .lcomm on platforms where it does not accept an alignment 2012-11-27 16:11:16 +00:00
extload-knownzero.ll Properly fix the tes. 2012-12-06 02:29:29 +00:00
extloadi1.ll
fabs-neon.ll
fabss.ll Remove some register allocation order dependencies. 2013-01-19 00:03:32 +00:00
fadds.ll
fast-isel-binary.ll
fast-isel-br-const.ll
fast-isel-br-phi.ll
fast-isel-call-multi-reg-return.ll
fast-isel-call.ll
fast-isel-cmp-imm.ll
fast-isel-conversion.ll
fast-isel-crash2.ll
fast-isel-crash.ll
fast-isel-deadcode.ll
fast-isel-fold.ll
fast-isel-frameaddr.ll
fast-isel-GEP-coalesce.ll
fast-isel-icmp.ll
fast-isel-indirectbr.ll Add -verify-machineinstrs to these fast-isel test cases. 2012-11-27 20:49:56 +00:00
fast-isel-intrinsic.ll Comment out the rdar number. 2013-02-18 21:59:15 +00:00
fast-isel-ldr-str-arm.ll
fast-isel-ldr-str-thumb-neg-index.ll
fast-isel-ldrh-strh-arm.ll
fast-isel-mvn.ll
fast-isel-pic.ll
fast-isel-pred.ll Add -verify-machineinstrs to these fast-isel test cases. 2012-11-27 20:49:56 +00:00
fast-isel-redefinition.ll Add -verify-machineinstrs to these fast-isel test cases. 2012-11-27 20:49:56 +00:00
fast-isel-ret.ll
fast-isel-select.ll
fast-isel-shifter.ll
fast-isel-static.ll Add -verify-machineinstrs to these fast-isel test cases. 2012-11-27 20:49:56 +00:00
fast-isel.ll
fcopysign.ll
fdivs.ll Remove some register allocation order dependencies. 2013-01-19 00:03:32 +00:00
fixunsdfdi.ll
flag-crash.ll
floorf.ll
fmacs.ll
fmdrr-fmrrd.ll
fmscs.ll
fmuls.ll
fnegs.ll
fnmacs.ll
fnmscs.ll Remove some register allocation order dependencies. 2013-01-19 00:03:32 +00:00
fnmul.ll
fnmuls.ll
fold-const.ll
formal.ll
fp16.ll
fp_convert.ll
fp-arg-shuffle.ll
fp-fast.ll
fp.ll
fparith.ll
fpcmp_ueq.ll
fpcmp-opt.ll
fpcmp.ll
fpconsts.ll
fpconv.ll
fpmem.ll
fpow.ll
fpowi.ll
fptoint.ll
fsubs.ll
fusedMAC.ll
global-merge-addrspace.ll Make the MergeGlobals pass correctly handle the address space qualifiers of the global variables. We partition the set of globals by their address space, and apply the same the trasnformation as before to merge them. 2013-01-07 12:31:25 +00:00
global-merge.ll
globals.ll
gv-stubs-crash.ll
hardfloat_neon.ll
hello.ll
hidden-vis-2.ll
hidden-vis-3.ll
hidden-vis.ll
iabs.ll
ifcvt1.ll
ifcvt2.ll
ifcvt3.ll
ifcvt4.ll
ifcvt5.ll
ifcvt6.ll
ifcvt7.ll
ifcvt8.ll
ifcvt9.ll
ifcvt10.ll
ifcvt11.ll
ifcvt12.ll
illegal-vector-bitcast.ll
imm.ll
indirectbr-2.ll
indirectbr.ll
inlineasm2.ll
inlineasm3.ll Make ARMAsmParser accept the correct alignment specifier syntax in instructions. 2013-02-14 14:46:12 +00:00
inlineasm4.ll
inlineasm-64bit.ll Re-apply r175088 for bug fix 13622: Add paired register support for 2013-02-14 18:10:21 +00:00
inlineasm-imm-arm.ll
inlineasm.ll
insn-sched1.ll
int-to-fp.ll
integer_insertelement.ll
intrinsics.ll
ispositive.ll
jumptable-label.ll
large-stack.ll
ldm.ll
ldr_ext.ll
ldr_frame.ll
ldr_post.ll
ldr_pre.ll
ldr.ll
ldrd-memoper.ll
ldrd.ll
ldst-f32-2-i32.ll
ldstrexd.ll
lit.local.cfg
load_i1_select.ll
load-global.ll
load.ll
log2_not_readnone.ll
long_shift.ll
long-setcc.ll
long.ll
longMAC.ll
lsr-code-insertion.ll
lsr-icmp-imm.ll
lsr-scale-addr-mode.ll
lsr-unfolded-offset.ll
machine-cse-cmp.ll CSE: allow PerformTrivialCoalescing to check copies across basic block 2012-11-27 18:58:41 +00:00
machine-licm.ll
mem.ll
memcpy-inline.ll Some enhancements for memcpy / memset inline expansion. 2012-12-10 23:21:26 +00:00
memfunc.ll
memset-inline.ll Some enhancements for memcpy / memset inline expansion. 2012-12-10 23:21:26 +00:00
mls.ll
movt-movw-global.ll
movt.ll
mul_const.ll
mul.ll
mulhi.ll
mult-alt-generic-arm.ll
mvn.ll
neon_arith1.ll
neon_cmp.ll DAGCombiner: Fold pointless truncate, bitcast, buildvector series 2013-02-20 21:33:32 +00:00
neon_div.ll
neon_fpconv.ll ARM NEON: Merge a f32 bitcast of a v2i32 extractelt 2013-02-19 15:27:05 +00:00
neon_ld1.ll
neon_ld2.ll
neon_minmax.ll
neon_shift.ll
neon_spill.ll
neon-fma.ll
odr_comdat.ll
opt-shuff-tstore.ll
pack.ll
peephole-bitcast.ll
phi.ll
popcnt.ll ARM custom lower ctpop for vector types. Patch by Pete Couperus. 2012-12-04 22:41:50 +00:00
pr3502.ll
pr13249.ll
prefetch.ll
private.ll
reg_sequence.ll
ret0.ll
ret_arg1.ll
ret_arg2.ll
ret_arg3.ll
ret_arg4.ll
ret_arg5.ll
ret_f32_arg2.ll
ret_f32_arg5.ll
ret_f64_arg2.ll
ret_f64_arg_reg_split.ll
ret_f64_arg_split.ll
ret_f64_arg_stack.ll
ret_i64_arg2.ll
ret_i64_arg3.ll
ret_i64_arg_split.ll
ret_i128_arg2.ll
ret_sret_vector.ll ARM: Implement CanLowerReturn so large vectors get expanded into sret. 2012-11-28 20:55:10 +00:00
ret_void.ll
rev.ll
sbfx.ll
section.ll
select_xform.ll
select-imm.ll
select.ll
shifter_operand.ll
shuffle.ll
sjlj-prepare-critical-edge.ll [SjLj Prepare] When demoting an invoke instructions to the stack, if the normal 2013-02-05 18:23:10 +00:00
smml.ll
smul.ll
spill-q.ll
stack-frame.ll
stm.ll
str_post.ll
str_pre-2.ll
str_pre.ll
str_trunc.ll
struct_byval.ll
sub-cmp-peephole.ll
sub.ll
subreg-remat.ll Simplify REG_SEQUENCE lowering. 2012-12-01 01:06:44 +00:00
sxt_rot.ll
t2-imm.ll
tail-dup.ll
tail-opts.ll
test-sharedidx.ll
thread_pointer.ll
thumb1-varalloc.ll
thumb2-it-block.ll
tls1.ll
tls2.ll
tls3.ll
tls-models.ll
trap.ll Add a special ARM trap encoding for NaCl. 2013-01-30 16:30:19 +00:00
trunc_ldr.ll
truncstore-dag-combine.ll
tst_teq.ll
twoaddrinstr.ll
uint64tof64.ll
umulo-32.ll
unaligned_load_store_vector.ll
unaligned_load_store.ll
undef-sext.ll
unord.ll
unsafe-fsub.ll
uxt_rot.ll
uxtb.ll
va_arg.ll
vaba.ll
vabd.ll
vabs.ll
vadd.ll Revert "Adding support for llvm.arm.neon.vaddl[su].* and" 2012-12-20 21:09:38 +00:00
vargs_align.ll
vargs.ll
vbits.ll
vbsl-constant.ll
vbsl.ll
vceq.ll
vcge.ll
vcgt.ll
vcnt.ll
vcombine.ll
vcvt_combine.ll
vcvt.ll
vdiv_combine.ll
vdup.ll
vector-DAGCombine.ll ARM NEON: Handle v16i8 and v8i16 reverse shuffles 2013-02-12 01:58:32 +00:00
vector-extend-narrow.ll
vext.ll
vfcmp.ll
vfp.ll
vget_lane.ll
vhadd.ll
vhsub.ll
vicmp.ll
vld1.ll
vld2.ll
vld3.ll
vld4.ll
vlddup.ll
vldlane.ll
vminmax.ll
vmla.ll
vmls.ll
vmov.ll
vmul.ll
vneg.ll
vpadal.ll
vpadd.ll
vpminmax.ll
vqadd.ll
vqdmul.ll
vqshl.ll
vqshrn.ll
vqsub.ll
vrec.ll
vrev.ll
vselect_imax.ll
vshift.ll
vshiftins.ll
vshl.ll
vshll.ll
vshrn.ll
vsra.ll
vst1.ll
vst2.ll
vst3.ll
vst4.ll
vstlane.ll
vsub.ll Revert "Adding support for llvm.arm.neon.vaddl[su].* and" 2012-12-20 21:09:38 +00:00
vtbl.ll
vtrn.ll
vuzp.ll
vzip.ll
weak2.ll
weak.ll
widen-vmovs.ll