llvm-6502/test
Jim Grosbach f4e104f5eb AArch64: Constant fold converting vector setcc results to float.
Since the result of a SETCC for AArch64 is 0 or -1 in each lane, we can
move unary operations, in this case [su]int_to_fp through the mask
operation and constant fold the operation away. Generally speaking:
  UNARYOP(AND(VECTOR_CMP(x,y), constant))
      --> AND(VECTOR_CMP(x,y), constant2)
where constant2 is UNARYOP(constant).

This implements the transform where UNARYOP is [su]int_to_fp.

For example, consider the simple function:
define <4 x float> @foo(<4 x float> %val, <4 x float> %test) nounwind {
  %cmp = fcmp oeq <4 x float> %val, %test
  %ext = zext <4 x i1> %cmp to <4 x i32>
  %result = sitofp <4 x i32> %ext to <4 x float>
  ret <4 x float> %result
}

Before this change, the code is generated as:
  fcmeq.4s  v0, v0, v1
  movi.4s v1, #0x1        // Integer splat value.
  and.16b v0, v0, v1      // Mask lanes based on the comparison.
  scvtf.4s  v0, v0        // Convert each lane to f32.
  ret

After, the code is improved to:
  fcmeq.4s  v0, v0, v1
  fmov.4s v1, #1.00000000 // f32 splat value.
  and.16b v0, v0, v1      // Mask lanes based on the comparison.
  ret

The svvtf.4s has been constant folded away and the floating point 1.0f
vector lanes are materialized directly via fmov.4s.

Rather than do the folding manually in the target code, teach getNode()
in the generic SelectionDAG to handle folding constant operands of
vector [su]int_to_fp nodes. It is reasonable (as noted in a FIXME) to do
additional constant folding there as well, but I don't have test cases
for those operations, so leaving them for another time when it becomes
appropriate.

rdar://17693791

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213341 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-18 00:40:52 +00:00
..
Analysis Improve BasicAA CS-CS queries (redux) 2014-07-17 01:28:25 +00:00
Assembler IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
Bindings Reduce verbiage of lit.local.cfg files 2014-06-09 22:42:55 +00:00
Bitcode Roundtrip the inalloca bit on allocas through bitcode 2014-07-16 01:34:27 +00:00
BugPoint llvm/test/BugPoint/compile-custom.ll: Use explicit %python to invoke a test script, compile-custom.ll.py, for shebang-incapable hosts. 2014-07-11 14:44:10 +00:00
CodeGen AArch64: Constant fold converting vector setcc results to float. 2014-07-18 00:40:52 +00:00
DebugInfo MC: correct DWARF header for PE/COFF assembly input 2014-07-17 16:27:44 +00:00
ExecutionEngine [RuntimeDyld] Replace a crufty old ARM RuntimeDyld test with a new one that uses 2014-07-10 23:29:11 +00:00
Feature IR: Allow comdats to be applied to globals with internal linkage 2014-07-13 04:56:11 +00:00
FileCheck Add FileCheck -implicit-check-not option to allow stricter tests without adding too many CHECK-NOTs manually. 2014-07-11 12:39:32 +00:00
Instrumentation [ASan] Don't instrument load/stores with !nosanitize metadata. 2014-07-17 18:48:12 +00:00
Integer
JitListener
Linker IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
LTO Change the default input for llvm-nm to be a.out instead of standard input 2014-06-23 20:27:53 +00:00
MC [X86] AVX512: Add disassembler support for compressed displacement 2014-07-17 17:04:56 +00:00
Object Add printing of Mach-O stabs in llvm-nm. 2014-07-17 22:47:16 +00:00
Other IR: Fold away compares between GV GEPs and GVs 2014-07-04 22:05:26 +00:00
TableGen [TableGen] Allow shift operators to take bits<n> 2014-07-17 17:04:27 +00:00
tools llvm-objdump: Handle BSS sections larger than the object file 2014-07-14 16:20:14 +00:00
Transforms Move ashr optimization from InstCombineShift to InstSimplify. 2014-07-17 06:28:15 +00:00
Unit Let test/Unit/lit.cfg add config.shlibdir to $PATH on DLL platforms like cygming. 2014-07-04 05:11:55 +00:00
Verifier IR: Allow comdats to be applied to globals with internal linkage 2014-07-13 04:56:11 +00:00
YAMLParser
.clang-format
CMakeLists.txt
lit.cfg llvm/test/lit.cfg: Let %python available. 2014-07-11 14:36:39 +00:00
lit.site.cfg.in
Makefile
Makefile.tests
TestRunner.sh