LLVM backend for 6502
Go to file
Arnold Schwaighofer 5f0d9dbdf4 X86 cost model: Adjust cost for custom lowered vector multiplies
This matters for example in following matrix multiply:

int **mmult(int rows, int cols, int **m1, int **m2, int **m3) {
  int i, j, k, val;
  for (i=0; i<rows; i++) {
    for (j=0; j<cols; j++) {
      val = 0;
      for (k=0; k<cols; k++) {
        val += m1[i][k] * m2[k][j];
      }
      m3[i][j] = val;
    }
  }
  return(m3);
}

Taken from the test-suite benchmark Shootout.

We estimate the cost of the multiply to be 2 while we generate 9 instructions
for it and end up being quite a bit slower than the scalar version (48% on my
machine).

Also, properly differentiate between avx1 and avx2. On avx-1 we still split the
vector into 2 128bits and handle the subvector muls like above with 9
instructions.
Only on avx-2 will we have a cost of 9 for v4i64.

I changed the test case in test/Transforms/LoopVectorize/X86/avx1.ll to use an
add instead of a mul because with a mul we now no longer vectorize. I did
verify that the mul would be indeed more expensive when vectorized with 3
kernels:

for (i ...)
   r += a[i] * 3;
for (i ...)
  m1[i] = m1[i] * 3; // This matches the test case in avx1.ll
and a matrix multiply.

In each case the vectorized version was considerably slower.

radar://13304919

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176403 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-02 04:02:52 +00:00
autoconf configure: remove workaround for gcc's -Wno-maybe-uninitialized 2013-02-13 21:19:39 +00:00
bindings [python] Add markup option to disassembler 2012-12-01 21:57:30 +00:00
cmake CMake: Always include the CheckCXXCompilerFlag in HandleLLVMOptions.cmake. 2013-03-02 01:00:40 +00:00
docs Docs for llvm-symbolizer command-line tool 2013-03-01 07:58:27 +00:00
examples Update links to "Itanium C++ ABI: Exception Handling" document 2013-01-13 15:53:09 +00:00
include Modify {Call,Invoke}Inst::addAttribute to take an AttrKind. 2013-03-02 01:20:18 +00:00
lib X86 cost model: Adjust cost for custom lowered vector multiplies 2013-03-02 04:02:52 +00:00
projects Set the deployment target for Apple llvmCore builds. <rdar://problem/12712431> 2013-02-05 17:29:03 +00:00
runtime Forgot that this file needs to be C89 not C99 thanks to MSVC. No functionality 2013-02-27 08:28:35 +00:00
test X86 cost model: Adjust cost for custom lowered vector multiplies 2013-03-02 04:02:52 +00:00
tools Connect LLVM CMake build scripts to LLDB's CMake scripts: 2013-02-28 23:15:15 +00:00
unittests [Support][ErrorOr] Add support for implicit conversion from error code/condition enums. 2013-02-28 01:44:26 +00:00
utils MIsched machine model: tablegen subtarget emitter improvement. 2013-03-01 23:31:26 +00:00
.arcconfig Add .arcconfig to the repository. Useful if someone wants to use phabricator's command line tool. 2012-12-01 12:07:58 +00:00
.gitignore Add extra vim swap file pattern 2012-10-09 23:48:34 +00:00
CMakeLists.txt Revert CMake version bump since we don't actually need 2.8.6 any more. 2013-02-18 11:53:37 +00:00
CODE_OWNERS.TXT Add myself as code owner of AArch64 backend. 2013-01-31 12:51:16 +00:00
configure configure: remove workaround for gcc's -Wno-maybe-uninitialized 2013-02-13 21:19:39 +00:00
CREDITS.TXT Fix my email address in CREDITS.TXT. 2013-03-01 22:20:03 +00:00
LICENSE.TXT Add LICENSE.TXT covering contributions made by ARM. 2013-01-07 10:04:49 +00:00
llvm.spec.in
LLVMBuild.txt
Makefile Improved svn repo searching for 'make update' 2013-01-28 03:19:57 +00:00
Makefile.common Makefile.common: Update a description, s/Source/SOURCES/ , according to MakefileGuide.html#control-variables . 2012-12-07 01:43:23 +00:00
Makefile.config.in Pass CPPFLAGS/CFLAGS/CXXFLAGS from the environment of configure to 2013-02-04 08:15:53 +00:00
Makefile.rules Use 'RC_XBS' instead of 'RC_BUILDIT' to catch all times when it's built in the Apple way. 2013-02-13 19:44:08 +00:00
README.txt Revert "Test commit" 2013-02-22 19:19:41 +00:00

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.